ETH Price: $2,244.08 (+3.67%)

Token

Clifford Fork (CLIFFORK)
 

Overview

Max Total Supply

1,000,000,000,000 CLIFFORK

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,548,826,030.304353230861939935 CLIFFORK

Value
$0.00
0x5a282c07552201b9eec93f49c8c269b2752d2ee2
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:
CliffordFork

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 2021-12-19
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-15
*/

// 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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

}



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 CliffordFork is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 50; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 100 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 1 minutes;
    uint256 public lastManualLpBurnTime;

    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 buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP();
    
    event ManualNukeLP();

    constructor() ERC20("Clifford Fork", "CLIFFORK") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 10;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 14;
        uint256 _sellDevFee = 1;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxTransactionAmount = totalSupply * 50 / 1000; // 0.1% maxTransactionAmountTxn
        maxWallet = totalSupply * 50 / 1000; // .5% maxWallet
        swapTokensAtAmount = totalSupply * 500 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // 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, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            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
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal returns (bool){
        
        lastLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"tokensIntoLiquidity","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":"devWalletUpdated","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"},{"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"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"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526032600b556001600c60006101000a81548160ff0219169083151502179055506064600d55603c600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a757600080fd5b506040518060400160405280600d81526020017f436c6966666f726420466f726b000000000000000000000000000000000000008152506040518060400160405280600881526020017f434c4946464f524b00000000000000000000000000000000000000000000000081525081600390805190602001906200012c92919062000bee565b5080600490805190602001906200014592919062000bee565b50505060006200015a620006ba60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000225816001620006c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033e57600080fd5b505afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000d08565b6040518363ffffffff1660e01b81526004016200039892919062000d4b565b602060405180830381600087803b158015620003b357600080fd5b505af1158015620003c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ee919062000d08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043660a0516001620006c260201b60201c565b6200044b60a0516001620007bf60201b60201c565b6000600490506000600a90506000600190506000600590506000600e905060006001905060006c0c9f2c9cd04674edea4000000090506103e860328262000493919062000db1565b6200049f919062000e41565b6008819055506103e8603282620004b7919062000db1565b620004c3919062000e41565b600a819055506127106101f482620004dc919062000db1565b620004e8919062000e41565b60098190555086601581905550856016819055508460178190555060175460165460155462000518919062000e79565b62000524919062000e79565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000554919062000e79565b62000560919062000e79565b601881905550620005766200086060201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c66200086060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006286200061a6200086060201b60201c565b60016200088a60201b60201c565b6200063b3060016200088a60201b60201c565b6200065061dead60016200088a60201b60201c565b62000672620006646200086060201b60201c565b6001620006c260201b60201c565b62000685306001620006c260201b60201c565b6200069a61dead6001620006c260201b60201c565b620006ac3382620009d760201b60201c565b50505050505050506200110a565b600033905090565b620006d2620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075b9062000f37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200089a620006ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009239062000f37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009cb919062000f76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a419062000fe3565b60405180910390fd5b62000a5e6000838362000b8660201b60201c565b62000a7a8160025462000b8b60201b620028961790919060201c565b60028190555062000ad8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8b60201b620028961790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7a919062001016565b60405180910390a35050565b505050565b600080828462000b9c919062000e79565b90508381101562000be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdb9062001083565b60405180910390fd5b8091505092915050565b82805462000bfc90620010d4565b90600052602060002090601f01602090048101928262000c20576000855562000c6c565b82601f1062000c3b57805160ff191683800117855562000c6c565b8280016001018555821562000c6c579182015b8281111562000c6b57825182559160200191906001019062000c4e565b5b50905062000c7b919062000c7f565b5090565b5b8082111562000c9a57600081600090555060010162000c80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b60006020828403121562000d215762000d2062000c9e565b5b600062000d318482850162000cf1565b91505092915050565b62000d458162000cc3565b82525050565b600060408201905062000d62600083018562000d3a565b62000d71602083018462000d3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dbe8262000d78565b915062000dcb8362000d78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e075762000e0662000d82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e4e8262000d78565b915062000e5b8362000d78565b92508262000e6e5762000e6d62000e12565b5b828204905092915050565b600062000e868262000d78565b915062000e938362000d78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecb5762000eca62000d82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f1f60208362000ed6565b915062000f2c8262000ee7565b602082019050919050565b6000602082019050818103600083015262000f528162000f10565b9050919050565b60008115159050919050565b62000f708162000f59565b82525050565b600060208201905062000f8d600083018462000f65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fcb601f8362000ed6565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b620010108162000d78565b82525050565b60006020820190506200102d600083018462001005565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200106b601b8362000ed6565b9150620010788262001033565b602082019050919050565b600060208201905081810360008301526200109e816200105c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ed57607f821691505b60208210811415620011045762001103620010a5565b5b50919050565b60805160a051615c7b62001192600039600081816113b501528181611bf9015281816126ea015281816127b0015281816127dd01528181612e7f01528181613fce0152818161409601526140c3015260008181610f3a01528181612e27015281816142cb015281816143bb015281816143e20152818161447e01526144a50152615c7b6000f3fe60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dab578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063d85ba06314610ced578063dd62ed3e14610d18578063e2f4560514610d55578063e884f26014610d80576103a2565b8063c18bc195116100dc578063c18bc19514610c31578063c876d0b914610c5a578063c8c8ebe414610c85578063d257b34f14610cb0576103a2565b8063bbc0c74214610bb4578063c024666814610bdf578063c17b5b8c14610c08576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ae6578063a9059cbb14610b11578063aacebbe314610b4e578063b62496f514610b77576103a2565b80639ec22c0e14610a285780639fccce3214610a53578063a0d82dc514610a7e578063a457c2d714610aa9576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639a7a23d6146109d45780639c3b4fdc146109fd576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638095d564146108bf5780638a8c523c146108e8576103a2565b806370a08231146107af578063730c1888146107ec578063751039fc146108155780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780636a486a8e146107595780636ddd171314610784576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063199ffc72146104f65780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906145fc565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906146b7565b610efb565b6040516104069190614712565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061472d565b610f19565b6040516104439190614712565b60405180910390f35b34801561045857600080fd5b50610461610f38565b60405161046e91906147b9565b60405180910390f35b34801561048357600080fd5b5061048c610f5c565b60405161049991906147e3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c4919061472d565b610f66565b005b3480156104d757600080fd5b506104e06110bd565b6040516104ed91906147e3565b60405180910390f35b34801561050257600080fd5b5061050b6110c3565b60405161051891906147e3565b60405180910390f35b34801561052d57600080fd5b506105366110c9565b60405161054391906147e3565b60405180910390f35b34801561055857600080fd5b506105616110cf565b60405161056e91906147e3565b60405180910390f35b34801561058357600080fd5b5061059e600480360381019061059991906147fe565b6110d5565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061482b565b6111ff565b6040516105d49190614712565b60405180910390f35b3480156105e957600080fd5b506105f26112d8565b6040516105ff919061488d565b60405180910390f35b34801561061457600080fd5b5061061d6112de565b60405161062a91906147e3565b60405180910390f35b34801561063f57600080fd5b506106486112e4565b6040516106559190614712565b60405180910390f35b34801561066a57600080fd5b506106736112f7565b60405161068091906148c4565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906146b7565b611300565b6040516106bd9190614712565b60405180910390f35b3480156106d257600080fd5b506106db6113b3565b6040516106e8919061488d565b60405180910390f35b3480156106fd57600080fd5b506107066113d7565b6040516107139190614712565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061472d565b6113ea565b6040516107509190614712565b60405180910390f35b34801561076557600080fd5b5061076e611440565b60405161077b91906147e3565b60405180910390f35b34801561079057600080fd5b50610799611446565b6040516107a69190614712565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061472d565b611459565b6040516107e391906147e3565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061490b565b6114a1565b005b34801561082157600080fd5b5061082a6115fc565b6040516108379190614712565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061495e565b6116b7565b005b34801561087557600080fd5b5061087e6117a9565b60405161088b919061488d565b60405180910390f35b3480156108a057600080fd5b506108a96117cf565b6040516108b691906147e3565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e1919061499e565b6117d5565b005b3480156108f457600080fd5b506108fd6118ee565b005b34801561090b57600080fd5b506109146119c4565b604051610921919061488d565b60405180910390f35b34801561093657600080fd5b5061093f6119ee565b60405161094c919061488d565b60405180910390f35b34801561096157600080fd5b5061096a611a14565b60405161097791906147e3565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906149f1565b611a1a565b005b3480156109b557600080fd5b506109be611ace565b6040516109cb91906145fc565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f6919061495e565b611b60565b005b348015610a0957600080fd5b50610a12611c94565b604051610a1f91906147e3565b60405180910390f35b348015610a3457600080fd5b50610a3d611c9a565b604051610a4a91906147e3565b60405180910390f35b348015610a5f57600080fd5b50610a68611ca0565b604051610a7591906147e3565b60405180910390f35b348015610a8a57600080fd5b50610a93611ca6565b604051610aa091906147e3565b60405180910390f35b348015610ab557600080fd5b50610ad06004803603810190610acb91906146b7565b611cac565b604051610add9190614712565b60405180910390f35b348015610af257600080fd5b50610afb611d79565b604051610b0891906147e3565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b3391906146b7565b611d7f565b604051610b459190614712565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b70919061472d565b611d9d565b005b348015610b8357600080fd5b50610b9e6004803603810190610b99919061472d565b611ef4565b604051610bab9190614712565b60405180910390f35b348015610bc057600080fd5b50610bc9611f14565b604051610bd69190614712565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c01919061495e565b611f27565b005b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061499e565b612067565b005b348015610c3d57600080fd5b50610c586004803603810190610c5391906147fe565b612181565b005b348015610c6657600080fd5b50610c6f6122ab565b604051610c7c9190614712565b60405180910390f35b348015610c9157600080fd5b50610c9a6122be565b604051610ca791906147e3565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd291906147fe565b6122c4565b604051610ce49190614712565b60405180910390f35b348015610cf957600080fd5b50610d02612434565b604051610d0f91906147e3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614a1e565b61243a565b604051610d4c91906147e3565b60405180910390f35b348015610d6157600080fd5b50610d6a6124c1565b604051610d7791906147e3565b60405180910390f35b348015610d8c57600080fd5b50610d956124c7565b604051610da29190614712565b60405180910390f35b348015610db757600080fd5b50610dc0612582565b604051610dcd91906147e3565b60405180910390f35b348015610de257600080fd5b50610deb612588565b604051610df891906147e3565b60405180910390f35b348015610e0d57600080fd5b50610e1661258e565b604051610e2391906147e3565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906147fe565b612594565b604051610e609190614712565b60405180910390f35b606060038054610e7890614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614a8d565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086128f4565b84846128fc565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f6e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614b0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b0b565b60405180910390fd5b670de0b6b3a76400006103e86001611182610f5c565b61118c9190614b5a565b6111969190614be3565b6111a09190614be3565b8110156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614c86565b60405180910390fd5b670de0b6b3a7640000816111f69190614b5a565b60088190555050565b600061120c848484612ac7565b6112cd846112186128f4565b6112c885604051806060016040528060288152602001615bf960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061127e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113a961130d6128f4565b846113a4856001600061131e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6128fc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a96128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614b0b565b60405180910390fd5b61025883101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614d18565b60405180910390fd5b6103e88211158015611590575060008210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614daa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116066128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614b0b565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116bf6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614b0b565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614b0b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118949190614dca565b61189e9190614dca565b6014819055506014805411156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614e6c565b60405180910390fd5b505050565b6118f66128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614b0b565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a226128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614b0b565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611add90614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614a8d565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050505050905090565b611b686128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614b0b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614efe565b60405180910390fd5b611c9082826138c3565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000611d6f611cb96128f4565b84611d6a85604051806060016040528060258152602001615c216025913960016000611ce36128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b6001905092915050565b600e5481565b6000611d93611d8c6128f4565b8484612ac7565b6001905092915050565b611da56128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614b0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614b0b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205b9190614712565b60405180910390a25050565b61206f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614b0b565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121269190614dca565b6121309190614dca565b6018819055506019601854111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614f6a565b60405180910390fd5b505050565b6121896128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614b0b565b60405180910390fd5b670de0b6b3a76400006103e8600561222e610f5c565b6122389190614b5a565b6122429190614be3565b61224c9190614be3565b81101561228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614ffc565b60405180910390fd5b670de0b6b3a7640000816122a29190614b5a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122ce6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b0b565b60405180910390fd5b620186a0600161236b610f5c565b6123759190614b5a565b61237f9190614be3565b8210156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061508e565b60405180910390fd5b6103e860056123ce610f5c565b6123d89190614b5a565b6123e29190614be3565b821115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90615120565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d16128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614b0b565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b601a5481565b600a5481565b600061259e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b0b565b60405180910390fd5b600f5460105461263d9190614dca565b421161267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061518c565b60405180910390fd5b6103e88211156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061521e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612725919061488d565b60206040518083038186803b15801561273d57600080fd5b505afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127759190615253565b905060006127a0612710612792868561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156127d9576127d87f000000000000000000000000000000000000000000000000000000000000000061dead83613a29565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284657600080fd5b505af115801561285a573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846128a59190614dca565b9050838110156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906152cc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639061535e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d3906153f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aba91906147e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615514565b60405180910390fd5b6000811415612bc157612bbc83836000613a29565b61385a565b601160009054906101000a900460ff161561328457612bde6119c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4c5750612c1c6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd85750600560149054906101000a900460ff16155b1561328357601160019054906101000a900460ff16612dd257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615580565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9a57612def6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ece57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f995743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b90615638565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e457600854811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906156ca565b60405180910390fd5b600a5461309383611459565b8261309e9190614dca565b11156130df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d690615736565b60405180910390fd5b613282565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d6576008548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157c8565b60405180910390fd5b613281565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328057600a5461323383611459565b8261323e9190614dca565b111561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327690615736565b60405180910390fd5b5b5b5b5b5b600061328f30611459565b9050600060095482101590508080156132b45750601160029054906101000a900460ff165b80156132cd5750600560149054906101000a900460ff16155b80156133235750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133795750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cf5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576001600560146101000a81548160ff0219169083151502179055506133f7613cbe565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134795750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134915750600c60009054906101000a900460ff165b80156134ac5750600d54600e546134a89190614dca565b4210155b80156135025750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135115761350f613fa5565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c75750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d157600090505b6000811561384a57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363457506000601854115b156137015761366160646136536018548861396490919063ffffffff16565b6139df90919063ffffffff16565b9050601854601a54826136749190614b5a565b61367e9190614be3565b601d600082825461368f9190614dca565b92505081905550601854601b54826136a79190614b5a565b6136b19190614be3565b601e60008282546136c29190614dca565b92505081905550601854601954826136da9190614b5a565b6136e49190614be3565b601c60008282546136f59190614dca565b92505081905550613826565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375c57506000601454115b1561382557613789606461377b6014548861396490919063ffffffff16565b6139df90919063ffffffff16565b90506014546016548261379c9190614b5a565b6137a69190614be3565b601d60008282546137b79190614dca565b92505081905550601454601754826137cf9190614b5a565b6137d99190614be3565b601e60008282546137ea9190614dca565b92505081905550601454601554826138029190614b5a565b61380c9190614be3565b601c600082825461381d9190614dca565b925050819055505b5b600081111561383b5761383a873083613a29565b5b808561384791906157e8565b94505b613855878787613a29565b505050505b505050565b60008383111582906138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e91906145fc565b60405180910390fd5b50600083856138b691906157e8565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083141561397757600090506139d9565b600082846139859190614b5a565b90508284826139949190614be3565b146139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb9061588e565b60405180910390fd5b809150505b92915050565b6000613a2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9090615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615514565b60405180910390fd5b613b148383836141dd565b613b7f81604051806060016040528060268152602001615bd3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c12816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cb191906147e3565b60405180910390a3505050565b6000613cc930611459565b90506000601e54601c54601d54613ce09190614dca565b613cea9190614dca565b9050600080831480613cfc5750600082145b15613d0957505050613fa3565b6014600954613d189190614b5a565b831115613d31576014600954613d2e9190614b5a565b92505b6000600283601d5486613d449190614b5a565b613d4e9190614be3565b613d589190614be3565b90506000613d6f82866141e290919063ffffffff16565b90506000479050613d7f8261422c565b6000613d9482476141e290919063ffffffff16565b90506000613dbf87613db1601c548561396490919063ffffffff16565b6139df90919063ffffffff16565b90506000613dea88613ddc601e548661396490919063ffffffff16565b6139df90919063ffffffff16565b90506000818385613dfb91906157e8565b613e0591906157e8565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e65906158df565b60006040518083038185875af1925050503d8060008114613ea2576040519150601f19603f3d011682016040523d82523d6000602084013e613ea7565b606091505b505080985050600087118015613ebd5750600081115b15613f0a57613ecc8782614478565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f01939291906158f4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f50906158df565b60006040518083038185875af1925050503d8060008114613f8d576040519150601f19603f3d011682016040523d82523d6000602084013e613f92565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401614009919061488d565b60206040518083038186803b15801561402157600080fd5b505afa158015614035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140599190615253565b90506000614086612710614078600b548561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156140bf576140be7f000000000000000000000000000000000000000000000000000000000000000061dead83613a29565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561412c57600080fd5b505af1158015614140573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b891906145fc565b60405180910390fd5b50600083856141d09190614be3565b9050809150509392505050565b505050565b600061422483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061385f565b905092915050565b6000600267ffffffffffffffff8111156142495761424861592b565b5b6040519080825280602002602001820160405280156142775781602001602082028036833780820191505090505b509050308160008151811061428f5761428e61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432f57600080fd5b505afa158015614343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614367919061599e565b8160018151811061437b5761437a61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143e0307f0000000000000000000000000000000000000000000000000000000000000000846128fc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614442959493929190615ac4565b600060405180830381600087803b15801561445c57600080fd5b505af1158015614470573d6000803e3d6000fd5b505050505050565b6144a3307f0000000000000000000000000000000000000000000000000000000000000000846128fc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161450a96959493929190615b1e565b6060604051808303818588803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061455c9190615b7f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459d578082015181840152602081019050614582565b838111156145ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006145ce82614563565b6145d8818561456e565b93506145e881856020860161457f565b6145f1816145b2565b840191505092915050565b6000602082019050818103600083015261461681846145c3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464e82614623565b9050919050565b61465e81614643565b811461466957600080fd5b50565b60008135905061467b81614655565b92915050565b6000819050919050565b61469481614681565b811461469f57600080fd5b50565b6000813590506146b18161468b565b92915050565b600080604083850312156146ce576146cd61461e565b5b60006146dc8582860161466c565b92505060206146ed858286016146a2565b9150509250929050565b60008115159050919050565b61470c816146f7565b82525050565b60006020820190506147276000830184614703565b92915050565b6000602082840312156147435761474261461e565b5b60006147518482850161466c565b91505092915050565b6000819050919050565b600061477f61477a61477584614623565b61475a565b614623565b9050919050565b600061479182614764565b9050919050565b60006147a382614786565b9050919050565b6147b381614798565b82525050565b60006020820190506147ce60008301846147aa565b92915050565b6147dd81614681565b82525050565b60006020820190506147f860008301846147d4565b92915050565b6000602082840312156148145761481361461e565b5b6000614822848285016146a2565b91505092915050565b6000806000606084860312156148445761484361461e565b5b60006148528682870161466c565b93505060206148638682870161466c565b9250506040614874868287016146a2565b9150509250925092565b61488781614643565b82525050565b60006020820190506148a2600083018461487e565b92915050565b600060ff82169050919050565b6148be816148a8565b82525050565b60006020820190506148d960008301846148b5565b92915050565b6148e8816146f7565b81146148f357600080fd5b50565b600081359050614905816148df565b92915050565b6000806000606084860312156149245761492361461e565b5b6000614932868287016146a2565b9350506020614943868287016146a2565b9250506040614954868287016148f6565b9150509250925092565b600080604083850312156149755761497461461e565b5b60006149838582860161466c565b9250506020614994858286016148f6565b9150509250929050565b6000806000606084860312156149b7576149b661461e565b5b60006149c5868287016146a2565b93505060206149d6868287016146a2565b92505060406149e7868287016146a2565b9150509250925092565b600060208284031215614a0757614a0661461e565b5b6000614a15848285016148f6565b91505092915050565b60008060408385031215614a3557614a3461461e565b5b6000614a438582860161466c565b9250506020614a548582860161466c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa557607f821691505b60208210811415614ab957614ab8614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af560208361456e565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b6582614681565b9150614b7083614681565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba957614ba8614b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bee82614681565b9150614bf983614681565b925082614c0957614c08614bb4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c70602f8361456e565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d0260338361456e565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d9460308361456e565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582614681565b9150614de083614681565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14614b2b565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e56601d8361456e565b9150614e6182614e20565b602082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee860398361456e565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f54601d8361456e565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe660248361456e565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061507860358361456e565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061510a60348361456e565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061517660208361456e565b915061518182615140565b602082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615208602a8361456e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b60008151905061524d8161468b565b92915050565b6000602082840312156152695761526861461e565b5b60006152778482850161523e565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152b6601b8361456e565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534860248361456e565b9150615353826152ec565b604082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153da60228361456e565b91506153e58261537e565b604082019050919050565b60006020820190508181036000830152615409816153cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061546c60258361456e565b915061547782615410565b604082019050919050565b6000602082019050818103600083015261549b8161545f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154fe60238361456e565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061556a60168361456e565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061562260498361456e565b915061562d826155a0565b606082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156b460358361456e565b91506156bf82615658565b604082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061572060138361456e565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157b260368361456e565b91506157bd82615756565b604082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b60006157f382614681565b91506157fe83614681565b92508282101561581157615810614b2b565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061587860218361456e565b91506158838261581c565b604082019050919050565b600060208201905081810360008301526158a78161586b565b9050919050565b600081905092915050565b50565b60006158c96000836158ae565b91506158d4826158b9565b600082019050919050565b60006158ea826158bc565b9150819050919050565b600060608201905061590960008301866147d4565b61591660208301856147d4565b61592360408301846147d4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061599881614655565b92915050565b6000602082840312156159b4576159b361461e565b5b60006159c284828501615989565b91505092915050565b6000819050919050565b60006159f06159eb6159e6846159cb565b61475a565b614681565b9050919050565b615a00816159d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a3b81614643565b82525050565b6000615a4d8383615a32565b60208301905092915050565b6000602082019050919050565b6000615a7182615a06565b615a7b8185615a11565b9350615a8683615a22565b8060005b83811015615ab7578151615a9e8882615a41565b9750615aa983615a59565b925050600181019050615a8a565b5085935050505092915050565b600060a082019050615ad960008301886147d4565b615ae660208301876159f7565b8181036040830152615af88186615a66565b9050615b07606083018561487e565b615b1460808301846147d4565b9695505050505050565b600060c082019050615b33600083018961487e565b615b4060208301886147d4565b615b4d60408301876159f7565b615b5a60608301866159f7565b615b67608083018561487e565b615b7460a08301846147d4565b979650505050505050565b600080600060608486031215615b9857615b9761461e565b5b6000615ba68682870161523e565b9350506020615bb78682870161523e565b9250506040615bc88682870161523e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c4799e73db895ab0d559f0eff890632cc45cc5c789263c340d399fa24947e2564736f6c63430008090033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610dab578063f637434214610dd6578063f8b45b0514610e01578063fe72b27a14610e2c576103a2565b8063d85ba06314610ced578063dd62ed3e14610d18578063e2f4560514610d55578063e884f26014610d80576103a2565b8063c18bc195116100dc578063c18bc19514610c31578063c876d0b914610c5a578063c8c8ebe414610c85578063d257b34f14610cb0576103a2565b8063bbc0c74214610bb4578063c024666814610bdf578063c17b5b8c14610c08576103a2565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ae6578063a9059cbb14610b11578063aacebbe314610b4e578063b62496f514610b77576103a2565b80639ec22c0e14610a285780639fccce3214610a53578063a0d82dc514610a7e578063a457c2d714610aa9576103a2565b8063924de9b7116101b6578063924de9b71461098057806395d89b41146109a95780639a7a23d6146109d45780639c3b4fdc146109fd576103a2565b80638da5cb5b146108ff5780638ea5220f1461092a5780639213691314610955576103a2565b8063313ce567116102c157806370a082311161025f57806375f0a8741161022e57806375f0a874146108695780637bce5a04146108945780638095d564146108bf5780638a8c523c146108e8576103a2565b806370a08231146107af578063730c1888146107ec578063751039fc146108155780637571336a14610840576103a2565b80634a62bb651161029b5780634a62bb65146106f15780634fbee1931461071c5780636a486a8e146107595780636ddd171314610784576103a2565b8063313ce5671461065e578063395093511461068957806349bd5a5e146106c6576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd5780632c3e486c146106085780632e82f1a014610633576103a2565b8063199ffc72146104f65780631a8145bb146105215780631f3fed8f1461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e69565b6040516103c991906145fc565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906146b7565b610efb565b6040516104069190614712565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061472d565b610f19565b6040516104439190614712565b60405180910390f35b34801561045857600080fd5b50610461610f38565b60405161046e91906147b9565b60405180910390f35b34801561048357600080fd5b5061048c610f5c565b60405161049991906147e3565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c4919061472d565b610f66565b005b3480156104d757600080fd5b506104e06110bd565b6040516104ed91906147e3565b60405180910390f35b34801561050257600080fd5b5061050b6110c3565b60405161051891906147e3565b60405180910390f35b34801561052d57600080fd5b506105366110c9565b60405161054391906147e3565b60405180910390f35b34801561055857600080fd5b506105616110cf565b60405161056e91906147e3565b60405180910390f35b34801561058357600080fd5b5061059e600480360381019061059991906147fe565b6110d5565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061482b565b6111ff565b6040516105d49190614712565b60405180910390f35b3480156105e957600080fd5b506105f26112d8565b6040516105ff919061488d565b60405180910390f35b34801561061457600080fd5b5061061d6112de565b60405161062a91906147e3565b60405180910390f35b34801561063f57600080fd5b506106486112e4565b6040516106559190614712565b60405180910390f35b34801561066a57600080fd5b506106736112f7565b60405161068091906148c4565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906146b7565b611300565b6040516106bd9190614712565b60405180910390f35b3480156106d257600080fd5b506106db6113b3565b6040516106e8919061488d565b60405180910390f35b3480156106fd57600080fd5b506107066113d7565b6040516107139190614712565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061472d565b6113ea565b6040516107509190614712565b60405180910390f35b34801561076557600080fd5b5061076e611440565b60405161077b91906147e3565b60405180910390f35b34801561079057600080fd5b50610799611446565b6040516107a69190614712565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061472d565b611459565b6040516107e391906147e3565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061490b565b6114a1565b005b34801561082157600080fd5b5061082a6115fc565b6040516108379190614712565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061495e565b6116b7565b005b34801561087557600080fd5b5061087e6117a9565b60405161088b919061488d565b60405180910390f35b3480156108a057600080fd5b506108a96117cf565b6040516108b691906147e3565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e1919061499e565b6117d5565b005b3480156108f457600080fd5b506108fd6118ee565b005b34801561090b57600080fd5b506109146119c4565b604051610921919061488d565b60405180910390f35b34801561093657600080fd5b5061093f6119ee565b60405161094c919061488d565b60405180910390f35b34801561096157600080fd5b5061096a611a14565b60405161097791906147e3565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906149f1565b611a1a565b005b3480156109b557600080fd5b506109be611ace565b6040516109cb91906145fc565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f6919061495e565b611b60565b005b348015610a0957600080fd5b50610a12611c94565b604051610a1f91906147e3565b60405180910390f35b348015610a3457600080fd5b50610a3d611c9a565b604051610a4a91906147e3565b60405180910390f35b348015610a5f57600080fd5b50610a68611ca0565b604051610a7591906147e3565b60405180910390f35b348015610a8a57600080fd5b50610a93611ca6565b604051610aa091906147e3565b60405180910390f35b348015610ab557600080fd5b50610ad06004803603810190610acb91906146b7565b611cac565b604051610add9190614712565b60405180910390f35b348015610af257600080fd5b50610afb611d79565b604051610b0891906147e3565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b3391906146b7565b611d7f565b604051610b459190614712565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b70919061472d565b611d9d565b005b348015610b8357600080fd5b50610b9e6004803603810190610b99919061472d565b611ef4565b604051610bab9190614712565b60405180910390f35b348015610bc057600080fd5b50610bc9611f14565b604051610bd69190614712565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c01919061495e565b611f27565b005b348015610c1457600080fd5b50610c2f6004803603810190610c2a919061499e565b612067565b005b348015610c3d57600080fd5b50610c586004803603810190610c5391906147fe565b612181565b005b348015610c6657600080fd5b50610c6f6122ab565b604051610c7c9190614712565b60405180910390f35b348015610c9157600080fd5b50610c9a6122be565b604051610ca791906147e3565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd291906147fe565b6122c4565b604051610ce49190614712565b60405180910390f35b348015610cf957600080fd5b50610d02612434565b604051610d0f91906147e3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614a1e565b61243a565b604051610d4c91906147e3565b60405180910390f35b348015610d6157600080fd5b50610d6a6124c1565b604051610d7791906147e3565b60405180910390f35b348015610d8c57600080fd5b50610d956124c7565b604051610da29190614712565b60405180910390f35b348015610db757600080fd5b50610dc0612582565b604051610dcd91906147e3565b60405180910390f35b348015610de257600080fd5b50610deb612588565b604051610df891906147e3565b60405180910390f35b348015610e0d57600080fd5b50610e1661258e565b604051610e2391906147e3565b60405180910390f35b348015610e3857600080fd5b50610e536004803603810190610e4e91906147fe565b612594565b604051610e609190614712565b60405180910390f35b606060038054610e7890614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490614a8d565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b6000610f0f610f086128f4565b84846128fc565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f6e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614b0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614b0b565b60405180910390fd5b670de0b6b3a76400006103e86001611182610f5c565b61118c9190614b5a565b6111969190614be3565b6111a09190614be3565b8110156111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614c86565b60405180910390fd5b670de0b6b3a7640000816111f69190614b5a565b60088190555050565b600061120c848484612ac7565b6112cd846112186128f4565b6112c885604051806060016040528060288152602001615bf960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061127e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006113a961130d6128f4565b846113a4856001600061131e6128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6128fc565b6001905092915050565b7f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331281565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a96128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f90614b0b565b60405180910390fd5b61025883101561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614d18565b60405180910390fd5b6103e88211158015611590575060008210155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c690614daa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116066128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614b0b565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b6116bf6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614b0b565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6117dd6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614b0b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546118949190614dca565b61189e9190614dca565b6014819055506014805411156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614e6c565b60405180910390fd5b505050565b6118f66128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614b0b565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611a226128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa890614b0b565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611add90614a8d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0990614a8d565b8015611b565780601f10611b2b57610100808354040283529160200191611b56565b820191906000526020600020905b815481529060010190602001808311611b3957829003601f168201915b5050505050905090565b611b686128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614b0b565b60405180910390fd5b7f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614efe565b60405180910390fd5b611c9082826138c3565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000611d6f611cb96128f4565b84611d6a85604051806060016040528060258152602001615c216025913960016000611ce36128f4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6128fc565b6001905092915050565b600e5481565b6000611d93611d8c6128f4565b8484612ac7565b6001905092915050565b611da56128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614b0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611f2f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590614b0b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205b9190614712565b60405180910390a25050565b61206f6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f590614b0b565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121269190614dca565b6121309190614dca565b6018819055506019601854111561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390614f6a565b60405180910390fd5b505050565b6121896128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614b0b565b60405180910390fd5b670de0b6b3a76400006103e8600561222e610f5c565b6122389190614b5a565b6122429190614be3565b61224c9190614be3565b81101561228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590614ffc565b60405180910390fd5b670de0b6b3a7640000816122a29190614b5a565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006122ce6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b0b565b60405180910390fd5b620186a0600161236b610f5c565b6123759190614b5a565b61237f9190614be3565b8210156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061508e565b60405180910390fd5b6103e860056123ce610f5c565b6123d89190614b5a565b6123e29190614be3565b821115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90615120565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006124d16128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614b0b565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b601a5481565b600a5481565b600061259e6128f4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b0b565b60405180910390fd5b600f5460105461263d9190614dca565b421161267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126759061518c565b60405180910390fd5b6103e88211156126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba9061521e565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000098945e7fdf06812d22c4819495f20225eb0833126040518263ffffffff1660e01b8152600401612725919061488d565b60206040518083038186803b15801561273d57600080fd5b505afa158015612751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127759190615253565b905060006127a0612710612792868561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156127d9576127d87f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331261dead83613a29565b5b60007f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284657600080fd5b505af115801561285a573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846128a59190614dca565b9050838110156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906152cc565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129639061535e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d3906153f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612aba91906147e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e90615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615514565b60405180910390fd5b6000811415612bc157612bbc83836000613a29565b61385a565b601160009054906101000a900460ff161561328457612bde6119c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c4c5750612c1c6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c855750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd85750600560149054906101000a900460ff16155b1561328357601160019054906101000a900460ff16612dd257601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615580565b60405180910390fd5b5b601360009054906101000a900460ff1615612f9a57612def6119c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e7657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ece57507f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f995743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b90615638565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303d5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e457600854811115613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906156ca565b60405180910390fd5b600a5461309383611459565b8261309e9190614dca565b11156130df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d690615736565b60405180910390fd5b613282565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d6576008548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157c8565b60405180910390fd5b613281565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661328057600a5461323383611459565b8261323e9190614dca565b111561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327690615736565b60405180910390fd5b5b5b5b5b5b600061328f30611459565b9050600060095482101590508080156132b45750601160029054906101000a900460ff165b80156132cd5750600560149054906101000a900460ff16155b80156133235750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133795750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133cf5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576001600560146101000a81548160ff0219169083151502179055506133f7613cbe565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156134795750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156134915750600c60009054906101000a900460ff165b80156134ac5750600d54600e546134a89190614dca565b4210155b80156135025750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135115761350f613fa5565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135c75750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135d157600090505b6000811561384a57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561363457506000601854115b156137015761366160646136536018548861396490919063ffffffff16565b6139df90919063ffffffff16565b9050601854601a54826136749190614b5a565b61367e9190614be3565b601d600082825461368f9190614dca565b92505081905550601854601b54826136a79190614b5a565b6136b19190614be3565b601e60008282546136c29190614dca565b92505081905550601854601954826136da9190614b5a565b6136e49190614be3565b601c60008282546136f59190614dca565b92505081905550613826565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561375c57506000601454115b1561382557613789606461377b6014548861396490919063ffffffff16565b6139df90919063ffffffff16565b90506014546016548261379c9190614b5a565b6137a69190614be3565b601d60008282546137b79190614dca565b92505081905550601454601754826137cf9190614b5a565b6137d99190614be3565b601e60008282546137ea9190614dca565b92505081905550601454601554826138029190614b5a565b61380c9190614be3565b601c600082825461381d9190614dca565b925050819055505b5b600081111561383b5761383a873083613a29565b5b808561384791906157e8565b94505b613855878787613a29565b505050505b505050565b60008383111582906138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e91906145fc565b60405180910390fd5b50600083856138b691906157e8565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083141561397757600090506139d9565b600082846139859190614b5a565b90508284826139949190614be3565b146139d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139cb9061588e565b60405180910390fd5b809150505b92915050565b6000613a2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9090615482565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0090615514565b60405180910390fd5b613b148383836141dd565b613b7f81604051806060016040528060268152602001615bd3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461385f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c12816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cb191906147e3565b60405180910390a3505050565b6000613cc930611459565b90506000601e54601c54601d54613ce09190614dca565b613cea9190614dca565b9050600080831480613cfc5750600082145b15613d0957505050613fa3565b6014600954613d189190614b5a565b831115613d31576014600954613d2e9190614b5a565b92505b6000600283601d5486613d449190614b5a565b613d4e9190614be3565b613d589190614be3565b90506000613d6f82866141e290919063ffffffff16565b90506000479050613d7f8261422c565b6000613d9482476141e290919063ffffffff16565b90506000613dbf87613db1601c548561396490919063ffffffff16565b6139df90919063ffffffff16565b90506000613dea88613ddc601e548661396490919063ffffffff16565b6139df90919063ffffffff16565b90506000818385613dfb91906157e8565b613e0591906157e8565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e65906158df565b60006040518083038185875af1925050503d8060008114613ea2576040519150601f19603f3d011682016040523d82523d6000602084013e613ea7565b606091505b505080985050600087118015613ebd5750600081115b15613f0a57613ecc8782614478565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f01939291906158f4565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f50906158df565b60006040518083038185875af1925050503d8060008114613f8d576040519150601f19603f3d011682016040523d82523d6000602084013e613f92565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000098945e7fdf06812d22c4819495f20225eb0833126040518263ffffffff1660e01b8152600401614009919061488d565b60206040518083038186803b15801561402157600080fd5b505afa158015614035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140599190615253565b90506000614086612710614078600b548561396490919063ffffffff16565b6139df90919063ffffffff16565b905060008111156140bf576140be7f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331261dead83613a29565b5b60007f00000000000000000000000098945e7fdf06812d22c4819495f20225eb08331290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561412c57600080fd5b505af1158015614140573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b891906145fc565b60405180910390fd5b50600083856141d09190614be3565b9050809150509392505050565b505050565b600061422483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061385f565b905092915050565b6000600267ffffffffffffffff8111156142495761424861592b565b5b6040519080825280602002602001820160405280156142775781602001602082028036833780820191505090505b509050308160008151811061428f5761428e61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432f57600080fd5b505afa158015614343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614367919061599e565b8160018151811061437b5761437a61595a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143e0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614442959493929190615ac4565b600060405180830381600087803b15801561445c57600080fd5b505af1158015614470573d6000803e3d6000fd5b505050505050565b6144a3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161450a96959493929190615b1e565b6060604051808303818588803b15801561452357600080fd5b505af1158015614537573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061455c9190615b7f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459d578082015181840152602081019050614582565b838111156145ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006145ce82614563565b6145d8818561456e565b93506145e881856020860161457f565b6145f1816145b2565b840191505092915050565b6000602082019050818103600083015261461681846145c3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464e82614623565b9050919050565b61465e81614643565b811461466957600080fd5b50565b60008135905061467b81614655565b92915050565b6000819050919050565b61469481614681565b811461469f57600080fd5b50565b6000813590506146b18161468b565b92915050565b600080604083850312156146ce576146cd61461e565b5b60006146dc8582860161466c565b92505060206146ed858286016146a2565b9150509250929050565b60008115159050919050565b61470c816146f7565b82525050565b60006020820190506147276000830184614703565b92915050565b6000602082840312156147435761474261461e565b5b60006147518482850161466c565b91505092915050565b6000819050919050565b600061477f61477a61477584614623565b61475a565b614623565b9050919050565b600061479182614764565b9050919050565b60006147a382614786565b9050919050565b6147b381614798565b82525050565b60006020820190506147ce60008301846147aa565b92915050565b6147dd81614681565b82525050565b60006020820190506147f860008301846147d4565b92915050565b6000602082840312156148145761481361461e565b5b6000614822848285016146a2565b91505092915050565b6000806000606084860312156148445761484361461e565b5b60006148528682870161466c565b93505060206148638682870161466c565b9250506040614874868287016146a2565b9150509250925092565b61488781614643565b82525050565b60006020820190506148a2600083018461487e565b92915050565b600060ff82169050919050565b6148be816148a8565b82525050565b60006020820190506148d960008301846148b5565b92915050565b6148e8816146f7565b81146148f357600080fd5b50565b600081359050614905816148df565b92915050565b6000806000606084860312156149245761492361461e565b5b6000614932868287016146a2565b9350506020614943868287016146a2565b9250506040614954868287016148f6565b9150509250925092565b600080604083850312156149755761497461461e565b5b60006149838582860161466c565b9250506020614994858286016148f6565b9150509250929050565b6000806000606084860312156149b7576149b661461e565b5b60006149c5868287016146a2565b93505060206149d6868287016146a2565b92505060406149e7868287016146a2565b9150509250925092565b600060208284031215614a0757614a0661461e565b5b6000614a15848285016148f6565b91505092915050565b60008060408385031215614a3557614a3461461e565b5b6000614a438582860161466c565b9250506020614a548582860161466c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614aa557607f821691505b60208210811415614ab957614ab8614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614af560208361456e565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b6582614681565b9150614b7083614681565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ba957614ba8614b2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bee82614681565b9150614bf983614681565b925082614c0957614c08614bb4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c70602f8361456e565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d0260338361456e565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614d9460308361456e565b9150614d9f82614d38565b604082019050919050565b60006020820190508181036000830152614dc381614d87565b9050919050565b6000614dd582614681565b9150614de083614681565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e1557614e14614b2b565b5b828201905092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e56601d8361456e565b9150614e6182614e20565b602082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ee860398361456e565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f54601d8361456e565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe660248361456e565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061507860358361456e565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061510a60348361456e565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061517660208361456e565b915061518182615140565b602082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615208602a8361456e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b60008151905061524d8161468b565b92915050565b6000602082840312156152695761526861461e565b5b60006152778482850161523e565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152b6601b8361456e565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534860248361456e565b9150615353826152ec565b604082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153da60228361456e565b91506153e58261537e565b604082019050919050565b60006020820190508181036000830152615409816153cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061546c60258361456e565b915061547782615410565b604082019050919050565b6000602082019050818103600083015261549b8161545f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154fe60238361456e565b9150615509826154a2565b604082019050919050565b6000602082019050818103600083015261552d816154f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061556a60168361456e565b915061557582615534565b602082019050919050565b600060208201905081810360008301526155998161555d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061562260498361456e565b915061562d826155a0565b606082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156b460358361456e565b91506156bf82615658565b604082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061572060138361456e565b915061572b826156ea565b602082019050919050565b6000602082019050818103600083015261574f81615713565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157b260368361456e565b91506157bd82615756565b604082019050919050565b600060208201905081810360008301526157e1816157a5565b9050919050565b60006157f382614681565b91506157fe83614681565b92508282101561581157615810614b2b565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061587860218361456e565b91506158838261581c565b604082019050919050565b600060208201905081810360008301526158a78161586b565b9050919050565b600081905092915050565b50565b60006158c96000836158ae565b91506158d4826158b9565b600082019050919050565b60006158ea826158bc565b9150819050919050565b600060608201905061590960008301866147d4565b61591660208301856147d4565b61592360408301846147d4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061599881614655565b92915050565b6000602082840312156159b4576159b361461e565b5b60006159c284828501615989565b91505092915050565b6000819050919050565b60006159f06159eb6159e6846159cb565b61475a565b614681565b9050919050565b615a00816159d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a3b81614643565b82525050565b6000615a4d8383615a32565b60208301905092915050565b6000602082019050919050565b6000615a7182615a06565b615a7b8185615a11565b9350615a8683615a22565b8060005b83811015615ab7578151615a9e8882615a41565b9750615aa983615a59565b925050600181019050615a8a565b5085935050505092915050565b600060a082019050615ad960008301886147d4565b615ae660208301876159f7565b8181036040830152615af88186615a66565b9050615b07606083018561487e565b615b1460808301846147d4565b9695505050505050565b600060c082019050615b33600083018961487e565b615b4060208301886147d4565b615b4d60408301876159f7565b615b5a60608301866159f7565b615b67608083018561487e565b615b7460a08301846147d4565b979650505050505050565b600080600060608486031215615b9857615b9761461e565b5b6000615ba68682870161523e565b9350506020615bb78682870161523e565b9250506040615bc88682870161523e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206c4799e73db895ab0d559f0eff890632cc45cc5c789263c340d399fa24947e2564736f6c63430008090033

Deployed Bytecode Sourcemap

28608:18216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7660:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9827:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30269:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28690:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8780:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36980:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29266:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29078:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30048:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30008;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34529:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10478:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28793:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29173:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29134:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8622:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11242:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28748:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29363:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37151:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29859:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29443:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8951:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44532:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33742:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34998:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28885:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29748;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35355:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33531:155;;;;;;;;;;;;;:::i;:::-;;21483:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28922:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35242:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7879:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36312:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29822:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29319:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30088:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29970:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11963:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29224:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9291:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36760:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30491:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29403:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36122:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35736:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34771:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29666:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28959:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34136:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29714:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9529:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29001:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33927:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29785:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29932:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29041:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45803:1018;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7660:100;7714:13;7747:5;7740:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7660:100;:::o;9827:169::-;9910:4;9927:39;9936:12;:10;:12::i;:::-;9950:7;9959:6;9927:8;:39::i;:::-;9984:4;9977:11;;9827:169;;;;:::o;30269:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;28690:51::-;;;:::o;8780:108::-;8841:7;8868:12;;8861:19;;8780:108;:::o;36980:157::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37087:9:::1;;;;;;;;;;;37059:38;;37076:9;37059:38;;;;;;;;;;;;37120:9;37108;;:21;;;;;;;;;;;;;;;;;;36980:157:::0;:::o;29266:46::-;;;;:::o;29078:36::-;;;;:::o;30048:33::-;;;;:::o;30008:::-;;;;:::o;34529:234::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34648:4:::1;34642;34638:1;34622:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34621:31;;;;:::i;:::-;34611:6;:41;;34603:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34748:6;34738;:17;;;;:::i;:::-;34715:20;:40;;;;34529:234:::0;:::o;10478:355::-;10618:4;10635:36;10645:6;10653:9;10664:6;10635:9;:36::i;:::-;10682:121;10691:6;10699:12;:10;:12::i;:::-;10713:89;10751:6;10713:89;;;;;;;;;;;;;;;;;:11;:19;10725:6;10713:19;;;;;;;;;;;;;;;:33;10733:12;:10;:12::i;:::-;10713:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10682:8;:121::i;:::-;10821:4;10814:11;;10478:355;;;;;:::o;28793:53::-;28839:6;28793:53;:::o;29173:44::-;;;;:::o;29134:32::-;;;;;;;;;;;;;:::o;8622:93::-;8680:5;8705:2;8698:9;;8622:93;:::o;11242:218::-;11330:4;11347:83;11356:12;:10;:12::i;:::-;11370:7;11379:50;11418:10;11379:11;:25;11391:12;:10;:12::i;:::-;11379:25;;;;;;;;;;;;;;;:34;11405:7;11379:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11347:8;:83::i;:::-;11448:4;11441:11;;11242:218;;;;:::o;28748:38::-;;;:::o;29363:33::-;;;;;;;;;;;;;:::o;37151:125::-;37216:4;37240:19;:28;37260:7;37240:28;;;;;;;;;;;;;;;;;;;;;;;;;37233:35;;37151:125;;;:::o;29859:28::-;;;;:::o;29443:31::-;;;;;;;;;;;;;:::o;8951:127::-;9025:7;9052:9;:18;9062:7;9052:18;;;;;;;;;;;;;;;;9045:25;;8951:127;;;:::o;44532:447::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44686:3:::1;44663:19;:26;;44655:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44776:4;44764:8;:16;;:33;;;;;44796:1;44784:8;:13;;44764:33;44756:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;44879:19;44861:15;:37;;;;44928:8;44909:16;:27;;;;44963:8;44947:13;;:24;;;;;;;;;;;;;;;;;;44532:447:::0;;;:::o;33742:120::-;33794:4;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33827:5:::1;33810:14;;:22;;;;;;;;;;;;;;;;;;33850:4;33843:11;;33742:120:::0;:::o;34998:144::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35130:4:::1;35088:31;:39;35120:6;35088:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34998:144:::0;;:::o;28885:30::-;;;;;;;;;;;;;:::o;29748:::-;;;;:::o;35355:369::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35489:13:::1;35471:15;:31;;;;35531:13;35513:15;:31;;;;35567:7;35555:9;:19;;;;35636:9;;35618:15;;35600;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;35585:12;:60;;;;35680:2;35664:12:::0;::::1;:18;;35656:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35355:369:::0;;;:::o;33531:155::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33602:4:::1;33586:13;;:20;;;;;;;;;;;;;;;;;;33631:4;33617:11;;:18;;;;;;;;;;;;;;;;;;33663:15;33646:14;:32;;;;33531:155::o:0;21483:79::-;21521:7;21548:6;;;;;;;;;;;21541:13;;21483:79;:::o;28922:24::-;;;;;;;;;;;;;:::o;29894:31::-;;;;:::o;35242:101::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35328:7:::1;35314:11;;:21;;;;;;;;;;;;;;;;;;35242:101:::0;:::o;7879:104::-;7935:13;7968:7;7961:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7879:104;:::o;36312:244::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36419:13:::1;36411:21;;:4;:21;;;;36403:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36507:41;36536:4;36542:5;36507:28;:41::i;:::-;36312:244:::0;;:::o;29822:24::-;;;;:::o;29319:35::-;;;;:::o;30088:27::-;;;;:::o;29970:25::-;;;;:::o;11963:269::-;12056:4;12073:129;12082:12;:10;:12::i;:::-;12096:7;12105:96;12144:15;12105:96;;;;;;;;;;;;;;;;;:11;:25;12117:12;:10;:12::i;:::-;12105:25;;;;;;;;;;;;;;;:34;12131:7;12105:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12073:8;:129::i;:::-;12220:4;12213:11;;11963:269;;;;:::o;29224:29::-;;;;:::o;9291:175::-;9377:4;9394:42;9404:12;:10;:12::i;:::-;9418:9;9429:6;9394:9;:42::i;:::-;9454:4;9447:11;;9291:175;;;;:::o;36760:208::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36897:15:::1;;;;;;;;;;;36854:59;;36877:18;36854:59;;;;;;;;;;;;36942:18;36924:15;;:36;;;;;;;;;;;;;;;;;;36760:208:::0;:::o;30491:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29403:33::-;;;;;;;;;;;;;:::o;36122:182::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36238:8:::1;36207:19;:28;36227:7;36207:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36278:7;36262:34;;;36287:8;36262:34;;;;;;:::i;:::-;;;;;;;;36122:182:::0;;:::o;35736:378::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35872:13:::1;35853:16;:32;;;;35915:13;35896:16;:32;;;;35952:7;35939:10;:20;;;;36024:10;;36005:16;;35986;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;35970:13;:64;;;;36070:2;36053:13;;:19;;36045:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35736:378:::0;;;:::o;34771:215::-;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34893:4:::1;34887;34883:1;34867:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34866:31;;;;:::i;:::-;34856:6;:41;;34848:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34971:6;34961;:17;;;;:::i;:::-;34949:9;:29;;;;34771:215:::0;:::o;29666:39::-;;;;;;;;;;;;;:::o;28959:35::-;;;;:::o;34136:381::-;34217:4;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34273:6:::1;34269:1;34253:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34240:9;:39;;34232:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34388:4;34384:1;34368:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34355:9;:37;;34347:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34480:9;34459:18;:30;;;;34506:4;34499:11;;34136:381:::0;;;:::o;29714:27::-;;;;:::o;9529:151::-;9618:7;9645:11;:18;9657:5;9645:18;;;;;;;;;;;;;;;:27;9664:7;9645:27;;;;;;;;;;;;;;;;9638:34;;9529:151;;;;:::o;29001:33::-;;;;:::o;33927:134::-;33987:4;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34026:5:::1;34003:20;;:28;;;;;;;;;;;;;;;;;;34049:4;34042:11;;33927:134:::0;:::o;29785:30::-;;;;:::o;29932:31::-;;;;:::o;29041:24::-;;;;:::o;45803:1018::-;45887:4;21705:12;:10;:12::i;:::-;21695:22;;:6;;;;;;;;;;;:22;;;21687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45952:19:::1;;45929:20;;:42;;;;:::i;:::-;45911:15;:60;45903:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;46039:4;46028:7;:15;;46020:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46124:15;46101:20;:38;;;;46202:28;46233:4;:14;;;46248:13;46233:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46202:60;;46320:20;46343:44;46381:5;46343:33;46368:7;46343:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;46320:67;;46515:1;46500:12;:16;46496:109;;;46532:61;46548:13;46571:6;46580:12;46532:15;:61::i;:::-;46496:109;46688:19;46725:13;46688:51;;46750:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46777:14;;;;;;;;;;46809:4;46802:11;;;;;45803:1018:::0;;;:::o;16527:181::-;16585:7;16605:9;16621:1;16617;:5;;;;:::i;:::-;16605:17;;16646:1;16641;:6;;16633:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16699:1;16692:8;;;16527:181;;;;:::o;296:98::-;349:7;376:10;369:17;;296:98;:::o;15149:380::-;15302:1;15285:19;;:5;:19;;;;15277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15383:1;15364:21;;:7;:21;;;;15356:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15467:6;15437:11;:18;15449:5;15437:18;;;;;;;;;;;;;;;:27;15456:7;15437:27;;;;;;;;;;;;;;;:36;;;;15505:7;15489:32;;15498:5;15489:32;;;15514:6;15489:32;;;;;;:::i;:::-;;;;;;;;15149:380;;;:::o;37338:4358::-;37486:1;37470:18;;:4;:18;;;;37462:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37563:1;37549:16;;:2;:16;;;;37541:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37640:1;37630:6;:11;37627:92;;;37658:28;37674:4;37680:2;37684:1;37658:15;:28::i;:::-;37701:7;;37627:92;37742:14;;;;;;;;;;;37739:1841;;;37802:7;:5;:7::i;:::-;37794:15;;:4;:15;;;;:49;;;;;37836:7;:5;:7::i;:::-;37830:13;;:2;:13;;;;37794:49;:86;;;;;37878:1;37864:16;;:2;:16;;;;37794:86;:128;;;;;37915:6;37901:21;;:2;:21;;;;37794:128;:158;;;;;37944:8;;;;;;;;;;;37943:9;37794:158;37772:1797;;;37990:13;;;;;;;;;;;37986:148;;38035:19;:25;38055:4;38035:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38064:19;:23;38084:2;38064:23;;;;;;;;;;;;;;;;;;;;;;;;;38035:52;38027:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37986:148;38292:20;;;;;;;;;;;38288:423;;;38346:7;:5;:7::i;:::-;38340:13;;:2;:13;;;;:47;;;;;38371:15;38357:30;;:2;:30;;;;38340:47;:79;;;;;38405:13;38391:28;;:2;:28;;;;38340:79;38336:356;;;38497:12;38455:28;:39;38484:9;38455:39;;;;;;;;;;;;;;;;:54;38447:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38656:12;38614:28;:39;38643:9;38614:39;;;;;;;;;;;;;;;:54;;;;38336:356;38288:423;38780:25;:31;38806:4;38780:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38816:31;:35;38848:2;38816:35;;;;;;;;;;;;;;;;;;;;;;;;;38815:36;38780:71;38776:778;;;38898:20;;38888:6;:30;;38880:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39037:9;;39020:13;39030:2;39020:9;:13::i;:::-;39011:6;:22;;;;:::i;:::-;:35;;39003:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38776:778;;;39164:25;:29;39190:2;39164:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39198:31;:37;39230:4;39198:37;;;;;;;;;;;;;;;;;;;;;;;;;39197:38;39164:71;39160:394;;;39282:20;;39272:6;:30;;39264:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39160:394;;;39408:31;:35;39440:2;39408:35;;;;;;;;;;;;;;;;;;;;;;;;;39404:150;;39501:9;;39484:13;39494:2;39484:9;:13::i;:::-;39475:6;:22;;;;:::i;:::-;:35;;39467:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39404:150;39160:394;38776:778;37772:1797;37739:1841;39614:28;39645:24;39663:4;39645:9;:24::i;:::-;39614:55;;39690:12;39729:18;;39705:20;:42;;39690:57;;39778:7;:35;;;;;39802:11;;;;;;;;;;;39778:35;:61;;;;;39831:8;;;;;;;;;;;39830:9;39778:61;:110;;;;;39857:25;:31;39883:4;39857:31;;;;;;;;;;;;;;;;;;;;;;;;;39856:32;39778:110;:153;;;;;39906:19;:25;39926:4;39906:25;;;;;;;;;;;;;;;;;;;;;;;;;39905:26;39778:153;:194;;;;;39949:19;:23;39969:2;39949:23;;;;;;;;;;;;;;;;;;;;;;;;;39948:24;39778:194;39760:338;;;40010:4;39999:8;;:15;;;;;;;;;;;;;;;;;;40043:10;:8;:10::i;:::-;40081:5;40070:8;;:16;;;;;;;;;;;;;;;;;;39760:338;40122:8;;;;;;;;;;;40121:9;:42;;;;;40134:25;:29;40160:2;40134:29;;;;;;;;;;;;;;;;;;;;;;;;;40121:42;:59;;;;;40167:13;;;;;;;;;;;40121:59;:114;;;;;40220:15;;40203:14;;:32;;;;:::i;:::-;40184:15;:51;;40121:114;:144;;;;;40240:19;:25;40260:4;40240:25;;;;;;;;;;;;;;;;;;;;;;;;;40239:26;40121:144;40118:204;;;40281:29;:27;:29::i;:::-;;40118:204;40334:12;40350:8;;;;;;;;;;;40349:9;40334:24;;40459:19;:25;40479:4;40459:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40488:19;:23;40508:2;40488:23;;;;;;;;;;;;;;;;;;;;;;;;;40459:52;40456:99;;;40538:5;40528:15;;40456:99;40575:12;40679:7;40676:967;;;40730:25;:29;40756:2;40730:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40779:1;40763:13;;:17;40730:50;40726:748;;;40807:34;40837:3;40807:25;40818:13;;40807:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40800:41;;40908:13;;40889:16;;40882:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40860:18;;:61;;;;;;;:::i;:::-;;;;;;;;40976:13;;40963:10;;40956:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40940:12;;:49;;;;;;;:::i;:::-;;;;;;;;41056:13;;41037:16;;41030:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41008:18;;:61;;;;;;;:::i;:::-;;;;;;;;40726:748;;;41130:25;:31;41156:4;41130:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41180:1;41165:12;;:16;41130:51;41127:347;;;41206:33;41235:3;41206:24;41217:12;;41206:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41199:40;;41302:12;;41284:15;;41277:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41255:18;;:59;;;;;;;:::i;:::-;;;;;;;;41368:12;;41356:9;;41349:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41333:12;;:47;;;;;;;:::i;:::-;;;;;;;;41446:12;;41428:15;;41421:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41399:18;;:59;;;;;;;:::i;:::-;;;;;;;;41127:347;40726:748;41512:1;41505:4;:8;41502:93;;;41537:42;41553:4;41567;41574;41537:15;:42::i;:::-;41502:93;41627:4;41617:14;;;;;:::i;:::-;;;40676:967;41655:33;41671:4;41677:2;41681:6;41655:15;:33::i;:::-;37451:4245;;;;37338:4358;;;;:::o;17430:192::-;17516:7;17549:1;17544;:6;;17552:12;17536:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17576:9;17592:1;17588;:5;;;;:::i;:::-;17576:17;;17613:1;17606:8;;;17430:192;;;;;:::o;36564:188::-;36681:5;36647:25;:31;36673:4;36647:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36738:5;36704:40;;36732:4;36704:40;;;;;;;;;;;;36564:188;;:::o;17881:471::-;17939:7;18189:1;18184;:6;18180:47;;;18214:1;18207:8;;;;18180:47;18239:9;18255:1;18251;:5;;;;:::i;:::-;18239:17;;18284:1;18279;18275;:5;;;;:::i;:::-;:10;18267:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18343:1;18336:8;;;17881:471;;;;;:::o;18828:132::-;18886:7;18913:39;18917:1;18920;18913:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18906:46;;18828:132;;;;:::o;12722:573::-;12880:1;12862:20;;:6;:20;;;;12854:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12964:1;12943:23;;:9;:23;;;;12935:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13019:47;13040:6;13048:9;13059:6;13019:20;:47::i;:::-;13099:71;13121:6;13099:71;;;;;;;;;;;;;;;;;:9;:17;13109:6;13099:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13079:9;:17;13089:6;13079:17;;;;;;;;;;;;;;;:91;;;;13204:32;13229:6;13204:9;:20;13214:9;13204:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13181:9;:20;13191:9;13181:20;;;;;;;;;;;;;;;:55;;;;13269:9;13252:35;;13261:6;13252:35;;;13280:6;13252:35;;;;;;:::i;:::-;;;;;;;;12722:573;;;:::o;42854:1666::-;42893:23;42919:24;42937:4;42919:9;:24::i;:::-;42893:50;;42954:25;43024:12;;43003:18;;42982;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42954:82;;43047:12;43102:1;43083:15;:20;:46;;;;43128:1;43107:17;:22;43083:46;43080:60;;;43132:7;;;;;43080:60;43194:2;43173:18;;:23;;;;:::i;:::-;43155:15;:41;43152:111;;;43249:2;43228:18;;:23;;;;:::i;:::-;43210:41;;43152:111;43332:23;43417:1;43397:17;43376:18;;43358:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43332:86;;43429:26;43458:36;43478:15;43458;:19;;:36;;;;:::i;:::-;43429:65;;43515:25;43543:21;43515:49;;43577:36;43594:18;43577:16;:36::i;:::-;43635:18;43656:44;43682:17;43656:21;:25;;:44;;;;:::i;:::-;43635:65;;43721:23;43747:57;43786:17;43747:34;43762:18;;43747:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43721:83;;43815:17;43835:51;43868:17;43835:28;43850:12;;43835:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43815:71;;43917:23;43974:9;43956:15;43943:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43917:66;;44035:1;44014:18;:22;;;;44068:1;44047:18;:22;;;;44095:1;44080:12;:16;;;;44138:9;;;;;;;;;;;44130:23;;44161:9;44130:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44117:58;;;;;44217:1;44199:15;:19;:42;;;;;44240:1;44222:15;:19;44199:42;44196:210;;;44257:46;44270:15;44287;44257:12;:46::i;:::-;44323:71;44338:18;44358:15;44375:18;;44323:71;;;;;;;;:::i;:::-;;;;;;;;44196:210;44457:15;;;;;;;;;;;44449:29;;44486:21;44449:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44436:76;;;;;42882:1638;;;;;;;;;;42854:1666;:::o;44991:804::-;45048:4;45091:15;45074:14;:32;;;;45169:28;45200:4;:14;;;45215:13;45200:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45169:60;;45287:20;45310:53;45357:5;45310:42;45335:16;;45310:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;45287:76;;45491:1;45476:12;:16;45472:109;;;45508:61;45524:13;45547:6;45556:12;45508:15;:61::i;:::-;45472:109;45664:19;45701:13;45664:51;;45726:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45753:12;;;;;;;;;;45783:4;45776:11;;;;;44991:804;:::o;19456:278::-;19542:7;19574:1;19570;:5;19577:12;19562:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19601:9;19617:1;19613;:5;;;;:::i;:::-;19601:17;;19725:1;19718:8;;;19456:278;;;;;:::o;16132:125::-;;;;:::o;16991:136::-;17049:7;17076:43;17080:1;17083;17076:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17069:50;;16991:136;;;;:::o;41704:601::-;41832:21;41870:1;41856:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41832:40;;41901:4;41883;41888:1;41883:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41927:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41917:4;41922:1;41917:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41962:62;41979:4;41994:15;42012:11;41962:8;:62::i;:::-;42063:15;:66;;;42144:11;42170:1;42214:4;42241;42261:15;42063:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41759:546;41704:601;:::o;42329:517::-;42477:62;42494:4;42509:15;42527:11;42477:8;:62::i;:::-;42582:15;:31;;;42621:9;42654:4;42674:11;42700:1;42743;28839:6;42812:15;42582:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42329:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:238::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:21;13344:2;13336:6;13332:15;13325:46;13140:238;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:235::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:18;14385:2;14377:6;14373:15;14366:43;14181:235;:::o;14422:366::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:419::-;14960:4;14998:2;14987:9;14983:18;14975:26;;15047:9;15041:4;15037:20;15033:1;15022:9;15018:17;15011:47;15075:131;15201:4;15075:131;:::i;:::-;15067:139;;14794:419;;;:::o;15219:305::-;15259:3;15278:20;15296:1;15278:20;:::i;:::-;15273:25;;15312:20;15330:1;15312:20;:::i;:::-;15307:25;;15466:1;15398:66;15394:74;15391:1;15388:81;15385:107;;;15472:18;;:::i;:::-;15385:107;15516:1;15513;15509:9;15502:16;;15219:305;;;;:::o;15530:179::-;15670:31;15666:1;15658:6;15654:14;15647:55;15530:179;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:244::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:27;16716:2;16708:6;16704:15;16697:52;16512:244;:::o;16762:366::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:419::-;17300:4;17338:2;17327:9;17323:18;17315:26;;17387:9;17381:4;17377:20;17373:1;17362:9;17358:17;17351:47;17415:131;17541:4;17415:131;:::i;:::-;17407:139;;17134:419;;;:::o;17559:179::-;17699:31;17695:1;17687:6;17683:14;17676:55;17559:179;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:223::-;18681:34;18677:1;18669:6;18665:14;18658:58;18750:6;18745:2;18737:6;18733:15;18726:31;18541:223;:::o;18770:366::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:419::-;19308:4;19346:2;19335:9;19331:18;19323:26;;19395:9;19389:4;19385:20;19381:1;19370:9;19366:17;19359:47;19423:131;19549:4;19423:131;:::i;:::-;19415:139;;19142:419;;;:::o;19567:240::-;19707:34;19703:1;19695:6;19691:14;19684:58;19776:23;19771:2;19763:6;19759:15;19752:48;19567:240;:::o;19813:366::-;19955:3;19976:67;20040:2;20035:3;19976:67;:::i;:::-;19969:74;;20052:93;20141:3;20052:93;:::i;:::-;20170:2;20165:3;20161:12;20154:19;;19813:366;;;:::o;20185:419::-;20351:4;20389:2;20378:9;20374:18;20366:26;;20438:9;20432:4;20428:20;20424:1;20413:9;20409:17;20402:47;20466:131;20592:4;20466:131;:::i;:::-;20458:139;;20185:419;;;:::o;20610:239::-;20750:34;20746:1;20738:6;20734:14;20727:58;20819:22;20814:2;20806:6;20802:15;20795:47;20610:239;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:182::-;21792:34;21788:1;21780:6;21776:14;21769:58;21652:182;:::o;21840:366::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:419::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:229::-;22777:34;22773:1;22765:6;22761:14;22754:58;22846:12;22841:2;22833:6;22829:15;22822:37;22637:229;:::o;22872:366::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:419::-;23410:4;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23244:419;;;:::o;23669:143::-;23726:5;23757:6;23751:13;23742:22;;23773:33;23800:5;23773:33;:::i;:::-;23669:143;;;;:::o;23818:351::-;23888:6;23937:2;23925:9;23916:7;23912:23;23908:32;23905:119;;;23943:79;;:::i;:::-;23905:119;24063:1;24088:64;24144:7;24135:6;24124:9;24120:22;24088:64;:::i;:::-;24078:74;;24034:128;23818:351;;;;:::o;24175:177::-;24315:29;24311:1;24303:6;24299:14;24292:53;24175:177;:::o;24358:366::-;24500:3;24521:67;24585:2;24580:3;24521:67;:::i;:::-;24514:74;;24597:93;24686:3;24597:93;:::i;:::-;24715:2;24710:3;24706:12;24699:19;;24358:366;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:223::-;25295:34;25291:1;25283:6;25279:14;25272:58;25364:6;25359:2;25351:6;25347:15;25340:31;25155:223;:::o;25384:366::-;25526:3;25547:67;25611:2;25606:3;25547:67;:::i;:::-;25540:74;;25623:93;25712:3;25623:93;:::i;:::-;25741:2;25736:3;25732:12;25725:19;;25384:366;;;:::o;25756:419::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:221::-;26321:34;26317:1;26309:6;26305:14;26298:58;26390:4;26385:2;26377:6;26373:15;26366:29;26181:221;:::o;26408:366::-;26550:3;26571:67;26635:2;26630:3;26571:67;:::i;:::-;26564:74;;26647:93;26736:3;26647:93;:::i;:::-;26765:2;26760:3;26756:12;26749:19;;26408:366;;;:::o;26780:419::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:224::-;27345:34;27341:1;27333:6;27329:14;27322:58;27414:7;27409:2;27401:6;27397:15;27390:32;27205:224;:::o;27435:366::-;27577:3;27598:67;27662:2;27657:3;27598:67;:::i;:::-;27591:74;;27674:93;27763:3;27674:93;:::i;:::-;27792:2;27787:3;27783:12;27776:19;;27435:366;;;:::o;27807:419::-;27973:4;28011:2;28000:9;27996:18;27988:26;;28060:9;28054:4;28050:20;28046:1;28035:9;28031:17;28024:47;28088:131;28214:4;28088:131;:::i;:::-;28080:139;;27807:419;;;:::o;28232:222::-;28372:34;28368:1;28360:6;28356:14;28349:58;28441:5;28436:2;28428:6;28424:15;28417:30;28232:222;:::o;28460:366::-;28602:3;28623:67;28687:2;28682:3;28623:67;:::i;:::-;28616:74;;28699:93;28788:3;28699:93;:::i;:::-;28817:2;28812:3;28808:12;28801:19;;28460:366;;;:::o;28832:419::-;28998:4;29036:2;29025:9;29021:18;29013:26;;29085:9;29079:4;29075:20;29071:1;29060:9;29056:17;29049:47;29113:131;29239:4;29113:131;:::i;:::-;29105:139;;28832:419;;;:::o;29257:172::-;29397:24;29393:1;29385:6;29381:14;29374:48;29257:172;:::o;29435:366::-;29577:3;29598:67;29662:2;29657:3;29598:67;:::i;:::-;29591:74;;29674:93;29763:3;29674:93;:::i;:::-;29792:2;29787:3;29783:12;29776:19;;29435:366;;;:::o;29807:419::-;29973:4;30011:2;30000:9;29996:18;29988:26;;30060:9;30054:4;30050:20;30046:1;30035:9;30031:17;30024:47;30088:131;30214:4;30088:131;:::i;:::-;30080:139;;29807:419;;;:::o;30232:297::-;30372:34;30368:1;30360:6;30356:14;30349:58;30441:34;30436:2;30428:6;30424:15;30417:59;30510:11;30505:2;30497:6;30493:15;30486:36;30232:297;:::o;30535:366::-;30677:3;30698:67;30762:2;30757:3;30698:67;:::i;:::-;30691:74;;30774:93;30863:3;30774:93;:::i;:::-;30892:2;30887:3;30883:12;30876:19;;30535:366;;;:::o;30907:419::-;31073:4;31111:2;31100:9;31096:18;31088:26;;31160:9;31154:4;31150:20;31146:1;31135:9;31131:17;31124:47;31188:131;31314:4;31188:131;:::i;:::-;31180:139;;30907:419;;;:::o;31332:240::-;31472:34;31468:1;31460:6;31456:14;31449:58;31541:23;31536:2;31528:6;31524:15;31517:48;31332:240;:::o;31578:366::-;31720:3;31741:67;31805:2;31800:3;31741:67;:::i;:::-;31734:74;;31817:93;31906:3;31817:93;:::i;:::-;31935:2;31930:3;31926:12;31919:19;;31578:366;;;:::o;31950:419::-;32116:4;32154:2;32143:9;32139:18;32131:26;;32203:9;32197:4;32193:20;32189:1;32178:9;32174:17;32167:47;32231:131;32357:4;32231:131;:::i;:::-;32223:139;;31950:419;;;:::o;32375:169::-;32515:21;32511:1;32503:6;32499:14;32492:45;32375:169;:::o;32550:366::-;32692:3;32713:67;32777:2;32772:3;32713:67;:::i;:::-;32706:74;;32789:93;32878:3;32789:93;:::i;:::-;32907:2;32902:3;32898:12;32891:19;;32550:366;;;:::o;32922:419::-;33088:4;33126:2;33115:9;33111:18;33103:26;;33175:9;33169:4;33165:20;33161:1;33150:9;33146:17;33139:47;33203:131;33329:4;33203:131;:::i;:::-;33195:139;;32922:419;;;:::o;33347:241::-;33487:34;33483:1;33475:6;33471:14;33464:58;33556:24;33551:2;33543:6;33539:15;33532:49;33347:241;:::o;33594:366::-;33736:3;33757:67;33821:2;33816:3;33757:67;:::i;:::-;33750:74;;33833:93;33922:3;33833:93;:::i;:::-;33951:2;33946:3;33942:12;33935:19;;33594:366;;;:::o;33966:419::-;34132:4;34170:2;34159:9;34155:18;34147:26;;34219:9;34213:4;34209:20;34205:1;34194:9;34190:17;34183:47;34247:131;34373:4;34247:131;:::i;:::-;34239:139;;33966:419;;;:::o;34391:191::-;34431:4;34451:20;34469:1;34451:20;:::i;:::-;34446:25;;34485:20;34503:1;34485:20;:::i;:::-;34480:25;;34524:1;34521;34518:8;34515:34;;;34529:18;;:::i;:::-;34515:34;34574:1;34571;34567:9;34559:17;;34391:191;;;;:::o;34588:220::-;34728:34;34724:1;34716:6;34712:14;34705:58;34797:3;34792:2;34784:6;34780:15;34773:28;34588:220;:::o;34814:366::-;34956:3;34977:67;35041:2;35036:3;34977:67;:::i;:::-;34970:74;;35053:93;35142:3;35053:93;:::i;:::-;35171:2;35166:3;35162:12;35155:19;;34814:366;;;:::o;35186:419::-;35352:4;35390:2;35379:9;35375:18;35367:26;;35439:9;35433:4;35429:20;35425:1;35414:9;35410:17;35403:47;35467:131;35593:4;35467:131;:::i;:::-;35459:139;;35186:419;;;:::o;35611:147::-;35712:11;35749:3;35734:18;;35611:147;;;;:::o;35764:114::-;;:::o;35884:398::-;36043:3;36064:83;36145:1;36140:3;36064:83;:::i;:::-;36057:90;;36156:93;36245:3;36156:93;:::i;:::-;36274:1;36269:3;36265:11;36258:18;;35884:398;;;:::o;36288:379::-;36472:3;36494:147;36637:3;36494:147;:::i;:::-;36487:154;;36658:3;36651:10;;36288:379;;;:::o;36673:442::-;36822:4;36860:2;36849:9;36845:18;36837:26;;36873:71;36941:1;36930:9;36926:17;36917:6;36873:71;:::i;:::-;36954:72;37022:2;37011:9;37007:18;36998:6;36954:72;:::i;:::-;37036;37104:2;37093:9;37089:18;37080:6;37036:72;:::i;:::-;36673:442;;;;;;:::o;37121:180::-;37169:77;37166:1;37159:88;37266:4;37263:1;37256:15;37290:4;37287:1;37280:15;37307:180;37355:77;37352:1;37345:88;37452:4;37449:1;37442:15;37476:4;37473:1;37466:15;37493:143;37550:5;37581:6;37575:13;37566:22;;37597:33;37624:5;37597:33;:::i;:::-;37493:143;;;;:::o;37642:351::-;37712:6;37761:2;37749:9;37740:7;37736:23;37732:32;37729:119;;;37767:79;;:::i;:::-;37729:119;37887:1;37912:64;37968:7;37959:6;37948:9;37944:22;37912:64;:::i;:::-;37902:74;;37858:128;37642:351;;;;:::o;37999:85::-;38044:7;38073:5;38062:16;;37999:85;;;:::o;38090:158::-;38148:9;38181:61;38199:42;38208:32;38234:5;38208:32;:::i;:::-;38199:42;:::i;:::-;38181:61;:::i;:::-;38168:74;;38090:158;;;:::o;38254:147::-;38349:45;38388:5;38349:45;:::i;:::-;38344:3;38337:58;38254:147;;:::o;38407:114::-;38474:6;38508:5;38502:12;38492:22;;38407:114;;;:::o;38527:184::-;38626:11;38660:6;38655:3;38648:19;38700:4;38695:3;38691:14;38676:29;;38527:184;;;;:::o;38717:132::-;38784:4;38807:3;38799:11;;38837:4;38832:3;38828:14;38820:22;;38717:132;;;:::o;38855:108::-;38932:24;38950:5;38932:24;:::i;:::-;38927:3;38920:37;38855:108;;:::o;38969:179::-;39038:10;39059:46;39101:3;39093:6;39059:46;:::i;:::-;39137:4;39132:3;39128:14;39114:28;;38969:179;;;;:::o;39154:113::-;39224:4;39256;39251:3;39247:14;39239:22;;39154:113;;;:::o;39303:732::-;39422:3;39451:54;39499:5;39451:54;:::i;:::-;39521:86;39600:6;39595:3;39521:86;:::i;:::-;39514:93;;39631:56;39681:5;39631:56;:::i;:::-;39710:7;39741:1;39726:284;39751:6;39748:1;39745:13;39726:284;;;39827:6;39821:13;39854:63;39913:3;39898:13;39854:63;:::i;:::-;39847:70;;39940:60;39993:6;39940:60;:::i;:::-;39930:70;;39786:224;39773:1;39770;39766:9;39761:14;;39726:284;;;39730:14;40026:3;40019:10;;39427:608;;;39303:732;;;;:::o;40041:831::-;40304:4;40342:3;40331:9;40327:19;40319:27;;40356:71;40424:1;40413:9;40409:17;40400:6;40356:71;:::i;:::-;40437:80;40513:2;40502:9;40498:18;40489:6;40437:80;:::i;:::-;40564:9;40558:4;40554:20;40549:2;40538:9;40534:18;40527:48;40592:108;40695:4;40686:6;40592:108;:::i;:::-;40584:116;;40710:72;40778:2;40767:9;40763:18;40754:6;40710:72;:::i;:::-;40792:73;40860:3;40849:9;40845:19;40836:6;40792:73;:::i;:::-;40041:831;;;;;;;;:::o;40878:807::-;41127:4;41165:3;41154:9;41150:19;41142:27;;41179:71;41247:1;41236:9;41232:17;41223:6;41179:71;:::i;:::-;41260:72;41328:2;41317:9;41313:18;41304:6;41260:72;:::i;:::-;41342:80;41418:2;41407:9;41403:18;41394:6;41342:80;:::i;:::-;41432;41508:2;41497:9;41493:18;41484:6;41432:80;:::i;:::-;41522:73;41590:3;41579:9;41575:19;41566:6;41522:73;:::i;:::-;41605;41673:3;41662:9;41658:19;41649:6;41605:73;:::i;:::-;40878:807;;;;;;;;;:::o;41691:663::-;41779:6;41787;41795;41844:2;41832:9;41823:7;41819:23;41815:32;41812:119;;;41850:79;;:::i;:::-;41812:119;41970:1;41995:64;42051:7;42042:6;42031:9;42027:22;41995:64;:::i;:::-;41985:74;;41941:128;42108:2;42134:64;42190:7;42181:6;42170:9;42166:22;42134:64;:::i;:::-;42124:74;;42079:129;42247:2;42273:64;42329:7;42320:6;42309:9;42305:22;42273:64;:::i;:::-;42263:74;;42218:129;41691:663;;;;;:::o

Swarm Source

ipfs://6c4799e73db895ab0d559f0eff890632cc45cc5c789263c340d399fa24947e25
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.