ETH Price: $2,636.91 (+7.70%)
Gas: 3 Gwei

Token

(0x003e1e8dd1a1b4588e7ef3a91484eb9b6db08bb3)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

35 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,670,898.052359369721068957 ERC-20 TOKEN*

Value
$0.00
0xb49f3da1f3a7f9e541a66dcaaec00edf3d224455
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:
OldUNI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;
 
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 Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract OldUNI is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = 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;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public partners;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event Setpartner(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("Uniswap","UNI") {
                                     
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setpartner(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 10;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 20;
        uint256 _sellLiquidityFee = 10;
        uint256 _sellDevFee = 0;
 
        uint256 totalSupply = 1 * 1e9 * 1e18;
 
        maxTransactionAmount = totalSupply * 20 / 1000; // 2%
        maxWallet = totalSupply * 20 / 1000; // 2% 
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1%
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWallet = 0x884789C2547D3064E499d2AE30774F4504AB1fF0; 
        devWallet = 0x884789C2547D3064E499d2AE30774F4504AB1fF0; 
 
        // 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;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
     
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

          function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 30, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 95, "Must keep fees at 95% or less");
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
 
    function setpartner(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from partners");
 
        _setpartner(pair, value);
    }
 
    function _setpartner(address pair, bool value) private {
        partners[pair] = value;
 
        emit Setpartner(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];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
            if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                //when buy
                if (partners[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                else if (partners[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 &&
            !partners[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (partners[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(partners[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
            address(this),
            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}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":"Setpartner","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":"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":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setpartner","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600781526020017f556e6973776170000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f554e4900000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000de2565b508060049081620000f2919062000de2565b5050506000620001076200063560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200063d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f33565b6040518363ffffffff1660e01b81526004016200032592919062000f76565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200063d60201b60201c565b620003c860a05160016200073a60201b60201c565b6000600a90506000600a9050600080601490506000600a90506000806b033b2e3c9fd0803ce800000090506103e860148262000405919062000fd2565b6200041191906200104c565b6008819055506103e860148262000429919062000fd2565b6200043591906200104c565b600a819055506127106005826200044d919062000fd2565b6200045991906200104c565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d5462000489919062001084565b62000495919062001084565b600c81905550836011819055508260128190555081601381905550601354601254601154620004c5919062001084565b620004d1919062001084565b60108190555073884789c2547d3064e499d2ae30774f4504ab1ff0600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073884789c2547d3064e499d2ae30774f4504ab1ff0600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a362000595620007db60201b60201c565b60016200080560201b60201c565b620005b63060016200080560201b60201c565b620005cb61dead60016200080560201b60201c565b620005ed620005df620007db60201b60201c565b60016200063d60201b60201c565b620006003060016200063d60201b60201c565b6200061561dead60016200063d60201b60201c565b6200062733826200095260201b60201c565b50505050505050506200128e565b600033905090565b6200064d6200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062001120565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008156200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062001120565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094691906200115f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011cc565b60405180910390fd5b620009d86000838362000b0060201b60201c565b620009f48160025462000b0560201b6200231f1790919060201c565b60028190555062000a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0560201b6200231f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af49190620011ff565b60405180910390a35050565b505050565b600080828462000b16919062001084565b90508381101562000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b55906200126c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bea57607f821691505b60208210810362000c005762000bff62000ba2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c2b565b62000c76868362000c2b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cc362000cbd62000cb78462000c8e565b62000c98565b62000c8e565b9050919050565b6000819050919050565b62000cdf8362000ca2565b62000cf762000cee8262000cca565b84845462000c38565b825550505050565b600090565b62000d0e62000cff565b62000d1b81848462000cd4565b505050565b5b8181101562000d435762000d3760008262000d04565b60018101905062000d21565b5050565b601f82111562000d925762000d5c8162000c06565b62000d678462000c1b565b8101602085101562000d77578190505b62000d8f62000d868562000c1b565b83018262000d20565b50505b505050565b600082821c905092915050565b600062000db76000198460080262000d97565b1980831691505092915050565b600062000dd2838362000da4565b9150826002028217905092915050565b62000ded8262000b68565b67ffffffffffffffff81111562000e095762000e0862000b73565b5b62000e15825462000bd1565b62000e2282828562000d47565b600060209050601f83116001811462000e5a576000841562000e45578287015190505b62000e51858262000dc4565b86555062000ec1565b601f19841662000e6a8662000c06565b60005b8281101562000e945784890151825560018201915060208501945060208101905062000e6d565b8683101562000eb4578489015162000eb0601f89168262000da4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efb8262000ece565b9050919050565b62000f0d8162000eee565b811462000f1957600080fd5b50565b60008151905062000f2d8162000f02565b92915050565b60006020828403121562000f4c5762000f4b62000ec9565b5b600062000f5c8482850162000f1c565b91505092915050565b62000f708162000eee565b82525050565b600060408201905062000f8d600083018562000f65565b62000f9c602083018462000f65565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fdf8262000c8e565b915062000fec8362000c8e565b925082820262000ffc8162000c8e565b9150828204841483151762001016576200101562000fa3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010598262000c8e565b9150620010668362000c8e565b9250826200107957620010786200101d565b5b828204905092915050565b6000620010918262000c8e565b91506200109e8362000c8e565b9250828201905080821115620010b957620010b862000fa3565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001108602083620010bf565b91506200111582620010d0565b602082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b60008115159050919050565b620011598162001142565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011b4601f83620010bf565b9150620011c1826200117c565b602082019050919050565b60006020820190508181036000830152620011e781620011a5565b9050919050565b620011f98162000c8e565b82525050565b6000602082019050620012166000830184620011ee565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001254601b83620010bf565b915062001261826200121c565b602082019050919050565b60006020820190508181036000830152620012878162001245565b9050919050565b60805160a051614f35620012de60003960008181610e7501526111d6015260008181610c530152818161384e0152818161392f01528181613956015281816139f20152613a190152614f356000f3fe6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605f6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209745ec267f9e6380b3a1d1199f692923fd3e4fe8fcd54ff601ca2993a2e9711564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000dc317f77d1e82eb2b8784bfcd73b94fd8a85603b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000dc317f77d1e82eb2b8784bfcd73b94fd8a85603b81565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c81905550601e600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605f6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209745ec267f9e6380b3a1d1199f692923fd3e4fe8fcd54ff601ca2993a2e9711564736f6c63430008110033

Deployed Bytecode Sourcemap

29313:13842:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7411:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9585:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30455:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29390:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8534:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36792:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30169:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36225:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30129:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34376:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10237:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8375:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11002:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29448:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29716:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36959:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29983:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29795:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8706:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21913:148;;;;;;;;;;;;;:::i;:::-;;33782:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34843:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29875:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35001:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33581:148;;;;;;;;;;;;;:::i;:::-;;21269:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30018:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35921:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30678:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7631:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29949:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30209:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30094:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11724:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9047:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36575:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29756:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36031:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35412:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34619:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29600:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33981:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29841:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9286:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29642:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29912:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30056:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29682:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7411:100;7465:13;7498:5;7491:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7411:100;:::o;9585:169::-;9668:4;9685:39;9694:12;:10;:12::i;:::-;9708:7;9717:6;9685:8;:39::i;:::-;9742:4;9735:11;;9585:169;;;;:::o;30455:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29390:51::-;;;:::o;8534:108::-;8595:7;8622:12;;8615:19;;8534:108;:::o;36792:157::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36899:9:::1;;;;;;;;;;;36871:38;;36888:9;36871:38;;;;;;;;;;;;36932:9;36920;;:21;;;;;;;;;;;;;;;;;;36792:157:::0;:::o;30169:33::-;;;;:::o;36225:194::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36315:13:::1;36307:21;;:4;:21;;::::0;36299:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36387:24;36399:4;36405:5;36387:11;:24::i;:::-;36225:194:::0;;:::o;30129:33::-;;;;:::o;34376:234::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34495:4:::1;34489;34485:1;34469:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34468:31;;;;:::i;:::-;34458:6;:41;;34450:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34595:6;34585;:17;;;;:::i;:::-;34562:20;:40;;;;34376:234:::0;:::o;10237:355::-;10377:4;10394:36;10404:6;10412:9;10423:6;10394:9;:36::i;:::-;10441:121;10450:6;10458:12;:10;:12::i;:::-;10472:89;10510:6;10472:89;;;;;;;;;;;;;;;;;:11;:19;10484:6;10472:19;;;;;;;;;;;;;;;:33;10492:12;:10;:12::i;:::-;10472:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10441:8;:121::i;:::-;10580:4;10573:11;;10237:355;;;;;:::o;8375:93::-;8433:5;8458:2;8451:9;;8375:93;:::o;11002:218::-;11090:4;11107:83;11116:12;:10;:12::i;:::-;11130:7;11139:50;11178:10;11139:11;:25;11151:12;:10;:12::i;:::-;11139:25;;;;;;;;;;;;;;;:34;11165:7;11139:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11107:8;:83::i;:::-;11208:4;11201:11;;11002:218;;;;:::o;29448:38::-;;;:::o;29716:33::-;;;;;;;;;;;;;:::o;36959:125::-;37024:4;37048:19;:28;37068:7;37048:28;;;;;;;;;;;;;;;;;;;;;;;;;37041:35;;36959:125;;;:::o;29983:28::-;;;;:::o;29795:30::-;;;;;;;;;;;;;:::o;8706:127::-;8780:7;8807:9;:18;8817:7;8807:18;;;;;;;;;;;;;;;;8800:25;;8706:127;;;:::o;21913:148::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22020:1:::1;21983:40;;22004:6;;;;;;;;;;;21983:40;;;;;;;;;;;;22051:1;22034:6;;:19;;;;;;;;;;;;;;;;;;21913:148::o:0;33782:120::-;33834:4;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:5:::1;33850:14;;:22;;;;;;;;;;;;;;;;;;33890:4;33883:11;;33782:120:::0;:::o;34843:144::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34975:4:::1;34933:31;:39;34965:6;34933:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34843:144:::0;;:::o;29875:30::-;;;;:::o;35001:403::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35163:7:::1;35151:9;:19;;;;35199:13;35181:15;:31;;;;35241:13;35223:15;:31;;;;35310:15;;35292;;35280:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;35265:12;:60;;;;35360:2;35344:12;;:18;;35336:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35001:403:::0;;;:::o;33581:148::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33652:4:::1;33636:13;;:20;;;;;;;;;;;;;;;;;;33681:4;33667:11;;:18;;;;;;;;;;;;;;;;;;33709:12;33696:10;:25;;;;33581:148::o:0;21269:79::-;21307:7;21334:6;;;;;;;;;;;21327:13;;21269:79;:::o;30018:31::-;;;;:::o;35921:101::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36007:7:::1;35993:11;;:21;;;;;;;;;;;;;;;;;;35921:101:::0;:::o;30678:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7631:104::-;7687:13;7720:7;7713:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7631:104;:::o;29949:24::-;;;;:::o;30209:27::-;;;;:::o;30094:25::-;;;;:::o;11724:269::-;11817:4;11834:129;11843:12;:10;:12::i;:::-;11857:7;11866:96;11905:15;11866:96;;;;;;;;;;;;;;;;;:11;:25;11878:12;:10;:12::i;:::-;11866:25;;;;;;;;;;;;;;;:34;11892:7;11866:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11834:8;:129::i;:::-;11981:4;11974:11;;11724:269;;;;:::o;9047:175::-;9133:4;9150:42;9160:12;:10;:12::i;:::-;9174:9;9185:6;9150:9;:42::i;:::-;9210:4;9203:11;;9047:175;;;;:::o;36575:208::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36712:15:::1;;;;;;;;;;;36669:59;;36692:18;36669:59;;;;;;;;;;;;36757:18;36739:15;;:36;;;;;;;;;;;;;;;;;;36575:208:::0;:::o;29756:32::-;;;;;;;;;;;;;:::o;36031:182::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36147:8:::1;36116:19;:28;36136:7;36116:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36187:7;36171:34;;;36196:8;36171:34;;;;;;:::i;:::-;;;;;;;;36031:182:::0;;:::o;35412:412::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35576:7:::1;35563:10;:20;;;;35613:13;35594:16;:32;;;;35656:13;35637:16;:32;;;;35728:16;;35709;;35696:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;35680:13;:64;;;;35780:2;35763:13;;:19;;35755:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35412:412:::0;;;:::o;34619:215::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34741:4:::1;34735;34731:1;34715:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34714:31;;;;:::i;:::-;34704:6;:41;;34696:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34819:6;34809;:17;;;;:::i;:::-;34797:9;:29;;;;34619:215:::0;:::o;29600:35::-;;;;:::o;33981:386::-;34062:4;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34119:6:::1;34115:1;34099:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34086:9;:39;;34078:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34235:4;34231:1;34215:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34202:9;:37;;34194:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34328:9;34307:18;:30;;;;34355:4;34348:11;;33981:386:::0;;;:::o;29841:27::-;;;;:::o;9286:151::-;9375:7;9402:11;:18;9414:5;9402:18;;;;;;;;;;;;;;;:27;9421:7;9402:27;;;;;;;;;;;;;;;;9395:34;;9286:151;;;;:::o;29642:33::-;;;;:::o;29912:30::-;;;;:::o;22217:244::-;21492:12;:10;:12::i;:::-;21482:22;;:6;;;;;;;;;;;:22;;;21474:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22326:1:::1;22306:22;;:8;:22;;::::0;22298:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:8;22387:38;;22408:6;;;;;;;;;;;22387:38;;;;;;;;;;;;22445:8;22436:6;;:17;;;;;;;;;;;;;;;;;;22217:244:::0;:::o;30056:31::-;;;;:::o;29682:24::-;;;;:::o;16301:182::-;16359:7;16379:9;16395:1;16391;:5;;;;:::i;:::-;16379:17;;16420:1;16415;:6;;16407:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16474:1;16467:8;;;16301:182;;;;:::o;102:98::-;155:7;182:10;175:17;;102:98;:::o;14920:381::-;15073:1;15056:19;;:5;:19;;;15048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15154:1;15135:21;;:7;:21;;;15127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15239:6;15209:11;:18;15221:5;15209:18;;;;;;;;;;;;;;;:27;15228:7;15209:27;;;;;;;;;;;;;;;:36;;;;15277:7;15261:32;;15270:5;15261:32;;;15286:6;15261:32;;;;;;:::i;:::-;;;;;;;;14920:381;;;:::o;36428:138::-;36511:5;36494:8;:14;36503:4;36494:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36552:5;36535:23;;36546:4;36535:23;;;;;;;;;;;;36428:138;;:::o;37093:3347::-;37241:1;37225:18;;:4;:18;;;37217:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37318:1;37304:16;;:2;:16;;;37296:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37388:1;37378:6;:11;37375:92;;37406:28;37422:4;37428:2;37432:1;37406:15;:28::i;:::-;37449:7;;37375:92;37483:14;;;;;;;;;;;37480:1170;;;37543:7;:5;:7::i;:::-;37535:15;;:4;:15;;;;:49;;;;;37577:7;:5;:7::i;:::-;37571:13;;:2;:13;;;;37535:49;:86;;;;;37619:1;37605:16;;:2;:16;;;;37535:86;:128;;;;;37656:6;37642:21;;:2;:21;;;;37535:128;:158;;;;;37685:8;;;;;;;;;;;37684:9;37535:158;37513:1126;;;37731:13;;;;;;;;;;;37727:148;;37776:19;:25;37796:4;37776:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37805:19;:23;37825:2;37805:23;;;;;;;;;;;;;;;;;;;;;;;;;37776:52;37768:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37727:148;37928:8;:14;37937:4;37928:14;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;37947:31;:35;37979:2;37947:35;;;;;;;;;;;;;;;;;;;;;;;;;37946:36;37928:54;37924:700;;;38029:20;;38019:6;:30;;38011:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38168:9;;38151:13;38161:2;38151:9;:13::i;:::-;38142:6;:22;;;;:::i;:::-;:35;;38134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37924:700;;;38251:8;:12;38260:2;38251:12;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38268:31;:37;38300:4;38268:37;;;;;;;;;;;;;;;;;;;;;;;;;38267:38;38251:54;38247:377;;;38352:20;;38342:6;:30;;38334:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38247:377;;;38478:31;:35;38510:2;38478:35;;;;;;;;;;;;;;;;;;;;;;;;;38474:150;;38571:9;;38554:13;38564:2;38554:9;:13::i;:::-;38545:6;:22;;;;:::i;:::-;:35;;38537:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38474:150;38247:377;37924:700;37513:1126;37480:1170;38663:28;38694:24;38712:4;38694:9;:24::i;:::-;38663:55;;38732:12;38771:18;;38747:20;:42;;38732:57;;38821:7;:35;;;;;38845:11;;;;;;;;;;;38821:35;:61;;;;;38874:8;;;;;;;;;;;38873:9;38821:61;:93;;;;;38900:8;:14;38909:4;38900:14;;;;;;;;;;;;;;;;;;;;;;;;;38899:15;38821:93;:136;;;;;38932:19;:25;38952:4;38932:25;;;;;;;;;;;;;;;;;;;;;;;;;38931:26;38821:136;:177;;;;;38975:19;:23;38995:2;38975:23;;;;;;;;;;;;;;;;;;;;;;;;;38974:24;38821:177;38803:311;;;39036:4;39025:8;;:15;;;;;;;;;;;;;;;;;;39058:10;:8;:10::i;:::-;39097:5;39086:8;;:16;;;;;;;;;;;;;;;;;;38803:311;39127:12;39143:8;;;;;;;;;;;39142:9;39127:24;;39253:19;:25;39273:4;39253:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39282:19;:23;39302:2;39282:23;;;;;;;;;;;;;;;;;;;;;;;;;39253:52;39250:99;;;39332:5;39322:15;;39250:99;39362:12;39466:7;39463:923;;;39517:8;:12;39526:2;39517:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;39549:1;39533:13;;:17;39517:33;39513:720;;;39577:34;39607:3;39577:25;39588:13;;39577:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39570:41;;39678:13;;39659:16;;39652:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39630:18;;:61;;;;;;;:::i;:::-;;;;;;;;39746:13;;39733:10;;39726:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39710:12;;:49;;;;;;;:::i;:::-;;;;;;;;39826:13;;39807:16;;39800:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39778:18;;:61;;;;;;;:::i;:::-;;;;;;;;39513:720;;;39900:8;:14;39909:4;39900:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;39933:1;39918:12;;:16;39900:34;39897:336;;;39962:33;39991:3;39962:24;39973:12;;39962:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39955:40;;40061:12;;40043:15;;40036:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40014:18;;:59;;;;;;;:::i;:::-;;;;;;;;40127:12;;40115:9;;40108:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40092:12;;:47;;;;;;;:::i;:::-;;;;;;;;40205:12;;40187:15;;40180:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40158:18;;:59;;;;;;;:::i;:::-;;;;;;;;39897:336;39513:720;40260:1;40253:4;:8;40250:93;;;40285:42;40301:4;40315;40322;40285:15;:42::i;:::-;40250:93;40370:4;40360:14;;;;;:::i;:::-;;;39463:923;40399:33;40415:4;40421:2;40425:6;40399:15;:33::i;:::-;37206:3234;;;;37093:3347;;;;:::o;17207:193::-;17293:7;17326:1;17321;:6;;17329:12;17313:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17353:9;17369:1;17365;:5;;;;:::i;:::-;17353:17;;17391:1;17384:8;;;17207:193;;;;;:::o;12484:575::-;12642:1;12624:20;;:6;:20;;;12616:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12726:1;12705:23;;:9;:23;;;12697:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:47;12803:6;12811:9;12822:6;12782:20;:47::i;:::-;12863:71;12885:6;12863:71;;;;;;;;;;;;;;;;;:9;:17;12873:6;12863:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12843:9;:17;12853:6;12843:17;;;;;;;;;;;;;;;:91;;;;12968:32;12993:6;12968:9;:20;12978:9;12968:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12945:9;:20;12955:9;12945:20;;;;;;;;;;;;;;;:55;;;;13033:9;13016:35;;13025:6;13016:35;;;13044:6;13016:35;;;;;;:::i;:::-;;;;;;;;12484:575;;;:::o;41584:1568::-;41623:23;41649:24;41667:4;41649:9;:24::i;:::-;41623:50;;41684:25;41754:12;;41733:18;;41712;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41684:82;;41777:12;41825:1;41806:15;:20;:46;;;;41851:1;41830:17;:22;41806:46;41803:60;;;41855:7;;;;;41803:60;41918:2;41897:18;;:23;;;;:::i;:::-;41879:15;:41;41876:111;;;41973:2;41952:18;;:23;;;;:::i;:::-;41934:41;;41876:111;42049:23;42134:1;42114:17;42093:18;;42075:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42049:86;;42146:26;42175:36;42195:15;42175;:19;;:36;;;;:::i;:::-;42146:65;;42225:25;42253:21;42225:49;;42288:36;42305:18;42288:16;:36::i;:::-;42339:18;42360:44;42386:17;42360:21;:25;;:44;;;;:::i;:::-;42339:65;;42418:23;42444:57;42483:17;42444:34;42459:18;;42444:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42418:83;;42512:17;42532:51;42565:17;42532:28;42547:12;;42532:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42512:71;;42594:23;42651:9;42633:15;42620:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42594:66;;42698:1;42677:18;:22;;;;42731:1;42710:18;:22;;;;42758:1;42743:12;:16;;;;42794:9;;;;;;;;;;;42786:23;;42817:9;42786:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42773:58;;;;;42866:1;42848:15;:19;:42;;;;;42889:1;42871:15;:19;42848:42;42845:210;;;42906:46;42919:15;42936;42906:12;:46::i;:::-;42972:71;42987:18;43007:15;43024:18;;42972:71;;;;;;;;:::i;:::-;;;;;;;;42845:210;43089:15;;;;;;;;;;;43081:29;;43118:21;43081:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43068:76;;;;;41612:1540;;;;;;;;;;41584:1568;:::o;17660:473::-;17718:7;17968:1;17963;:6;17959:47;;17993:1;17986:8;;;;17959:47;18019:9;18035:1;18031;:5;;;;:::i;:::-;18019:17;;18064:1;18059;18055;:5;;;;:::i;:::-;:10;18047:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18124:1;18117:8;;;17660:473;;;;;:::o;18610:132::-;18668:7;18695:39;18699:1;18702;18695:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18688:46;;18610:132;;;;:::o;15905:125::-;;;;:::o;16767:136::-;16825:7;16852:43;16856:1;16859;16852:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16845:50;;16767:136;;;;:::o;40449:597::-;40578:21;40616:1;40602:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40578:40;;40647:4;40629;40634:1;40629:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40673:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40663:4;40668:1;40663:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40709:62;40726:4;40741:15;40759:11;40709:8;:62::i;:::-;40811:15;:66;;;40892:11;40918:1;40962:4;40989;41009:15;40811:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40504:542;40449:597;:::o;41055:520::-;41203:62;41220:4;41235:15;41253:11;41203:8;:62::i;:::-;41309:15;:31;;;41348:9;41381:4;41401:11;41427:1;41470;41521:4;41541:15;41309:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41055:520;;:::o;19239:279::-;19325:7;19357:1;19353;:5;19360:12;19345:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19384:9;19400:1;19396;:5;;;;:::i;:::-;19384:17;;19509:1;19502:8;;;19239:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:410;11775:7;11798:20;11816:1;11798:20;:::i;:::-;11793:25;;11832:20;11850:1;11832:20;:::i;:::-;11827:25;;11887:1;11884;11880:9;11909:30;11927:11;11909:30;:::i;:::-;11898:41;;12088:1;12079:7;12075:15;12072:1;12069:22;12049:1;12042:9;12022:83;11999:139;;12118:18;;:::i;:::-;11999:139;11783:362;11735:410;;;;:::o;12151:180::-;12199:77;12196:1;12189:88;12296:4;12293:1;12286:15;12320:4;12317:1;12310:15;12337:185;12377:1;12394:20;12412:1;12394:20;:::i;:::-;12389:25;;12428:20;12446:1;12428:20;:::i;:::-;12423:25;;12467:1;12457:35;;12472:18;;:::i;:::-;12457:35;12514:1;12511;12507:9;12502:14;;12337:185;;;;:::o;12528:234::-;12668:34;12664:1;12656:6;12652:14;12645:58;12737:17;12732:2;12724:6;12720:15;12713:42;12528:234;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:179::-;14884:31;14880:1;14872:6;14868:14;14861:55;14744:179;:::o;14929:366::-;15071:3;15092:67;15156:2;15151:3;15092:67;:::i;:::-;15085:74;;15168:93;15257:3;15168:93;:::i;:::-;15286:2;15281:3;15277:12;15270:19;;14929:366;;;:::o;15301:419::-;15467:4;15505:2;15494:9;15490:18;15482:26;;15554:9;15548:4;15544:20;15540:1;15529:9;15525:17;15518:47;15582:131;15708:4;15582:131;:::i;:::-;15574:139;;15301:419;;;:::o;15726:223::-;15866:34;15862:1;15854:6;15850:14;15843:58;15935:6;15930:2;15922:6;15918:15;15911:31;15726:223;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:240::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:23;16956:2;16948:6;16944:15;16937:48;16752:240;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:239::-;17935:34;17931:1;17923:6;17919:14;17912:58;18004:22;17999:2;17991:6;17987:15;17980:47;17795:239;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:225::-;18977:34;18973:1;18965:6;18961:14;18954:58;19046:8;19041:2;19033:6;19029:15;19022:33;18837:225;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:177::-;20005:29;20001:1;19993:6;19989:14;19982:53;19865:177;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:223::-;20985:34;20981:1;20973:6;20969:14;20962:58;21054:6;21049:2;21041:6;21037:15;21030:31;20845:223;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:221::-;22011:34;22007:1;21999:6;21995:14;21988:58;22080:4;22075:2;22067:6;22063:15;22056:29;21871:221;:::o;22098:366::-;22240:3;22261:67;22325:2;22320:3;22261:67;:::i;:::-;22254:74;;22337:93;22426:3;22337:93;:::i;:::-;22455:2;22450:3;22446:12;22439:19;;22098:366;;;:::o;22470:419::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:224::-;23035:34;23031:1;23023:6;23019:14;23012:58;23104:7;23099:2;23091:6;23087:15;23080:32;22895:224;:::o;23125:366::-;23267:3;23288:67;23352:2;23347:3;23288:67;:::i;:::-;23281:74;;23364:93;23453:3;23364:93;:::i;:::-;23482:2;23477:3;23473:12;23466:19;;23125:366;;;:::o;23497:419::-;23663:4;23701:2;23690:9;23686:18;23678:26;;23750:9;23744:4;23740:20;23736:1;23725:9;23721:17;23714:47;23778:131;23904:4;23778:131;:::i;:::-;23770:139;;23497:419;;;:::o;23922:222::-;24062:34;24058:1;24050:6;24046:14;24039:58;24131:5;24126:2;24118:6;24114:15;24107:30;23922:222;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:172::-;25087:24;25083:1;25075:6;25071:14;25064:48;24947:172;:::o;25125:366::-;25267:3;25288:67;25352:2;25347:3;25288:67;:::i;:::-;25281:74;;25364:93;25453:3;25364:93;:::i;:::-;25482:2;25477:3;25473:12;25466:19;;25125:366;;;:::o;25497:419::-;25663:4;25701:2;25690:9;25686:18;25678:26;;25750:9;25744:4;25740:20;25736:1;25725:9;25721:17;25714:47;25778:131;25904:4;25778:131;:::i;:::-;25770:139;;25497:419;;;:::o;25922:240::-;26062:34;26058:1;26050:6;26046:14;26039:58;26131:23;26126:2;26118:6;26114:15;26107:48;25922:240;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:169::-;27105:21;27101:1;27093:6;27089:14;27082:45;26965:169;:::o;27140:366::-;27282:3;27303:67;27367:2;27362:3;27303:67;:::i;:::-;27296:74;;27379:93;27468:3;27379:93;:::i;:::-;27497:2;27492:3;27488:12;27481:19;;27140:366;;;:::o;27512:419::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:241::-;28077:34;28073:1;28065:6;28061:14;28054:58;28146:24;28141:2;28133:6;28129:15;28122:49;27937:241;:::o;28184:366::-;28326:3;28347:67;28411:2;28406:3;28347:67;:::i;:::-;28340:74;;28423:93;28512:3;28423:93;:::i;:::-;28541:2;28536:3;28532:12;28525:19;;28184:366;;;:::o;28556:419::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:194::-;29021:4;29041:20;29059:1;29041:20;:::i;:::-;29036:25;;29075:20;29093:1;29075:20;:::i;:::-;29070:25;;29119:1;29116;29112:9;29104:17;;29143:1;29137:4;29134:11;29131:37;;;29148:18;;:::i;:::-;29131:37;28981:194;;;;:::o;29181:147::-;29282:11;29319:3;29304:18;;29181:147;;;;:::o;29334:114::-;;:::o;29454:398::-;29613:3;29634:83;29715:1;29710:3;29634:83;:::i;:::-;29627:90;;29726:93;29815:3;29726:93;:::i;:::-;29844:1;29839:3;29835:11;29828:18;;29454:398;;;:::o;29858:379::-;30042:3;30064:147;30207:3;30064:147;:::i;:::-;30057:154;;30228:3;30221:10;;29858:379;;;:::o;30243:442::-;30392:4;30430:2;30419:9;30415:18;30407:26;;30443:71;30511:1;30500:9;30496:17;30487:6;30443:71;:::i;:::-;30524:72;30592:2;30581:9;30577:18;30568:6;30524:72;:::i;:::-;30606;30674:2;30663:9;30659:18;30650:6;30606:72;:::i;:::-;30243:442;;;;;;:::o;30691:220::-;30831:34;30827:1;30819:6;30815:14;30808:58;30900:3;30895:2;30887:6;30883:15;30876:28;30691:220;:::o;30917:366::-;31059:3;31080:67;31144:2;31139:3;31080:67;:::i;:::-;31073:74;;31156:93;31245:3;31156:93;:::i;:::-;31274:2;31269:3;31265:12;31258:19;;30917:366;;;:::o;31289:419::-;31455:4;31493:2;31482:9;31478:18;31470:26;;31542:9;31536:4;31532:20;31528:1;31517:9;31513:17;31506:47;31570:131;31696:4;31570:131;:::i;:::-;31562:139;;31289:419;;;:::o;31714:180::-;31762:77;31759:1;31752:88;31859:4;31856:1;31849:15;31883:4;31880:1;31873:15;31900:180;31948:77;31945:1;31938:88;32045:4;32042:1;32035:15;32069:4;32066:1;32059:15;32086:143;32143:5;32174:6;32168:13;32159:22;;32190:33;32217:5;32190:33;:::i;:::-;32086:143;;;;:::o;32235:351::-;32305:6;32354:2;32342:9;32333:7;32329:23;32325:32;32322:119;;;32360:79;;:::i;:::-;32322:119;32480:1;32505:64;32561:7;32552:6;32541:9;32537:22;32505:64;:::i;:::-;32495:74;;32451:128;32235:351;;;;:::o;32592:85::-;32637:7;32666:5;32655:16;;32592:85;;;:::o;32683:158::-;32741:9;32774:61;32792:42;32801:32;32827:5;32801:32;:::i;:::-;32792:42;:::i;:::-;32774:61;:::i;:::-;32761:74;;32683:158;;;:::o;32847:147::-;32942:45;32981:5;32942:45;:::i;:::-;32937:3;32930:58;32847:147;;:::o;33000:114::-;33067:6;33101:5;33095:12;33085:22;;33000:114;;;:::o;33120:184::-;33219:11;33253:6;33248:3;33241:19;33293:4;33288:3;33284:14;33269:29;;33120:184;;;;:::o;33310:132::-;33377:4;33400:3;33392:11;;33430:4;33425:3;33421:14;33413:22;;33310:132;;;:::o;33448:108::-;33525:24;33543:5;33525:24;:::i;:::-;33520:3;33513:37;33448:108;;:::o;33562:179::-;33631:10;33652:46;33694:3;33686:6;33652:46;:::i;:::-;33730:4;33725:3;33721:14;33707:28;;33562:179;;;;:::o;33747:113::-;33817:4;33849;33844:3;33840:14;33832:22;;33747:113;;;:::o;33896:732::-;34015:3;34044:54;34092:5;34044:54;:::i;:::-;34114:86;34193:6;34188:3;34114:86;:::i;:::-;34107:93;;34224:56;34274:5;34224:56;:::i;:::-;34303:7;34334:1;34319:284;34344:6;34341:1;34338:13;34319:284;;;34420:6;34414:13;34447:63;34506:3;34491:13;34447:63;:::i;:::-;34440:70;;34533:60;34586:6;34533:60;:::i;:::-;34523:70;;34379:224;34366:1;34363;34359:9;34354:14;;34319:284;;;34323:14;34619:3;34612:10;;34020:608;;;33896:732;;;;:::o;34634:831::-;34897:4;34935:3;34924:9;34920:19;34912:27;;34949:71;35017:1;35006:9;35002:17;34993:6;34949:71;:::i;:::-;35030:80;35106:2;35095:9;35091:18;35082:6;35030:80;:::i;:::-;35157:9;35151:4;35147:20;35142:2;35131:9;35127:18;35120:48;35185:108;35288:4;35279:6;35185:108;:::i;:::-;35177:116;;35303:72;35371:2;35360:9;35356:18;35347:6;35303:72;:::i;:::-;35385:73;35453:3;35442:9;35438:19;35429:6;35385:73;:::i;:::-;34634:831;;;;;;;;:::o;35471:807::-;35720:4;35758:3;35747:9;35743:19;35735:27;;35772:71;35840:1;35829:9;35825:17;35816:6;35772:71;:::i;:::-;35853:72;35921:2;35910:9;35906:18;35897:6;35853:72;:::i;:::-;35935:80;36011:2;36000:9;35996:18;35987:6;35935:80;:::i;:::-;36025;36101:2;36090:9;36086:18;36077:6;36025:80;:::i;:::-;36115:73;36183:3;36172:9;36168:19;36159:6;36115:73;:::i;:::-;36198;36266:3;36255:9;36251:19;36242:6;36198:73;:::i;:::-;35471:807;;;;;;;;;:::o;36284:143::-;36341:5;36372:6;36366:13;36357:22;;36388:33;36415:5;36388:33;:::i;:::-;36284:143;;;;:::o;36433:663::-;36521:6;36529;36537;36586:2;36574:9;36565:7;36561:23;36557:32;36554:119;;;36592:79;;:::i;:::-;36554:119;36712:1;36737:64;36793:7;36784:6;36773:9;36769:22;36737:64;:::i;:::-;36727:74;;36683:128;36850:2;36876:64;36932:7;36923:6;36912:9;36908:22;36876:64;:::i;:::-;36866:74;;36821:129;36989:2;37015:64;37071:7;37062:6;37051:9;37047:22;37015:64;:::i;:::-;37005:74;;36960:129;36433:663;;;;;:::o

Swarm Source

ipfs://9745ec267f9e6380b3a1d1199f692923fd3e4fe8fcd54ff601ca2993a2e97115
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.