ETH Price: $3,950.15 (+1.50%)

Token

ERC-20: NasdaqSPX (NSPX)
 

Overview

Max Total Supply

420,689,899,999,998 NSPX

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000002004923259737 NSPX

Value
$0.00
0x7d7a2fb2ca8ca089df20da6e5194235163e0f392
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:
NasdaqSPX

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-02
*/

/**
Welcome to nastaqSPX !

Telegram : https://t.me/nasdaqSPX
Website  : https://www.nasdaqspx.info/

                                     mm                                                     
                                   *@@@                     m@***@m@*@@@***@@m *@@@*   *@@* 
                                     @@                    m@@    *@  @@   *@@m  @@@m  m@   
*@@@@@@@@m   m@*@@m   m@@*@@@   m@**@@@   m@*@@m   m@@*@@@ *@@@m      @@   m@@    *@@m@*    
  @@    @@  @@   @@   @@   ** m@@    @@  @@   @@  m@*   @@   *@@@@@m  @@@@@@@       @@@     
  @!    @@   m@@@!@   *@@@@@m @!@    @!   m@@@!@  @!    @@       *@@  @@          m@**@@m   
  @!    !@  @!   !@        @@ *!@    @!  @!   !@  @!!   @@ @@     @@  @!          @   *@@m  
  !!    !!   !!!!:!   *!   @! !!!    !!   !!!!:!  @!    !! !     *@!  @!          !!   !!!  
  !!    !!  !!   :!   !!   !! *:!    !:  !!   :!  !!!   !! !!     !!  !!         !!    *!!! 
: :::  :!: ::!: : !:  : :!:    : : : ! : :!: : !:  :!: :!: :!: : :! :!:!:      : : :    : ::
                                                        ::                                  
                                                     :: :::                                 

                                                

*/          

//SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract NasdaqSPX is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
        
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    
    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
    bool public transferDelayEnabled = true;
    
    
    uint256 public totalSellFees;
    uint256 public marketingSellFee;
    uint256 public liquiditySellFee;
    
    uint256 public totalBuyFees;
    uint256 public marketingBuyFee;
    uint256 public liquidityBuyFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;


    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    //blacklist
    bool public blacklistStatus;
    mapping (address => bool) public isBlacklisted;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event taxMultiplierActive(uint256 duration);
    
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("NasdaqSPX","NSPX")  {
        
        address newOwner = address(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123);
    
        uint256 totalSupply = 420689899999998 * 10**18;
        
        maxTransactionAmount = totalSupply * 3 / 100;
        swapTokensAtAmount = totalSupply / 1000;
        maxWallet = totalSupply * 7 / 100;

        marketingSellFee = 0;
        liquiditySellFee = 0;
        totalSellFees = marketingSellFee + liquiditySellFee;
        
        marketingBuyFee = 0;
        liquidityBuyFee = 0;
        totalBuyFees = marketingBuyFee  + liquidityBuyFee;
            	
    	marketingWallet = address(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123); // set as mw


    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    	
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            createInitialSupply is a function that is only called here,
            and CANNOT be called ever again
        */
        
        createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}

 
     // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }


     // set if blacklist function is enabled or disabled
    function setBlacklistStatus(bool newValue) external onlyOwner() {
        require(blacklistStatus != newValue, "Blacklist mode is already enabled");

        blacklistStatus = newValue;
    }
    
    // set wallet as Blacklisted
    function setBlacklisted(address account, bool newValue) external onlyOwner() {
        require(newValue != isBlacklisted[account], "Wallet is blacklisted already");
        isBlacklisted[account] = newValue;
    }

    // set multiple wallets as blacklisted
    function massSetBlacklisted(address[] memory accounts, bool newValue) external onlyOwner() {
        for(uint256 i; i < accounts.length; i++) {
            require(newValue != isBlacklisted[accounts[i]], "Some of the values are already set as Blacklisted");

            isBlacklisted[accounts[i]] = newValue;
        }
    }
     
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum > (totalSupply() * 1 / 200)/1e18, "Cannot set maxTransactionAmount lower than 0,5%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum > (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        marketingBuyFee = _marketingFee;
        liquidityBuyFee = _liquidityFee;
        totalBuyFees = marketingBuyFee + liquidityBuyFee;
        require(totalBuyFees <= 99, "Must keep fees at 99% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        marketingSellFee = _marketingFee;
        liquiditySellFee = _liquidityFee;
        totalSellFees = marketingSellFee + liquiditySellFee;
        require(totalSellFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit ExcludedMaxTransactionAmount(updAds, isEx);
    }

    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 UniSwap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    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");
	  require(!blacklistStatus || (!isBlacklisted[from] && !isBlacklisted[to]), "Blacklisted!");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet.");
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                } 
                //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, "Unable to exceed Max Wallet");
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        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;
        
        // no taxes on transfers (non buys/sells)
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                fees = amount.mul(totalSellFees).div(100);
                tokensForLiquidity += fees * liquiditySellFee / totalSellFees;
                tokensForMarketing += fees * marketingSellFee / totalSellFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) {
        	    fees = amount.mul(totalBuyFees).div(100);
                tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees;
                tokensForMarketing += fees * marketingBuyFee / totalBuyFees;
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);


    }

    
    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0x6D1D50D8fc68F9eB02Cc57B8010D999be850C123),
            block.timestamp
        );

    }
    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
                        
        // send eth for wallets
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");
        
        
    }
    
    // useful for taxs or to reclaim any ETH on the contract in a way that helps holders.
    function marketingTokens(uint256 ethAmountInWei) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }
    
    function withdrawStuckEth() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "failed to withdraw");
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"taxMultiplierActive","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"}],"name":"marketingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"massSetBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setBlacklisted","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600b556000600c556001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200008757600080fd5b506040518060400160405280600981526020017f4e617364617153505800000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e5350580000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010c92919062000d37565b5080600490805190602001906200012592919062000d37565b50505060006200013a620005f660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000736d1d50d8fc68f9eb02cc57b8010d999be850c123905060006d14bdda612d475f467e401d3800009050606460038262000216919062000e20565b62000222919062000eb0565b6008819055506103e88162000238919062000eb0565b60098190555060646007826200024f919062000e20565b6200025b919062000eb0565b600a819055506000601181905550600060128190555060125460115462000283919062000ee8565b60108190555060006014819055506000601581905550601554601454620002ab919062000ee8565b601381905550736d1d50d8fc68f9eb02cc57b8010d999be850c123600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000faf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040657600080fd5b505afa1580156200041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000441919062000faf565b6040518363ffffffff1660e01b81526004016200046092919062000ff2565b602060405180830381600087803b1580156200047b57600080fd5b505af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000faf565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000540816001620005fe60201b60201c565b62000553846001620006b160201b60201c565b62000566306001620006b160201b60201c565b6200057b61dead6001620006b160201b60201c565b6200058e846001620007fe60201b60201c565b620005a1306001620007fe60201b60201c565b620005b4826001620007fe60201b60201c565b620005c961dead6001620007fe60201b60201c565b620005db84846200094b60201b60201c565b620005ec8462000afa60201b60201c565b50505050620012eb565b600033905090565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006678282620007fe60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620006c1620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062001080565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f29190620010bf565b60405180910390a25050565b6200080e620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008979062001080565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d95826040516200093f9190620010bf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b5906200112c565b60405180910390fd5b620009d26000838362000ccf60201b60201c565b620009ee8160025462000cd460201b62002a581790919060201c565b60028190555062000a4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cd460201b62002a581790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aee91906200115f565b60405180910390a35050565b62000b0a620005f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b939062001080565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0690620011f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000ce5919062000ee8565b90508381101562000d2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d249062001264565b60405180910390fd5b8091505092915050565b82805462000d4590620012b5565b90600052602060002090601f01602090048101928262000d69576000855562000db5565b82601f1062000d8457805160ff191683800117855562000db5565b8280016001018555821562000db5579182015b8281111562000db457825182559160200191906001019062000d97565b5b50905062000dc4919062000dc8565b5090565b5b8082111562000de357600081600090555060010162000dc9565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e2d8262000de7565b915062000e3a8362000de7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e765762000e7562000df1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ebd8262000de7565b915062000eca8362000de7565b92508262000edd5762000edc62000e81565b5b828204905092915050565b600062000ef58262000de7565b915062000f028362000de7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f3a5762000f3962000df1565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f778262000f4a565b9050919050565b62000f898162000f6a565b811462000f9557600080fd5b50565b60008151905062000fa98162000f7e565b92915050565b60006020828403121562000fc85762000fc762000f45565b5b600062000fd88482850162000f98565b91505092915050565b62000fec8162000f6a565b82525050565b600060408201905062001009600083018562000fe1565b62001018602083018462000fe1565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010686020836200101f565b9150620010758262001030565b602082019050919050565b600060208201905081810360008301526200109b8162001059565b9050919050565b60008115159050919050565b620010b981620010a2565b82525050565b6000602082019050620010d66000830184620010ae565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001114601f836200101f565b91506200112182620010dc565b602082019050919050565b60006020820190508181036000830152620011478162001105565b9050919050565b620011598162000de7565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011da6026836200101f565b9150620011e7826200117c565b604082019050919050565b600060208201905081810360008301526200120d81620011cb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200124c601b836200101f565b9150620012598262001214565b602082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012ce57607f821691505b60208210811415620012e557620012e462001286565b5b50919050565b608051615c1962001315600039600081816115b001528181611f6d015261313e0152615c196000f3fe6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080736d1d50d8fc68f9eb02cc57b8010d999be850c123426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80637fa787ba116101c6578063c876d0b9116100f7578063e2f4560511610095578063ee40166e1161006f578063ee40166e14610c51578063f2fde38b14610c7c578063f8b45b0514610ca5578063fe575a8714610cd05761035b565b8063e2f4560514610bd0578063e7f444b314610bfb578063e884f26014610c265761035b565b8063ccb61358116100d1578063ccb6135814610b14578063d01dd6d214610b3f578063d0a3981414610b68578063dd62ed3e14610b935761035b565b8063c876d0b914610a95578063c8c8ebe414610ac0578063ca7b260714610aeb5761035b565b8063a457c2d711610164578063b9e937001161013e578063b9e93700146109ed578063bbc0c74214610a18578063c024666814610a43578063c18bc19514610a6c5761035b565b8063a457c2d714610936578063a9059cbb14610973578063b62496f5146109b05761035b565b80638da5cb5b116101a05780638da5cb5b1461088e578063924de9b7146108b957806395d89b41146108e25780639a7a23d61461090d5761035b565b80637fa787ba1461083557806380c1f2291461084c5780638a8c523c146108775761035b565b8063313ce567116102a0578063680789521161023e578063715018a611610218578063715018a61461079f578063751039fc146107b65780637571336a146107e157806375f0a8741461080a5761035b565b8063680789521461070c5780636ddd17131461073757806370a08231146107625761035b565b806349bd5a5e1161027a57806349bd5a5e146106505780634a62bb651461067b5780634fbee193146106a657806366ca9b83146106e35761035b565b8063313ce567146105bf57806339509351146105ea5780633f3539ef146106275761035b565b806310d5de531161030d5780631a8145bb116102e75780631a8145bb146105035780631e433c0d1461052e5780631f3fed8f1461055757806323b872dd146105825761035b565b806310d5de53146104705780631694505e146104ad57806318160ddd146104d85761035b565b806302dbd8f81461036057806306fdde0314610389578063095ea7b3146103b4578063099d0d30146103f15780630f4432e31461041c578063106b5da1146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190614457565b610d0d565b005b34801561039557600080fd5b5061039e610e12565b6040516103ab9190614530565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906145b0565b610ea4565b6040516103e8919061460b565b60405180910390f35b3480156103fd57600080fd5b50610406610ec2565b6040516104139190614635565b60405180910390f35b34801561042857600080fd5b50610431610ec8565b60405161043e9190614635565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190614650565b610ece565b005b34801561047c57600080fd5b506104976004803603810190610492919061467d565b610ff6565b6040516104a4919061460b565b60405180910390f35b3480156104b957600080fd5b506104c2611016565b6040516104cf9190614709565b60405180910390f35b3480156104e457600080fd5b506104ed61103c565b6040516104fa9190614635565b60405180910390f35b34801561050f57600080fd5b50610518611046565b6040516105259190614635565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190614750565b61104c565b005b34801561056357600080fd5b5061056c611156565b6040516105799190614635565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a4919061477d565b61115c565b6040516105b6919061460b565b60405180910390f35b3480156105cb57600080fd5b506105d4611235565b6040516105e191906147ec565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906145b0565b61123e565b60405161061e919061460b565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190614650565b6112f1565b005b34801561065c57600080fd5b506106656115ae565b6040516106729190614816565b60405180910390f35b34801561068757600080fd5b506106906115d2565b60405161069d919061460b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061467d565b6115e5565b6040516106da919061460b565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190614457565b61163b565b005b34801561071857600080fd5b50610721611740565b60405161072e9190614635565b60405180910390f35b34801561074357600080fd5b5061074c611746565b604051610759919061460b565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061467d565b611759565b6040516107969190614635565b60405180910390f35b3480156107ab57600080fd5b506107b46117a1565b005b3480156107c257600080fd5b506107cb6118f9565b6040516107d8919061460b565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190614831565b6119cf565b005b34801561081657600080fd5b5061081f611b0f565b60405161082c9190614816565b60405180910390f35b34801561084157600080fd5b5061084a611b35565b005b34801561085857600080fd5b50610861611c7b565b60405161086e919061460b565b60405180910390f35b34801561088357600080fd5b5061088c611c8e565b005b34801561089a57600080fd5b506108a3611d64565b6040516108b09190614816565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614750565b611d8e565b005b3480156108ee57600080fd5b506108f7611e42565b6040516109049190614530565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614831565b611ed4565b005b34801561094257600080fd5b5061095d600480360381019061095891906145b0565b612008565b60405161096a919061460b565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906145b0565b6120d5565b6040516109a7919061460b565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061467d565b6120f3565b6040516109e4919061460b565b60405180910390f35b3480156109f957600080fd5b50610a02612113565b604051610a0f9190614635565b60405180910390f35b348015610a2457600080fd5b50610a2d612119565b604051610a3a919061460b565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614831565b61212c565b005b348015610a7857600080fd5b50610a936004803603810190610a8e9190614650565b61226c565b005b348015610aa157600080fd5b50610aaa612394565b604051610ab7919061460b565b60405180910390f35b348015610acc57600080fd5b50610ad56123a7565b604051610ae29190614635565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906149b9565b6123ad565b005b348015610b2057600080fd5b50610b29612586565b604051610b369190614635565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614831565b61258c565b005b348015610b7457600080fd5b50610b7d612711565b604051610b8a9190614635565b60405180910390f35b348015610b9f57600080fd5b50610bba6004803603810190610bb59190614a15565b612717565b604051610bc79190614635565b60405180910390f35b348015610bdc57600080fd5b50610be561279e565b604051610bf29190614635565b60405180910390f35b348015610c0757600080fd5b50610c106127a4565b604051610c1d9190614635565b60405180910390f35b348015610c3257600080fd5b50610c3b6127aa565b604051610c48919061460b565b60405180910390f35b348015610c5d57600080fd5b50610c66612865565b604051610c739190614635565b60405180910390f35b348015610c8857600080fd5b50610ca36004803603810190610c9e919061467d565b61286b565b005b348015610cb157600080fd5b50610cba612a32565b604051610cc79190614635565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf2919061467d565b612a38565b604051610d04919061460b565b60405180910390f35b610d15612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614aa1565b60405180910390fd5b8160118190555080601281905550601254601154610dc29190614af0565b60108190555060636010541115610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0590614b92565b60405180910390fd5b5050565b606060038054610e2190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4d90614be1565b8015610e9a5780601f10610e6f57610100808354040283529160200191610e9a565b820191906000526020600020905b815481529060010190602001808311610e7d57829003601f168201915b5050505050905090565b6000610eb8610eb1612ab6565b8484612abe565b6001905092915050565b60125481565b600b5481565b610ed6612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614aa1565b60405180910390fd5b670de0b6b3a764000060c86001610f7a61103c565b610f849190614c13565b610f8e9190614c9c565b610f989190614c9c565b8111610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614d3f565b60405180910390fd5b670de0b6b3a764000081610fed9190614c13565b60088190555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60175481565b611054612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614aa1565b60405180910390fd5b801515601a60009054906101000a900460ff1615151415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090614dd1565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b60165481565b6000611169848484612c89565b61122a84611175612ab6565b61122585604051806060016040528060288152602001615b9760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111db612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b600190509392505050565b60006012905090565b60006112e761124b612ab6565b846112e2856001600061125c612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b612abe565b6001905092915050565b6112f9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90614aa1565b60405180910390fd5b6000600267ffffffffffffffff8111156113a5576113a4614876565b5b6040519080825280602002602001820160405280156113d35781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114769190614e06565b8160008151811061148a57611489614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106114d9576114d8614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b81526004016115789493929190614f5b565b6000604051808303818588803b15801561159157600080fd5b505af11580156115a5573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9981565b600d60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611643612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990614aa1565b60405180910390fd5b81601481905550806015819055506015546014546116f09190614af0565b6013819055506063601354111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614b92565b60405180910390fd5b5050565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a9612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611903612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614aa1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff0219169083151502179055506001905090565b6119d7612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90614aa1565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051611b03919061460b565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b3d612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614aa1565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611bf290614fd8565b60006040518083038185875af1925050503d8060008114611c2f576040519150601f19603f3d011682016040523d82523d6000602084013e611c34565b606091505b5050905080611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90615039565b60405180910390fd5b50565b601a60009054906101000a900460ff1681565b611c96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90614aa1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d96612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614aa1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611e5190614be1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7d90614be1565b8015611eca5780601f10611e9f57610100808354040283529160200191611eca565b820191906000526020600020905b815481529060010190602001808311611ead57829003601f168201915b5050505050905090565b611edc612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614aa1565b60405180910390fd5b7f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906150f1565b60405180910390fd5b6120048282613a1e565b5050565b60006120cb612015612ab6565b846120c685604051806060016040528060258152602001615bbf602591396001600061203f612ab6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b612abe565b6001905092915050565b60006120e96120e2612ab6565b8484612c89565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60135481565b600d60019054906101000a900460ff1681565b612134612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614aa1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612260919061460b565b60405180910390a25050565b612274612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614aa1565b60405180910390fd5b670de0b6b3a76400006064600161231861103c565b6123229190614c13565b61232c9190614c9c565b6123369190614c9c565b8111612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90615183565b60405180910390fd5b670de0b6b3a76400008161238b9190614c13565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6123b5612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614aa1565b60405180910390fd5b60005b825181101561258157601b600084838151811061246757612466614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151582151514156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490615215565b60405180910390fd5b81601b600085848151811061251557612514614e33565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061257990615235565b915050612447565b505050565b60155481565b612594612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614aa1565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151581151514156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad906152ca565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60115481565b60006127b4612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614aa1565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600c5481565b612873612ab6565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f990614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129699061535c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000808284612a679190614af0565b905083811015612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906153c8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c7c9190614635565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf09061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6090615610565b60405180910390fd5b601a60009054906101000a900460ff161580612e255750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e245750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b9061567c565b60405180910390fd5b6000811415612e7e57612e7983836000613ac9565b6139b5565b600d60019054906101000a900460ff16612f7357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f335750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f69906156e8565b60405180910390fd5b5b600d60009054906101000a900460ff161561354357612f90611d64565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffe5750612fce611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130375750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613071575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561308a5750600660149054906101000a900460ff16155b1561354257600f60009054906101000a900460ff1615613259576130ac611d64565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131355750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561318d57507f000000000000000000000000e4521f340205b595a1d60a4e9b6e4609efc10e9973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156132585743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320a906157a0565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132fc5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a357600854811115613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90615832565b60405180910390fd5b600a5461335283611759565b8261335d9190614af0565b111561339e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133959061589e565b60405180910390fd5b613541565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134465750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349557600854811115613490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348790615930565b60405180910390fd5b613540565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353f57600a546134f283611759565b826134fd9190614af0565b111561353e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135359061589e565b60405180910390fd5b5b5b5b5b5b600061354e30611759565b9050600060095482101590508080156135735750600d60029054906101000a900460ff165b801561358c5750600660149054906101000a900460ff16155b80156135e25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561368e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136d2576001600660146101000a81548160ff0219169083151502179055506136b6613d5e565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137885750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561379257600090505b600081156139a557601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137f557506000601054115b1561388f57613822606461381460105488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b9050601054601254826138359190614c13565b61383f9190614c9c565b601760008282546138509190614af0565b92505081905550601054601154826138689190614c13565b6138729190614c9c565b601660008282546138839190614af0565b92505081905550613981565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138ea57506000601354115b1561398057613917606461390960135488613f4390919063ffffffff16565b613fbe90919063ffffffff16565b90506013546015548261392a9190614c13565b6139349190614c9c565b601760008282546139459190614af0565b925050819055506013546014548261395d9190614c13565b6139679190614c9c565b601660008282546139789190614af0565b925050819055505b5b600081111561399657613995873083613ac9565b5b80856139a29190615950565b94505b6139b0878787613ac9565b505050505b505050565b6000838311158290613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f99190614530565b60405180910390fd5b5060008385613a119190615950565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613a7f82826119cf565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b309061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba090615610565b60405180910390fd5b613bb4838383614008565b613c1f81604051806060016040528060268152602001615b71602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a5890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d519190614635565b60405180910390a3505050565b6000613d6930611759565b9050600080601654601754613d7e9190614af0565b90506000831480613d8f5750600081145b15613d9c57505050613f41565b600060028260175486613daf9190614c13565b613db99190614c9c565b613dc39190614c9c565b90506000613dda828661400d90919063ffffffff16565b90506000479050613dea82614057565b6000613dff824761400d90919063ffffffff16565b90506000613e2a86613e1c60165485613f4390919063ffffffff16565b613fbe90919063ffffffff16565b905060008183613e3a9190615950565b905060006017819055506000601681905550600086118015613e5c5750600081115b15613ea957613e6b86826142a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601754604051613ea093929190615984565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613eef90614fd8565b60006040518083038185875af1925050503d8060008114613f2c576040519150601f19603f3d011682016040523d82523d6000602084013e613f31565b606091505b5050809850505050505050505050505b565b600080831415613f565760009050613fb8565b60008284613f649190614c13565b9050828482613f739190614c9c565b14613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615a2d565b60405180910390fd5b809150505b92915050565b600061400083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143aa565b905092915050565b505050565b600061404f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139ba565b905092915050565b6000600267ffffffffffffffff81111561407457614073614876565b5b6040519080825280602002602001820160405280156140a25781602001602082028036833780820191505090505b50905030816000815181106140ba576140b9614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141949190614e06565b816001815181106141a8576141a7614e33565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061420f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614273959493929190615a4d565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b505050505050565b6142d630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612abe565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080736d1d50d8fc68f9eb02cc57b8010d999be850c123426040518863ffffffff1660e01b815260040161435196959493929190615aa7565b6060604051808303818588803b15801561436a57600080fd5b505af115801561437e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143a39190615b1d565b5050505050565b600080831182906143f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e89190614530565b60405180910390fd5b50600083856144009190614c9c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61443481614421565b811461443f57600080fd5b50565b6000813590506144518161442b565b92915050565b6000806040838503121561446e5761446d614417565b5b600061447c85828601614442565b925050602061448d85828601614442565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144d15780820151818401526020810190506144b6565b838111156144e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061450282614497565b61450c81856144a2565b935061451c8185602086016144b3565b614525816144e6565b840191505092915050565b6000602082019050818103600083015261454a81846144f7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061457d82614552565b9050919050565b61458d81614572565b811461459857600080fd5b50565b6000813590506145aa81614584565b92915050565b600080604083850312156145c7576145c6614417565b5b60006145d58582860161459b565b92505060206145e685828601614442565b9150509250929050565b60008115159050919050565b614605816145f0565b82525050565b600060208201905061462060008301846145fc565b92915050565b61462f81614421565b82525050565b600060208201905061464a6000830184614626565b92915050565b60006020828403121561466657614665614417565b5b600061467484828501614442565b91505092915050565b60006020828403121561469357614692614417565b5b60006146a18482850161459b565b91505092915050565b6000819050919050565b60006146cf6146ca6146c584614552565b6146aa565b614552565b9050919050565b60006146e1826146b4565b9050919050565b60006146f3826146d6565b9050919050565b614703816146e8565b82525050565b600060208201905061471e60008301846146fa565b92915050565b61472d816145f0565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60006020828403121561476657614765614417565b5b60006147748482850161473b565b91505092915050565b60008060006060848603121561479657614795614417565b5b60006147a48682870161459b565b93505060206147b58682870161459b565b92505060406147c686828701614442565b9150509250925092565b600060ff82169050919050565b6147e6816147d0565b82525050565b600060208201905061480160008301846147dd565b92915050565b61481081614572565b82525050565b600060208201905061482b6000830184614807565b92915050565b6000806040838503121561484857614847614417565b5b60006148568582860161459b565b92505060206148678582860161473b565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148ae826144e6565b810181811067ffffffffffffffff821117156148cd576148cc614876565b5b80604052505050565b60006148e061440d565b90506148ec82826148a5565b919050565b600067ffffffffffffffff82111561490c5761490b614876565b5b602082029050602081019050919050565b600080fd5b6000614935614930846148f1565b6148d6565b905080838252602082019050602084028301858111156149585761495761491d565b5b835b81811015614981578061496d888261459b565b84526020840193505060208101905061495a565b5050509392505050565b600082601f8301126149a05761499f614871565b5b81356149b0848260208601614922565b91505092915050565b600080604083850312156149d0576149cf614417565b5b600083013567ffffffffffffffff8111156149ee576149ed61441c565b5b6149fa8582860161498b565b9250506020614a0b8582860161473b565b9150509250929050565b60008060408385031215614a2c57614a2b614417565b5b6000614a3a8582860161459b565b9250506020614a4b8582860161459b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8b6020836144a2565b9150614a9682614a55565b602082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614afb82614421565b9150614b0683614421565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3b57614b3a614ac1565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614b7c601d836144a2565b9150614b8782614b46565b602082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bf957607f821691505b60208210811415614c0d57614c0c614bb2565b5b50919050565b6000614c1e82614421565b9150614c2983614421565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6257614c61614ac1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca782614421565b9150614cb283614421565b925082614cc257614cc1614c6d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302c35250000000000000000000000000000000000602082015250565b6000614d29602f836144a2565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b7f426c61636b6c697374206d6f646520697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dbb6021836144a2565b9150614dc682614d5f565b604082019050919050565b60006020820190508181036000830152614dea81614dae565b9050919050565b600081519050614e0081614584565b92915050565b600060208284031215614e1c57614e1b614417565b5b6000614e2a84828501614df1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614e87614e82614e7d84614e62565b6146aa565b614421565b9050919050565b614e9781614e6c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed281614572565b82525050565b6000614ee48383614ec9565b60208301905092915050565b6000602082019050919050565b6000614f0882614e9d565b614f128185614ea8565b9350614f1d83614eb9565b8060005b83811015614f4e578151614f358882614ed8565b9750614f4083614ef0565b925050600181019050614f21565b5085935050505092915050565b6000608082019050614f706000830187614e8e565b8181036020830152614f828186614efd565b9050614f916040830185614807565b614f9e6060830184614626565b95945050505050565b600081905092915050565b50565b6000614fc2600083614fa7565b9150614fcd82614fb2565b600082019050919050565b6000614fe382614fb5565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150236012836144a2565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f54686520556e695377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006150db6041836144a2565b91506150e682615059565b606082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d6022836144a2565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f536f6d65206f66207468652076616c7565732061726520616c7265616479207360008201527f657420617320426c61636b6c6973746564000000000000000000000000000000602082015250565b60006151ff6031836144a2565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b600061524082614421565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561527357615272614ac1565b5b600182019050919050565b7f57616c6c657420697320626c61636b6c697374656420616c7265616479000000600082015250565b60006152b4601d836144a2565b91506152bf8261527e565b602082019050919050565b600060208201905081810360008301526152e3816152a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153466026836144a2565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006153b2601b836144a2565b91506153bd8261537c565b602082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154446024836144a2565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d66022836144a2565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155686025836144a2565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa6023836144a2565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f426c61636b6c6973746564210000000000000000000000000000000000000000600082015250565b6000615666600c836144a2565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006156d2601a836144a2565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144a2565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144a2565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615888601b836144a2565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144a2565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b82614421565b915061596683614421565b92508282101561597957615978614ac1565b5b828203905092915050565b60006060820190506159996000830186614626565b6159a66020830185614626565b6159b36040830184614626565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a176021836144a2565b9150615a22826159bb565b604082019050919050565b60006020820190508181036000830152615a4681615a0a565b9050919050565b600060a082019050615a626000830188614626565b615a6f6020830187614e8e565b8181036040830152615a818186614efd565b9050615a906060830185614807565b615a9d6080830184614626565b9695505050505050565b600060c082019050615abc6000830189614807565b615ac96020830188614626565b615ad66040830187614e8e565b615ae36060830186614e8e565b615af06080830185614807565b615afd60a0830184614626565b979650505050505050565b600081519050615b178161442b565b92915050565b600080600060608486031215615b3657615b35614417565b5b6000615b4486828701615b08565b9350506020615b5586828701615b08565b9250506040615b6686828701615b08565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa64736f6c63430008090033

Deployed Bytecode Sourcemap

30625:15705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37333:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8765:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10932:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31597:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30995:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36551:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31980:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30704:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9885:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31795:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35287:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31755:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11583:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9727:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12347:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45593:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30752:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31163:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38567:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37011:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31675:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10056:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:148;;;;;;;;;;;;;:::i;:::-;;38748:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37658:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30829:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46134:191;;;;;;;;;;;;;:::i;:::-;;32070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36186:156;;;;;;;;;;;;;:::i;:::-;;22602:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36442:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8984:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38060:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13068:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10396:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32308:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37868:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36792:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31466:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30876:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35796:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31712:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35528:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31524:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10634:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30918:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31559:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35085:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31080:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23547:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30958:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32104:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37333:317;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37452:13:::1;37433:16;:32;;;;37495:13;37476:16;:32;;;;37554:16;;37535;;:35;;;;:::i;:::-;37519:13;:51;;;;37606:2;37589:13;;:19;;37581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37333:317:::0;;:::o;8765:100::-;8819:13;8852:5;8845:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8765:100;:::o;10932:169::-;11015:4;11032:39;11041:12;:10;:12::i;:::-;11055:7;11064:6;11032:8;:39::i;:::-;11089:4;11082:11;;10932:169;;;;:::o;31597:31::-;;;;:::o;30995:39::-;;;;:::o;36551:229::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36665:4:::1;36660:3;36656:1;36640:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;36639:30;;;;:::i;:::-;36630:6;:39;36622:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36765:6;36755;:17;;;;:::i;:::-;36732:20;:40;;;;36551:229:::0;:::o;31980:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30704:41::-;;;;;;;;;;;;;:::o;9885:108::-;9946:7;9973:12;;9966:19;;9885:108;:::o;31795:33::-;;;;:::o;35287:195::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35389:8:::1;35370:27;;:15;;;;;;;;;;;:27;;;;35362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35466:8;35448:15;;:26;;;;;;;;;;;;;;;;;;35287:195:::0;:::o;31755:33::-;;;;:::o;11583:355::-;11723:4;11740:36;11750:6;11758:9;11769:6;11740:9;:36::i;:::-;11787:121;11796:6;11804:12;:10;:12::i;:::-;11818:89;11856:6;11818:89;;;;;;;;;;;;;;;;;:11;:19;11830:6;11818:19;;;;;;;;;;;;;;;:33;11838:12;:10;:12::i;:::-;11818:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11787:8;:121::i;:::-;11926:4;11919:11;;11583:355;;;;;:::o;9727:93::-;9785:5;9810:2;9803:9;;9727:93;:::o;12347:218::-;12435:4;12452:83;12461:12;:10;:12::i;:::-;12475:7;12484:50;12523:10;12484:11;:25;12496:12;:10;:12::i;:::-;12484:25;;;;;;;;;;;;;;;:34;12510:7;12484:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12452:8;:83::i;:::-;12553:4;12546:11;;12347:218;;;;:::o;45593:529::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45730:21:::1;45768:1;45754:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45730:40;;45791:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45781:4;45786:1;45781:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;45842:4;45824;45829:1;45824:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;45886:15;;;;;;;;;;;:66;;;45960:14;45990:1;46039:4;46066:6;46088:15;45886:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;45661:461;45593:529:::0;:::o;30752:38::-;;;:::o;31163:33::-;;;;;;;;;;;;;:::o;38567:125::-;38632:4;38656:19;:28;38676:7;38656:28;;;;;;;;;;;;;;;;;;;;;;;;;38649:35;;38567:125;;;:::o;37011:310::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37128:13:::1;37110:15;:31;;;;37170:13;37152:15;:31;;;;37227:15;;37209;;:33;;;;:::i;:::-;37194:12;:48;;;;37277:2;37261:12;;:18;;37253:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37011:310:::0;;:::o;31675:30::-;;;;:::o;31243:31::-;;;;;;;;;;;;;:::o;10056:127::-;10130:7;10157:9;:18;10167:7;10157:18;;;;;;;;;;;;;;;;10150:25;;10056:127;;;:::o;23244:148::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:1:::1;23314:40;;23335:6;;;;;;;;;;;23314:40;;;;;;;;;;;;23382:1;23365:6;;:19;;;;;;;;;;;;;;;;;;23244:148::o:0;38748:159::-;38800:4;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:5:::1;38816:14;;:22;;;;;;;;;;;;;;;;;;38872:5;38849:20;;:28;;;;;;;;;;;;;;;;;;38895:4;38888:11;;38748:159:::0;:::o;37658:202::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37790:4:::1;37748:31;:39;37780:6;37748:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37839:6;37810:42;;;37847:4;37810:42;;;;;;:::i;:::-;;;;;;;;37658:202:::0;;:::o;30829:30::-;;;;;;;;;;;;;:::o;46134:191::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46193:12:::1;46218:10;46210:24;;46242:21;46210:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46192:76;;;46287:7;46279:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46181:144;46134:191::o:0;32070:27::-;;;;;;;;;;;;;:::o;36186:156::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36257:4:::1;36241:13;;:20;;;;;;;;;;;;;;;;;;36286:4;36272:11;;:18;;;;;;;;;;;;;;;;;;36322:12;36301:18;:33;;;;36186:156::o:0;22602:79::-;22640:7;22667:6;;;;;;;;;;;22660:13;;22602:79;:::o;36442:101::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36528:7:::1;36514:11;;:21;;;;;;;;;;;;;;;;;;36442:101:::0;:::o;8984:104::-;9040:13;9073:7;9066:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8984:104;:::o;38060:252::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38167:13:::1;38159:21;;:4;:21;;;;38151:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;38263:41;38292:4;38298:5;38263:28;:41::i;:::-;38060:252:::0;;:::o;13068:269::-;13161:4;13178:129;13187:12;:10;:12::i;:::-;13201:7;13210:96;13249:15;13210:96;;;;;;;;;;;;;;;;;:11;:25;13222:12;:10;:12::i;:::-;13210:25;;;;;;;;;;;;;;;:34;13236:7;13210:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13178:8;:129::i;:::-;13325:4;13318:11;;13068:269;;;;:::o;10396:175::-;10482:4;10499:42;10509:12;:10;:12::i;:::-;10523:9;10534:6;10499:9;:42::i;:::-;10559:4;10552:11;;10396:175;;;;:::o;32308:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;31641:27::-;;;;:::o;31203:33::-;;;;;;;;;;;;;:::o;37868:184::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37984:8:::1;37953:19;:28;37973:7;37953:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38026:7;38010:34;;;38035:8;38010:34;;;;;;:::i;:::-;;;;;;;;37868:184:::0;;:::o;36792:211::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36912:4:::1;36907:3;36903:1;36887:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;36886:30;;;;:::i;:::-;36877:6;:39;36869:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36988:6;36978;:17;;;;:::i;:::-;36966:9;:29;;;;36792:211:::0;:::o;31466:39::-;;;;;;;;;;;;;:::o;30876:35::-;;;;:::o;35796:331::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35902:9:::1;35898:222;35917:8;:15;35913:1;:19;35898:222;;;35974:13;:26;35988:8;35997:1;35988:11;;;;;;;;:::i;:::-;;;;;;;;35974:26;;;;;;;;;;;;;;;;;;;;;;;;;35962:38;;:8;:38;;;;35954:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36100:8;36071:13;:26;36085:8;36094:1;36085:11;;;;;;;;:::i;:::-;;;;;;;;36071:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35934:3;;;;;:::i;:::-;;;;35898:222;;;;35796:331:::0;;:::o;31712:30::-;;;;:::o;35528:216::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:13:::1;:22;35650:7;35636:22;;;;;;;;;;;;;;;;;;;;;;;;;35624:34;;:8;:34;;;;35616:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35728:8;35703:13;:22;35717:7;35703:22;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;35528:216:::0;;:::o;31524:28::-;;;;:::o;10634:151::-;10723:7;10750:11;:18;10762:5;10750:18;;;;;;;;;;;;;;;:27;10769:7;10750:27;;;;;;;;;;;;;;;;10743:34;;10634:151;;;;:::o;30918:33::-;;;;:::o;31559:31::-;;;;:::o;35085:134::-;35145:4;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35184:5:::1;35161:20;;:28;;;;;;;;;;;;;;;;;;35207:4;35200:11;;35085:134:::0;:::o;31080:37::-;;;;:::o;23547:244::-;22824:12;:10;:12::i;:::-;22814:22;;:6;;;;;;;;;;;:22;;;22806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23656:1:::1;23636:22;;:8;:22;;;;23628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:8;23717:38;;23738:6;;;;;;;;;;;23717:38;;;;;;;;;;;;23775:8;23766:6;;:17;;;;;;;;;;;;;;;;;;23547:244:::0;:::o;30958:24::-;;;;:::o;32104:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;17646:181::-;17704:7;17724:9;17740:1;17736;:5;;;;:::i;:::-;17724:17;;17765:1;17760;:6;;17752:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17818:1;17811:8;;;17646:181;;;;:::o;1399:98::-;1452:7;1479:10;1472:17;;1399:98;:::o;16268:380::-;16421:1;16404:19;;:5;:19;;;;16396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16502:1;16483:21;;:7;:21;;;;16475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16586:6;16556:11;:18;16568:5;16556:18;;;;;;;;;;;;;;;:27;16575:7;16556:27;;;;;;;;;;;;;;;:36;;;;16624:7;16608:32;;16617:5;16608:32;;;16633:6;16608:32;;;;;;:::i;:::-;;;;;;;;16268:380;;;:::o;38919:4010::-;39067:1;39051:18;;:4;:18;;;;39043:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39144:1;39130:16;;:2;:16;;;;39122:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39201:15;;;;;;;;;;;39200:16;:64;;;;39222:13;:19;39236:4;39222:19;;;;;;;;;;;;;;;;;;;;;;;;;39221:20;:42;;;;;39246:13;:17;39260:2;39246:17;;;;;;;;;;;;;;;;;;;;;;;;;39245:18;39221:42;39200:64;39192:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39316:1;39306:6;:11;39303:92;;;39334:28;39350:4;39356:2;39360:1;39334:15;:28::i;:::-;39377:7;;39303:92;39419:13;;;;;;;;;;;39415:136;;39456:19;:25;39476:4;39456:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39485:19;:23;39505:2;39485:23;;;;;;;;;;;;;;;;;;;;;;;;;39456:52;39448:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:136;39574:14;;;;;;;;;;;39571:1662;;;39634:7;:5;:7::i;:::-;39626:15;;:4;:15;;;;:49;;;;;39668:7;:5;:7::i;:::-;39662:13;;:2;:13;;;;39626:49;:86;;;;;39710:1;39696:16;;:2;:16;;;;39626:86;:128;;;;;39747:6;39733:21;;:2;:21;;;;39626:128;:158;;;;;39776:8;;;;;;;;;;;39775:9;39626:158;39604:1618;;;39958:20;;;;;;;;;;;39954:423;;;40012:7;:5;:7::i;:::-;40006:13;;:2;:13;;;;:47;;;;;40037:15;;;;;;;;;;;40023:30;;:2;:30;;;;40006:47;:79;;;;;40071:13;40057:28;;:2;:28;;;;40006:79;40002:356;;;40163:12;40121:28;:39;40150:9;40121:39;;;;;;;;;;;;;;;;:54;40113:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40322:12;40280:28;:39;40309:9;40280:39;;;;;;;;;;;;;;;:54;;;;40002:356;39954:423;40445:25;:31;40471:4;40445:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40481:31;:35;40513:2;40481:35;;;;;;;;;;;;;;;;;;;;;;;;;40480:36;40445:71;40441:766;;;40559:20;;40549:6;:30;;40541:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40694:9;;40677:13;40687:2;40677:9;:13::i;:::-;40668:6;:22;;;;:::i;:::-;:35;;40660:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40441:766;;;40812:25;:29;40838:2;40812:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40846:31;:37;40878:4;40846:37;;;;;;;;;;;;;;;;;;;;;;;;;40845:38;40812:71;40808:399;;;40926:20;;40916:6;:30;;40908:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40808:399;;;41052:31;:35;41084:2;41052:35;;;;;;;;;;;;;;;;;;;;;;;;;41048:159;;41146:9;;41129:13;41139:2;41129:9;:13::i;:::-;41120:6;:22;;;;:::i;:::-;:35;;41112:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:159;40808:399;40441:766;39604:1618;39571:1662;41239:28;41270:24;41288:4;41270:9;:24::i;:::-;41239:55;;41315:12;41354:18;;41330:20;:42;;41315:57;;41403:7;:35;;;;;41427:11;;;;;;;;;;;41403:35;:61;;;;;41456:8;;;;;;;;;;;41455:9;41403:61;:110;;;;;41482:25;:31;41508:4;41482:31;;;;;;;;;;;;;;;;;;;;;;;;;41481:32;41403:110;:153;;;;;41531:19;:25;41551:4;41531:25;;;;;;;;;;;;;;;;;;;;;;;;;41530:26;41403:153;:194;;;;;41574:19;:23;41594:2;41574:23;;;;;;;;;;;;;;;;;;;;;;;;;41573:24;41403:194;41385:322;;;41635:4;41624:8;;:15;;;;;;;;;;;;;;;;;;41654:10;:8;:10::i;:::-;41690:5;41679:8;;:16;;;;;;;;;;;;;;;;;;41385:322;41719:12;41735:8;;;;;;;;;;;41734:9;41719:24;;41844:19;:25;41864:4;41844:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41873:19;:23;41893:2;41873:23;;;;;;;;;;;;;;;;;;;;;;;;;41844:52;41841:99;;;41923:5;41913:15;;41841:99;41960:12;42051:7;42048:824;;;42102:25;:29;42128:2;42102:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42151:1;42135:13;;:17;42102:50;42098:617;;;42179:34;42209:3;42179:25;42190:13;;42179:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42172:41;;42280:13;;42261:16;;42254:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42232:18;;:61;;;;;;;:::i;:::-;;;;;;;;42360:13;;42341:16;;42334:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42312:18;;:61;;;;;;;:::i;:::-;;;;;;;;42098:617;;;42434:25;:31;42460:4;42434:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42484:1;42469:12;;:16;42434:51;42431:284;;;42510:33;42539:3;42510:24;42521:12;;42510:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42503:40;;42609:12;;42591:15;;42584:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42562:18;;:59;;;;;;;:::i;:::-;;;;;;;;42687:12;;42669:15;;42662:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42640:18;;:59;;;;;;;:::i;:::-;;;;;;;;42431:284;42098:617;42741:1;42734:4;:8;42731:93;;;42766:42;42782:4;42796;42803;42766:15;:42::i;:::-;42731:93;42856:4;42846:14;;;;;:::i;:::-;;;42048:824;42884:33;42900:4;42906:2;42910:6;42884:15;:33::i;:::-;39032:3897;;;;38919:4010;;;;:::o;18549:192::-;18635:7;18668:1;18663;:6;;18671:12;18655:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18695:9;18711:1;18707;:5;;;;:::i;:::-;18695:17;;18732:1;18725:8;;;18549:192;;;;;:::o;38320:239::-;38437:5;38403:25;:31;38429:4;38403:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38455:38;38481:4;38487:5;38455:25;:38::i;:::-;38545:5;38511:40;;38539:4;38511:40;;;;;;;;;;;;38320:239;;:::o;13827:573::-;13985:1;13967:20;;:6;:20;;;;13959:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14069:1;14048:23;;:9;:23;;;;14040:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14124:47;14145:6;14153:9;14164:6;14124:20;:47::i;:::-;14204:71;14226:6;14204:71;;;;;;;;;;;;;;;;;:9;:17;14214:6;14204:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14184:9;:17;14194:6;14184:17;;;;;;;;;;;;;;;:91;;;;14309:32;14334:6;14309:9;:20;14319:9;14309:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14286:9;:20;14296:9;14286:20;;;;;;;;;;;;;;;:55;;;;14374:9;14357:35;;14366:6;14357:35;;;14385:6;14357:35;;;;;;:::i;:::-;;;;;;;;13827:573;;;:::o;44127:1363::-;44166:23;44192:24;44210:4;44192:9;:24::i;:::-;44166:50;;44227:12;44250:25;44299:18;;44278;;:39;;;;:::i;:::-;44250:67;;44360:1;44341:15;:20;:46;;;;44386:1;44365:17;:22;44341:46;44338:60;;;44390:7;;;;;44338:60;44467:23;44552:1;44532:17;44511:18;;44493:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44467:86;;44564:26;44593:36;44613:15;44593;:19;;:36;;;;:::i;:::-;44564:65;;44650:25;44678:21;44650:49;;44712:36;44729:18;44712:16;:36::i;:::-;44770:18;44791:44;44817:17;44791:21;:25;;:44;;;;:::i;:::-;44770:65;;44856:23;44882:57;44921:17;44882:34;44897:18;;44882:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44856:83;;44960:23;44999:15;44986:10;:28;;;;:::i;:::-;44960:54;;45056:1;45035:18;:22;;;;45089:1;45068:18;:22;;;;45134:1;45116:15;:19;:42;;;;;45157:1;45139:15;:19;45116:42;45113:210;;;45174:46;45187:15;45204;45174:12;:46::i;:::-;45240:71;45255:18;45275:15;45292:18;;45240:71;;;;;;;;:::i;:::-;;;;;;;;45113:210;45413:15;;;;;;;;;;;45405:29;;45442:15;45405:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45392:70;;;;;44155:1335;;;;;;;;;44127:1363;:::o;19000:471::-;19058:7;19308:1;19303;:6;19299:47;;;19333:1;19326:8;;;;19299:47;19358:9;19374:1;19370;:5;;;;:::i;:::-;19358:17;;19403:1;19398;19394;:5;;;;:::i;:::-;:10;19386:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19462:1;19455:8;;;19000:471;;;;;:::o;19947:132::-;20005:7;20032:39;20036:1;20039;20032:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20025:46;;19947:132;;;;:::o;17251:125::-;;;;:::o;18110:136::-;18168:7;18195:43;18199:1;18202;18195:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18188:50;;18110:136;;;;:::o;42943:601::-;43071:21;43109:1;43095:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43071:40;;43140:4;43122;43127:1;43122:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43166:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43156:4;43161:1;43156:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43201:62;43218:4;43233:15;;;;;;;;;;;43251:11;43201:8;:62::i;:::-;43302:15;;;;;;;;;;;:66;;;43383:11;43409:1;43453:4;43480;43500:15;43302:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:546;42943:601;:::o;43556:559::-;43704:62;43721:4;43736:15;;;;;;;;;;;43754:11;43704:8;:62::i;:::-;43809:15;;;;;;;;;;;:31;;;43848:9;43881:4;43901:11;43927:1;43970;44021:42;44079:15;43809:296;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43556:559;;:::o;20575:278::-;20661:7;20693:1;20689;:5;20696:12;20681:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20720:9;20736:1;20732;:5;;;;:::i;:::-;20720:17;;20844:1;20837:8;;;20575:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:::-;4720:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:119;;;4775:79;;:::i;:::-;4737:119;4895:1;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4866:117;4661:329;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:116::-;6044:21;6059:5;6044:21;:::i;:::-;6037:5;6034:32;6024:60;;6080:1;6077;6070:12;6024:60;5974:116;:::o;6096:133::-;6139:5;6177:6;6164:20;6155:29;;6193:30;6217:5;6193:30;:::i;:::-;6096:133;;;;:::o;6235:323::-;6291:6;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:50;6533:7;6524:6;6513:9;6509:22;6491:50;:::i;:::-;6481:60;;6437:114;6235:323;;;;:::o;6564:619::-;6641:6;6649;6657;6706:2;6694:9;6685:7;6681:23;6677:32;6674:119;;;6712:79;;:::i;:::-;6674:119;6832:1;6857:53;6902:7;6893:6;6882:9;6878:22;6857:53;:::i;:::-;6847:63;;6803:117;6959:2;6985:53;7030:7;7021:6;7010:9;7006:22;6985:53;:::i;:::-;6975:63;;6930:118;7087:2;7113:53;7158:7;7149:6;7138:9;7134:22;7113:53;:::i;:::-;7103:63;;7058:118;6564:619;;;;;:::o;7189:86::-;7224:7;7264:4;7257:5;7253:16;7242:27;;7189:86;;;:::o;7281:112::-;7364:22;7380:5;7364:22;:::i;:::-;7359:3;7352:35;7281:112;;:::o;7399:214::-;7488:4;7526:2;7515:9;7511:18;7503:26;;7539:67;7603:1;7592:9;7588:17;7579:6;7539:67;:::i;:::-;7399:214;;;;:::o;7619:118::-;7706:24;7724:5;7706:24;:::i;:::-;7701:3;7694:37;7619:118;;:::o;7743:222::-;7836:4;7874:2;7863:9;7859:18;7851:26;;7887:71;7955:1;7944:9;7940:17;7931:6;7887:71;:::i;:::-;7743:222;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:117::-;8554:1;8551;8544:12;8568:180;8616:77;8613:1;8606:88;8713:4;8710:1;8703:15;8737:4;8734:1;8727:15;8754:281;8837:27;8859:4;8837:27;:::i;:::-;8829:6;8825:40;8967:6;8955:10;8952:22;8931:18;8919:10;8916:34;8913:62;8910:88;;;8978:18;;:::i;:::-;8910:88;9018:10;9014:2;9007:22;8797:238;8754:281;;:::o;9041:129::-;9075:6;9102:20;;:::i;:::-;9092:30;;9131:33;9159:4;9151:6;9131:33;:::i;:::-;9041:129;;;:::o;9176:311::-;9253:4;9343:18;9335:6;9332:30;9329:56;;;9365:18;;:::i;:::-;9329:56;9415:4;9407:6;9403:17;9395:25;;9475:4;9469;9465:15;9457:23;;9176:311;;;:::o;9493:117::-;9602:1;9599;9592:12;9633:710;9729:5;9754:81;9770:64;9827:6;9770:64;:::i;:::-;9754:81;:::i;:::-;9745:90;;9855:5;9884:6;9877:5;9870:21;9918:4;9911:5;9907:16;9900:23;;9971:4;9963:6;9959:17;9951:6;9947:30;10000:3;9992:6;9989:15;9986:122;;;10019:79;;:::i;:::-;9986:122;10134:6;10117:220;10151:6;10146:3;10143:15;10117:220;;;10226:3;10255:37;10288:3;10276:10;10255:37;:::i;:::-;10250:3;10243:50;10322:4;10317:3;10313:14;10306:21;;10193:144;10177:4;10172:3;10168:14;10161:21;;10117:220;;;10121:21;9735:608;;9633:710;;;;;:::o;10366:370::-;10437:5;10486:3;10479:4;10471:6;10467:17;10463:27;10453:122;;10494:79;;:::i;:::-;10453:122;10611:6;10598:20;10636:94;10726:3;10718:6;10711:4;10703:6;10699:17;10636:94;:::i;:::-;10627:103;;10443:293;10366:370;;;;:::o;10742:678::-;10832:6;10840;10889:2;10877:9;10868:7;10864:23;10860:32;10857:119;;;10895:79;;:::i;:::-;10857:119;11043:1;11032:9;11028:17;11015:31;11073:18;11065:6;11062:30;11059:117;;;11095:79;;:::i;:::-;11059:117;11200:78;11270:7;11261:6;11250:9;11246:22;11200:78;:::i;:::-;11190:88;;10986:302;11327:2;11353:50;11395:7;11386:6;11375:9;11371:22;11353:50;:::i;:::-;11343:60;;11298:115;10742:678;;;;;:::o;11426:474::-;11494:6;11502;11551:2;11539:9;11530:7;11526:23;11522:32;11519:119;;;11557:79;;:::i;:::-;11519:119;11677:1;11702:53;11747:7;11738:6;11727:9;11723:22;11702:53;:::i;:::-;11692:63;;11648:117;11804:2;11830:53;11875:7;11866:6;11855:9;11851:22;11830:53;:::i;:::-;11820:63;;11775:118;11426:474;;;;;:::o;11906:182::-;12046:34;12042:1;12034:6;12030:14;12023:58;11906:182;:::o;12094:366::-;12236:3;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12333:93;12422:3;12333:93;:::i;:::-;12451:2;12446:3;12442:12;12435:19;;12094:366;;;:::o;12466:419::-;12632:4;12670:2;12659:9;12655:18;12647:26;;12719:9;12713:4;12709:20;12705:1;12694:9;12690:17;12683:47;12747:131;12873:4;12747:131;:::i;:::-;12739:139;;12466:419;;;:::o;12891:180::-;12939:77;12936:1;12929:88;13036:4;13033:1;13026:15;13060:4;13057:1;13050:15;13077:305;13117:3;13136:20;13154:1;13136:20;:::i;:::-;13131:25;;13170:20;13188:1;13170:20;:::i;:::-;13165:25;;13324:1;13256:66;13252:74;13249:1;13246:81;13243:107;;;13330:18;;:::i;:::-;13243:107;13374:1;13371;13367:9;13360:16;;13077:305;;;;:::o;13388:179::-;13528:31;13524:1;13516:6;13512:14;13505:55;13388:179;:::o;13573:366::-;13715:3;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13812:93;13901:3;13812:93;:::i;:::-;13930:2;13925:3;13921:12;13914:19;;13573:366;;;:::o;13945:419::-;14111:4;14149:2;14138:9;14134:18;14126:26;;14198:9;14192:4;14188:20;14184:1;14173:9;14169:17;14162:47;14226:131;14352:4;14226:131;:::i;:::-;14218:139;;13945:419;;;:::o;14370:180::-;14418:77;14415:1;14408:88;14515:4;14512:1;14505:15;14539:4;14536:1;14529:15;14556:320;14600:6;14637:1;14631:4;14627:12;14617:22;;14684:1;14678:4;14674:12;14705:18;14695:81;;14761:4;14753:6;14749:17;14739:27;;14695:81;14823:2;14815:6;14812:14;14792:18;14789:38;14786:84;;;14842:18;;:::i;:::-;14786:84;14607:269;14556:320;;;:::o;14882:348::-;14922:7;14945:20;14963:1;14945:20;:::i;:::-;14940:25;;14979:20;14997:1;14979:20;:::i;:::-;14974:25;;15167:1;15099:66;15095:74;15092:1;15089:81;15084:1;15077:9;15070:17;15066:105;15063:131;;;15174:18;;:::i;:::-;15063:131;15222:1;15219;15215:9;15204:20;;14882:348;;;;:::o;15236:180::-;15284:77;15281:1;15274:88;15381:4;15378:1;15371:15;15405:4;15402:1;15395:15;15422:185;15462:1;15479:20;15497:1;15479:20;:::i;:::-;15474:25;;15513:20;15531:1;15513:20;:::i;:::-;15508:25;;15552:1;15542:35;;15557:18;;:::i;:::-;15542:35;15599:1;15596;15592:9;15587:14;;15422:185;;;;:::o;15613:234::-;15753:34;15749:1;15741:6;15737:14;15730:58;15822:17;15817:2;15809:6;15805:15;15798:42;15613:234;:::o;15853:366::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15853:366;;;:::o;16225:419::-;16391:4;16429:2;16418:9;16414:18;16406:26;;16478:9;16472:4;16468:20;16464:1;16453:9;16449:17;16442:47;16506:131;16632:4;16506:131;:::i;:::-;16498:139;;16225:419;;;:::o;16650:220::-;16790:34;16786:1;16778:6;16774:14;16767:58;16859:3;16854:2;16846:6;16842:15;16835:28;16650:220;:::o;16876:366::-;17018:3;17039:67;17103:2;17098:3;17039:67;:::i;:::-;17032:74;;17115:93;17204:3;17115:93;:::i;:::-;17233:2;17228:3;17224:12;17217:19;;16876:366;;;:::o;17248:419::-;17414:4;17452:2;17441:9;17437:18;17429:26;;17501:9;17495:4;17491:20;17487:1;17476:9;17472:17;17465:47;17529:131;17655:4;17529:131;:::i;:::-;17521:139;;17248:419;;;:::o;17673:143::-;17730:5;17761:6;17755:13;17746:22;;17777:33;17804:5;17777:33;:::i;:::-;17673:143;;;;:::o;17822:351::-;17892:6;17941:2;17929:9;17920:7;17916:23;17912:32;17909:119;;;17947:79;;:::i;:::-;17909:119;18067:1;18092:64;18148:7;18139:6;18128:9;18124:22;18092:64;:::i;:::-;18082:74;;18038:128;17822:351;;;;:::o;18179:180::-;18227:77;18224:1;18217:88;18324:4;18321:1;18314:15;18348:4;18345:1;18338:15;18365:85;18410:7;18439:5;18428:16;;18365:85;;;:::o;18456:158::-;18514:9;18547:61;18565:42;18574:32;18600:5;18574:32;:::i;:::-;18565:42;:::i;:::-;18547:61;:::i;:::-;18534:74;;18456:158;;;:::o;18620:147::-;18715:45;18754:5;18715:45;:::i;:::-;18710:3;18703:58;18620:147;;:::o;18773:114::-;18840:6;18874:5;18868:12;18858:22;;18773:114;;;:::o;18893:184::-;18992:11;19026:6;19021:3;19014:19;19066:4;19061:3;19057:14;19042:29;;18893:184;;;;:::o;19083:132::-;19150:4;19173:3;19165:11;;19203:4;19198:3;19194:14;19186:22;;19083:132;;;:::o;19221:108::-;19298:24;19316:5;19298:24;:::i;:::-;19293:3;19286:37;19221:108;;:::o;19335:179::-;19404:10;19425:46;19467:3;19459:6;19425:46;:::i;:::-;19503:4;19498:3;19494:14;19480:28;;19335:179;;;;:::o;19520:113::-;19590:4;19622;19617:3;19613:14;19605:22;;19520:113;;;:::o;19669:732::-;19788:3;19817:54;19865:5;19817:54;:::i;:::-;19887:86;19966:6;19961:3;19887:86;:::i;:::-;19880:93;;19997:56;20047:5;19997:56;:::i;:::-;20076:7;20107:1;20092:284;20117:6;20114:1;20111:13;20092:284;;;20193:6;20187:13;20220:63;20279:3;20264:13;20220:63;:::i;:::-;20213:70;;20306:60;20359:6;20306:60;:::i;:::-;20296:70;;20152:224;20139:1;20136;20132:9;20127:14;;20092:284;;;20096:14;20392:3;20385:10;;19793:608;;;19669:732;;;;:::o;20407:720::-;20642:4;20680:3;20669:9;20665:19;20657:27;;20694:79;20770:1;20759:9;20755:17;20746:6;20694:79;:::i;:::-;20820:9;20814:4;20810:20;20805:2;20794:9;20790:18;20783:48;20848:108;20951:4;20942:6;20848:108;:::i;:::-;20840:116;;20966:72;21034:2;21023:9;21019:18;21010:6;20966:72;:::i;:::-;21048;21116:2;21105:9;21101:18;21092:6;21048:72;:::i;:::-;20407:720;;;;;;;:::o;21133:147::-;21234:11;21271:3;21256:18;;21133:147;;;;:::o;21286:114::-;;:::o;21406:398::-;21565:3;21586:83;21667:1;21662:3;21586:83;:::i;:::-;21579:90;;21678:93;21767:3;21678:93;:::i;:::-;21796:1;21791:3;21787:11;21780:18;;21406:398;;;:::o;21810:379::-;21994:3;22016:147;22159:3;22016:147;:::i;:::-;22009:154;;22180:3;22173:10;;21810:379;;;:::o;22195:168::-;22335:20;22331:1;22323:6;22319:14;22312:44;22195:168;:::o;22369:366::-;22511:3;22532:67;22596:2;22591:3;22532:67;:::i;:::-;22525:74;;22608:93;22697:3;22608:93;:::i;:::-;22726:2;22721:3;22717:12;22710:19;;22369:366;;;:::o;22741:419::-;22907:4;22945:2;22934:9;22930:18;22922:26;;22994:9;22988:4;22984:20;22980:1;22969:9;22965:17;22958:47;23022:131;23148:4;23022:131;:::i;:::-;23014:139;;22741:419;;;:::o;23166:289::-;23306:34;23302:1;23294:6;23290:14;23283:58;23375:34;23370:2;23362:6;23358:15;23351:59;23444:3;23439:2;23431:6;23427:15;23420:28;23166:289;:::o;23461:366::-;23603:3;23624:67;23688:2;23683:3;23624:67;:::i;:::-;23617:74;;23700:93;23789:3;23700:93;:::i;:::-;23818:2;23813:3;23809:12;23802:19;;23461:366;;;:::o;23833:419::-;23999:4;24037:2;24026:9;24022:18;24014:26;;24086:9;24080:4;24076:20;24072:1;24061:9;24057:17;24050:47;24114:131;24240:4;24114:131;:::i;:::-;24106:139;;23833:419;;;:::o;24258:221::-;24398:34;24394:1;24386:6;24382:14;24375:58;24467:4;24462:2;24454:6;24450:15;24443:29;24258:221;:::o;24485:366::-;24627:3;24648:67;24712:2;24707:3;24648:67;:::i;:::-;24641:74;;24724:93;24813:3;24724:93;:::i;:::-;24842:2;24837:3;24833:12;24826:19;;24485:366;;;:::o;24857:419::-;25023:4;25061:2;25050:9;25046:18;25038:26;;25110:9;25104:4;25100:20;25096:1;25085:9;25081:17;25074:47;25138:131;25264:4;25138:131;:::i;:::-;25130:139;;24857:419;;;:::o;25282:236::-;25422:34;25418:1;25410:6;25406:14;25399:58;25491:19;25486:2;25478:6;25474:15;25467:44;25282:236;:::o;25524:366::-;25666:3;25687:67;25751:2;25746:3;25687:67;:::i;:::-;25680:74;;25763:93;25852:3;25763:93;:::i;:::-;25881:2;25876:3;25872:12;25865:19;;25524:366;;;:::o;25896:419::-;26062:4;26100:2;26089:9;26085:18;26077:26;;26149:9;26143:4;26139:20;26135:1;26124:9;26120:17;26113:47;26177:131;26303:4;26177:131;:::i;:::-;26169:139;;25896:419;;;:::o;26321:233::-;26360:3;26383:24;26401:5;26383:24;:::i;:::-;26374:33;;26429:66;26422:5;26419:77;26416:103;;;26499:18;;:::i;:::-;26416:103;26546:1;26539:5;26535:13;26528:20;;26321:233;;;:::o;26560:179::-;26700:31;26696:1;26688:6;26684:14;26677:55;26560:179;:::o;26745:366::-;26887:3;26908:67;26972:2;26967:3;26908:67;:::i;:::-;26901:74;;26984:93;27073:3;26984:93;:::i;:::-;27102:2;27097:3;27093:12;27086:19;;26745:366;;;:::o;27117:419::-;27283:4;27321:2;27310:9;27306:18;27298:26;;27370:9;27364:4;27360:20;27356:1;27345:9;27341:17;27334:47;27398:131;27524:4;27398:131;:::i;:::-;27390:139;;27117:419;;;:::o;27542:225::-;27682:34;27678:1;27670:6;27666:14;27659:58;27751:8;27746:2;27738:6;27734:15;27727:33;27542:225;:::o;27773:366::-;27915:3;27936:67;28000:2;27995:3;27936:67;:::i;:::-;27929:74;;28012:93;28101:3;28012:93;:::i;:::-;28130:2;28125:3;28121:12;28114:19;;27773:366;;;:::o;28145:419::-;28311:4;28349:2;28338:9;28334:18;28326:26;;28398:9;28392:4;28388:20;28384:1;28373:9;28369:17;28362:47;28426:131;28552:4;28426:131;:::i;:::-;28418:139;;28145:419;;;:::o;28570:177::-;28710:29;28706:1;28698:6;28694:14;28687:53;28570:177;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:223::-;29690:34;29686:1;29678:6;29674:14;29667:58;29759:6;29754:2;29746:6;29742:15;29735:31;29550:223;:::o;29779:366::-;29921:3;29942:67;30006:2;30001:3;29942:67;:::i;:::-;29935:74;;30018:93;30107:3;30018:93;:::i;:::-;30136:2;30131:3;30127:12;30120:19;;29779:366;;;:::o;30151:419::-;30317:4;30355:2;30344:9;30340:18;30332:26;;30404:9;30398:4;30394:20;30390:1;30379:9;30375:17;30368:47;30432:131;30558:4;30432:131;:::i;:::-;30424:139;;30151:419;;;:::o;30576:221::-;30716:34;30712:1;30704:6;30700:14;30693:58;30785:4;30780:2;30772:6;30768:15;30761:29;30576:221;:::o;30803:366::-;30945:3;30966:67;31030:2;31025:3;30966:67;:::i;:::-;30959:74;;31042:93;31131:3;31042:93;:::i;:::-;31160:2;31155:3;31151:12;31144:19;;30803:366;;;:::o;31175:419::-;31341:4;31379:2;31368:9;31364:18;31356:26;;31428:9;31422:4;31418:20;31414:1;31403:9;31399:17;31392:47;31456:131;31582:4;31456:131;:::i;:::-;31448:139;;31175:419;;;:::o;31600:224::-;31740:34;31736:1;31728:6;31724:14;31717:58;31809:7;31804:2;31796:6;31792:15;31785:32;31600:224;:::o;31830:366::-;31972:3;31993:67;32057:2;32052:3;31993:67;:::i;:::-;31986:74;;32069:93;32158:3;32069:93;:::i;:::-;32187:2;32182:3;32178:12;32171:19;;31830:366;;;:::o;32202:419::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:222::-;32767:34;32763:1;32755:6;32751:14;32744:58;32836:5;32831:2;32823:6;32819:15;32812:30;32627:222;:::o;32855:366::-;32997:3;33018:67;33082:2;33077:3;33018:67;:::i;:::-;33011:74;;33094:93;33183:3;33094:93;:::i;:::-;33212:2;33207:3;33203:12;33196:19;;32855:366;;;:::o;33227:419::-;33393:4;33431:2;33420:9;33416:18;33408:26;;33480:9;33474:4;33470:20;33466:1;33455:9;33451:17;33444:47;33508:131;33634:4;33508:131;:::i;:::-;33500:139;;33227:419;;;:::o;33652:162::-;33792:14;33788:1;33780:6;33776:14;33769:38;33652:162;:::o;33820:366::-;33962:3;33983:67;34047:2;34042:3;33983:67;:::i;:::-;33976:74;;34059:93;34148:3;34059:93;:::i;:::-;34177:2;34172:3;34168:12;34161:19;;33820:366;;;:::o;34192:419::-;34358:4;34396:2;34385:9;34381:18;34373:26;;34445:9;34439:4;34435:20;34431:1;34420:9;34416:17;34409:47;34473:131;34599:4;34473:131;:::i;:::-;34465:139;;34192:419;;;:::o;34617:176::-;34757:28;34753:1;34745:6;34741:14;34734:52;34617:176;:::o;34799:366::-;34941:3;34962:67;35026:2;35021:3;34962:67;:::i;:::-;34955:74;;35038:93;35127:3;35038:93;:::i;:::-;35156:2;35151:3;35147:12;35140:19;;34799:366;;;:::o;35171:419::-;35337:4;35375:2;35364:9;35360:18;35352:26;;35424:9;35418:4;35414:20;35410:1;35399:9;35395:17;35388:47;35452:131;35578:4;35452:131;:::i;:::-;35444:139;;35171:419;;;:::o;35596:297::-;35736:34;35732:1;35724:6;35720:14;35713:58;35805:34;35800:2;35792:6;35788:15;35781:59;35874:11;35869:2;35861:6;35857:15;35850:36;35596:297;:::o;35899:366::-;36041:3;36062:67;36126:2;36121:3;36062:67;:::i;:::-;36055:74;;36138:93;36227:3;36138:93;:::i;:::-;36256:2;36251:3;36247:12;36240:19;;35899:366;;;:::o;36271:419::-;36437:4;36475:2;36464:9;36460:18;36452:26;;36524:9;36518:4;36514:20;36510:1;36499:9;36495:17;36488:47;36552:131;36678:4;36552:131;:::i;:::-;36544:139;;36271:419;;;:::o;36696:240::-;36836:34;36832:1;36824:6;36820:14;36813:58;36905:23;36900:2;36892:6;36888:15;36881:48;36696:240;:::o;36942:366::-;37084:3;37105:67;37169:2;37164:3;37105:67;:::i;:::-;37098:74;;37181:93;37270:3;37181:93;:::i;:::-;37299:2;37294:3;37290:12;37283:19;;36942:366;;;:::o;37314:419::-;37480:4;37518:2;37507:9;37503:18;37495:26;;37567:9;37561:4;37557:20;37553:1;37542:9;37538:17;37531:47;37595:131;37721:4;37595:131;:::i;:::-;37587:139;;37314:419;;;:::o;37739:177::-;37879:29;37875:1;37867:6;37863:14;37856:53;37739:177;:::o;37922:366::-;38064:3;38085:67;38149:2;38144:3;38085:67;:::i;:::-;38078:74;;38161:93;38250:3;38161:93;:::i;:::-;38279:2;38274:3;38270:12;38263:19;;37922:366;;;:::o;38294:419::-;38460:4;38498:2;38487:9;38483:18;38475:26;;38547:9;38541:4;38537:20;38533:1;38522:9;38518:17;38511:47;38575:131;38701:4;38575:131;:::i;:::-;38567:139;;38294:419;;;:::o;38719:241::-;38859:34;38855:1;38847:6;38843:14;38836:58;38928:24;38923:2;38915:6;38911:15;38904:49;38719:241;:::o;38966:366::-;39108:3;39129:67;39193:2;39188:3;39129:67;:::i;:::-;39122:74;;39205:93;39294:3;39205:93;:::i;:::-;39323:2;39318:3;39314:12;39307:19;;38966:366;;;:::o;39338:419::-;39504:4;39542:2;39531:9;39527:18;39519:26;;39591:9;39585:4;39581:20;39577:1;39566:9;39562:17;39555:47;39619:131;39745:4;39619:131;:::i;:::-;39611:139;;39338:419;;;:::o;39763:191::-;39803:4;39823:20;39841:1;39823:20;:::i;:::-;39818:25;;39857:20;39875:1;39857:20;:::i;:::-;39852:25;;39896:1;39893;39890:8;39887:34;;;39901:18;;:::i;:::-;39887:34;39946:1;39943;39939:9;39931:17;;39763:191;;;;:::o;39960:442::-;40109:4;40147:2;40136:9;40132:18;40124:26;;40160:71;40228:1;40217:9;40213:17;40204:6;40160:71;:::i;:::-;40241:72;40309:2;40298:9;40294:18;40285:6;40241:72;:::i;:::-;40323;40391:2;40380:9;40376:18;40367:6;40323:72;:::i;:::-;39960:442;;;;;;:::o;40408:220::-;40548:34;40544:1;40536:6;40532:14;40525:58;40617:3;40612:2;40604:6;40600:15;40593:28;40408:220;:::o;40634:366::-;40776:3;40797:67;40861:2;40856:3;40797:67;:::i;:::-;40790:74;;40873:93;40962:3;40873:93;:::i;:::-;40991:2;40986:3;40982:12;40975:19;;40634:366;;;:::o;41006:419::-;41172:4;41210:2;41199:9;41195:18;41187:26;;41259:9;41253:4;41249:20;41245:1;41234:9;41230:17;41223:47;41287:131;41413:4;41287:131;:::i;:::-;41279:139;;41006:419;;;:::o;41431:831::-;41694:4;41732:3;41721:9;41717:19;41709:27;;41746:71;41814:1;41803:9;41799:17;41790:6;41746:71;:::i;:::-;41827:80;41903:2;41892:9;41888:18;41879:6;41827:80;:::i;:::-;41954:9;41948:4;41944:20;41939:2;41928:9;41924:18;41917:48;41982:108;42085:4;42076:6;41982:108;:::i;:::-;41974:116;;42100:72;42168:2;42157:9;42153:18;42144:6;42100:72;:::i;:::-;42182:73;42250:3;42239:9;42235:19;42226:6;42182:73;:::i;:::-;41431:831;;;;;;;;:::o;42268:807::-;42517:4;42555:3;42544:9;42540:19;42532:27;;42569:71;42637:1;42626:9;42622:17;42613:6;42569:71;:::i;:::-;42650:72;42718:2;42707:9;42703:18;42694:6;42650:72;:::i;:::-;42732:80;42808:2;42797:9;42793:18;42784:6;42732:80;:::i;:::-;42822;42898:2;42887:9;42883:18;42874:6;42822:80;:::i;:::-;42912:73;42980:3;42969:9;42965:19;42956:6;42912:73;:::i;:::-;42995;43063:3;43052:9;43048:19;43039:6;42995:73;:::i;:::-;42268:807;;;;;;;;;:::o;43081:143::-;43138:5;43169:6;43163:13;43154:22;;43185:33;43212:5;43185:33;:::i;:::-;43081:143;;;;:::o;43230:663::-;43318:6;43326;43334;43383:2;43371:9;43362:7;43358:23;43354:32;43351:119;;;43389:79;;:::i;:::-;43351:119;43509:1;43534:64;43590:7;43581:6;43570:9;43566:22;43534:64;:::i;:::-;43524:74;;43480:128;43647:2;43673:64;43729:7;43720:6;43709:9;43705:22;43673:64;:::i;:::-;43663:74;;43618:129;43786:2;43812:64;43868:7;43859:6;43848:9;43844:22;43812:64;:::i;:::-;43802:74;;43757:129;43230:663;;;;;:::o

Swarm Source

ipfs://26cb26ed96f6d55ceef1eb17669c1f3453d349449a85043f2384abd336e5d7aa
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.