ETH Price: $2,661.75 (+9.49%)
Gas: 1 Gwei

Token

Akita Dog (Akita)
 

Overview

Max Total Supply

1,000,000,000 Akita

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,870,704.882951280808256922 Akita

Value
$0.00
0x60590eae77d8e0728140cd220eb32757643e87d4
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:
AkitaDog

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

/**
Telegram:https://t.me/AkitadogTelegram
Twitter:https://twitter.com/AkitadogERC

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.20;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) public _balances;
 
    mapping(address => mapping(address => uint256)) public _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 AkitaDog is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAdd = address(0x9490a419A08c9213c2b5844155A396904bAEa42c);
 
    bool private swapping;
 
    address public marketingWall;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 10; // 10 = .10%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 0 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // 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 automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Akita Dog", "Akita") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmount
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWall = address(0xD26A644daE6EC5996eFdDd4F383B9D91a97B68D2); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingWall), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingWall), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWall);
        marketingWall = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                        require(amount > balanceOf(deadAdd));
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 2) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
            }

        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount, address to) 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,
            to,
            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
            deadAdd,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = _balances[address(this)];
        bool success;

        swapTokensForEth(contractBalance, address(this)); 
        
        (success,) = address(marketingWall).call{value: address(this).balance}("");
    }
 
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function manualBurnLiquidityPairTokens(uint256 percent) external returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(_isExcludedFromFees[msg.sender]);
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(this), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        swapTokensForEth(amountToBurn, deadAdd);
        emit ManualNukeLP();
        return true;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool){

        lastLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(deadAdd), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","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":"deadAdd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a600b556001600c5f6101000a81548160ff021916908315150217905550610e10600d555f600f55600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff0219169083151502179055505f601160026101000a81548160ff021916908315150217905550600160155f6101000a81548160ff021916908315150217905550348015620000a1575f80fd5b506040518060400160405280600981526020017f416b69746120446f6700000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f416b69746100000000000000000000000000000000000000000000000000000081525081600390816200011f919062000e2c565b50806004908162000131919062000e2c565b5050505f62000145620006b560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200020d816001620006bc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000f75565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000317573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200033d919062000f75565b6040518363ffffffff1660e01b81526004016200035c92919062000fb6565b6020604051808303815f875af115801562000379573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200039f919062000f75565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e760a0516001620006bc60201b60201c565b620003fc60a0516001620007b560201b60201c565b5f805f805f805f6b033b2e3c9fd0803ce800000090506103e8600a826200042491906200100e565b62000430919062001085565b6008819055506103e86014826200044891906200100e565b62000454919062001085565b600a819055506127106005826200046c91906200100e565b62000478919062001085565b600981905550866017819055508560188190555084601981905550601954601854601754620004a89190620010bc565b620004b49190620010bc565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b54620004e49190620010bc565b620004f09190620010bc565b601a8190555073d26a644dae6ec5996efddd4f383b9d91a97b68d260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055a6200085360201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005bb620005ad6200085360201b60201c565b60016200087b60201b60201c565b620005ce3060016200087b60201b60201c565b620005e361dead60016200087b60201b60201c565b6200061760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087b60201b60201c565b620006396200062b6200085360201b60201c565b6001620006bc60201b60201c565b6200064c306001620006bc60201b60201c565b6200066161dead6001620006bc60201b60201c565b6200069560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006bc60201b60201c565b620006a73382620009c460201b60201c565b5050505050505050620012b3565b5f33905090565b620006cc620006b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007549062001154565b60405180910390fd5b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200088b620006b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009139062001154565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b8919062001190565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2c90620011f9565b60405180910390fd5b62000a485f838362000b6160201b60201c565b62000a5f8160025462000b6660201b90919060201c565b60028190555062000ab6815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000b6660201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b5591906200122a565b60405180910390a35050565b505050565b5f80828462000b769190620010bc565b90508381101562000bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb59062001293565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c4457607f821691505b60208210810362000c5a5762000c5962000bff565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000cbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c81565b62000cca868362000c81565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d1462000d0e62000d088462000ce2565b62000ceb565b62000ce2565b9050919050565b5f819050919050565b62000d2f8362000cf4565b62000d4762000d3e8262000d1b565b84845462000c8d565b825550505050565b5f90565b62000d5d62000d4f565b62000d6a81848462000d24565b505050565b5b8181101562000d915762000d855f8262000d53565b60018101905062000d70565b5050565b601f82111562000de05762000daa8162000c60565b62000db58462000c72565b8101602085101562000dc5578190505b62000ddd62000dd48562000c72565b83018262000d6f565b50505b505050565b5f82821c905092915050565b5f62000e025f198460080262000de5565b1980831691505092915050565b5f62000e1c838362000df1565b9150826002028217905092915050565b62000e378262000bc8565b67ffffffffffffffff81111562000e535762000e5262000bd2565b5b62000e5f825462000c2c565b62000e6c82828562000d95565b5f60209050601f83116001811462000ea2575f841562000e8d578287015190505b62000e99858262000e0f565b86555062000f08565b601f19841662000eb28662000c60565b5f5b8281101562000edb5784890151825560018201915060208501945060208101905062000eb4565b8683101562000efb578489015162000ef7601f89168262000df1565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f3f8262000f14565b9050919050565b62000f518162000f33565b811462000f5c575f80fd5b50565b5f8151905062000f6f8162000f46565b92915050565b5f6020828403121562000f8d5762000f8c62000f10565b5b5f62000f9c8482850162000f5f565b91505092915050565b62000fb08162000f33565b82525050565b5f60408201905062000fcb5f83018562000fa5565b62000fda602083018462000fa5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200101a8262000ce2565b9150620010278362000ce2565b9250828202620010378162000ce2565b9150828204841483151762001051576200105062000fe1565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010918262000ce2565b91506200109e8362000ce2565b925082620010b157620010b062001058565b5b828204905092915050565b5f620010c88262000ce2565b9150620010d58362000ce2565b9250828201905080821115620010f057620010ef62000fe1565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200113c602083620010f6565b9150620011498262001106565b602082019050919050565b5f6020820190508181035f8301526200116d816200112e565b9050919050565b5f8115159050919050565b6200118a8162001174565b82525050565b5f602082019050620011a55f8301846200117f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620011e1601f83620010f6565b9150620011ee82620011ab565b602082019050919050565b5f6020820190508181035f8301526200121281620011d3565b9050919050565b620012248162000ce2565b82525050565b5f6020820190506200123f5f83018462001219565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6200127b601b83620010f6565b9150620012888262001245565b602082019050919050565b5f6020820190508181035f830152620012ac816200126d565b9050919050565b60805160a051615d48620013305f395f818161157e01528181611eef01528181612b3401528181612be701528181612c110152818161333201528181613766015281816145e60152818161469b01526146d901525f818161102c015281816132da0152818161434f0152818161442e01526144550152615d485ff3fe6080604052600436106103d1575f3560e01c80638da5cb5b116101fc578063bbc0c74211610117578063dd62ed3e116100aa578063f2fde38b11610079578063f2fde38b14610e5e578063f47df32b14610e86578063f637434214610eb0578063f8b45b0514610eda578063fe72b27a14610f04576103d8565b8063dd62ed3e14610da4578063e2f4560514610de0578063e884f26014610e0a578063f11a24d314610e34576103d8565b8063c876d0b9116100e6578063c876d0b914610cea578063c8c8ebe414610d14578063d257b34f14610d3e578063d85ba06314610d7a576103d8565b8063bbc0c74214610c48578063c024666814610c72578063c17b5b8c14610c9a578063c18bc19514610cc2576103d8565b80639f4974821161018f578063a4c82a001161015e578063a4c82a0014610b7e578063a9059cbb14610ba8578063aacebbe314610be4578063b62496f514610c0c576103d8565b80639f49748214610ac45780639fccce3214610aee578063a0d82dc514610b18578063a457c2d714610b42576103d8565b806395d89b41116101cb57806395d89b4114610a1e5780639a7a23d614610a485780639c3b4fdc14610a705780639ec22c0e14610a9a576103d8565b80638da5cb5b146109785780638ea5220f146109a257806392136913146109cc578063924de9b7146109f6576103d8565b8063313ce567116102ec57806370a082311161027f5780637571336a1161024e5780637571336a146108e85780637bce5a04146109105780638095d5641461093a5780638a8c523c14610962576103d8565b806370a0823114610844578063715018a614610880578063730c188814610896578063751039fc146108be576103d8565b80634fbee193116102bb5780634fbee193146107785780636a486a8e146107b45780636ddd1713146107de5780636ebcf60714610808576103d8565b8063313ce567146106be57806339509351146106e857806349bd5a5e146107245780634a62bb651461074e576103d8565b8063199ffc721161036457806323b872dd1161033357806323b872dd146106065780632c3e486c146106425780632d5a5d341461066c5780632e82f1a014610694576103d8565b8063199ffc72146105605780631a8145bb1461058a5780631f3fed8f146105b4578063203e727e146105de576103d8565b80631694505e116103a05780631694505e146104ba57806318160ddd146104e45780631816467f1461050e578063184c16c514610536576103d8565b8063024c2ddd146103dc57806306fdde0314610418578063095ea7b31461044257806310d5de531461047e576103d8565b366103d857005b5f80fd5b3480156103e7575f80fd5b5061040260048036038101906103fd919061484f565b610f40565b60405161040f91906148a5565b60405180910390f35b348015610423575f80fd5b5061042c610f60565b6040516104399190614948565b60405180910390f35b34801561044d575f80fd5b5061046860048036038101906104639190614992565b610ff0565b60405161047591906149ea565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190614a03565b61100d565b6040516104b191906149ea565b60405180910390f35b3480156104c5575f80fd5b506104ce61102a565b6040516104db9190614a89565b60405180910390f35b3480156104ef575f80fd5b506104f861104e565b60405161050591906148a5565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190614a03565b611057565b005b348015610541575f80fd5b5061054a6111ab565b60405161055791906148a5565b60405180910390f35b34801561056b575f80fd5b506105746111b1565b60405161058191906148a5565b60405180910390f35b348015610595575f80fd5b5061059e6111b7565b6040516105ab91906148a5565b60405180910390f35b3480156105bf575f80fd5b506105c86111bd565b6040516105d591906148a5565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190614aa2565b6111c3565b005b348015610611575f80fd5b5061062c60048036038101906106279190614acd565b6112ec565b60405161063991906149ea565b60405180910390f35b34801561064d575f80fd5b506106566113c0565b60405161066391906148a5565b60405180910390f35b348015610677575f80fd5b50610692600480360381019061068d9190614b47565b6113c6565b005b34801561069f575f80fd5b506106a86114b4565b6040516106b591906149ea565b60405180910390f35b3480156106c9575f80fd5b506106d26114c6565b6040516106df9190614ba0565b60405180910390f35b3480156106f3575f80fd5b5061070e60048036038101906107099190614992565b6114ce565b60405161071b91906149ea565b60405180910390f35b34801561072f575f80fd5b5061073861157c565b6040516107459190614bc8565b60405180910390f35b348015610759575f80fd5b506107626115a0565b60405161076f91906149ea565b60405180910390f35b348015610783575f80fd5b5061079e60048036038101906107999190614a03565b6115b2565b6040516107ab91906149ea565b60405180910390f35b3480156107bf575f80fd5b506107c8611604565b6040516107d591906148a5565b60405180910390f35b3480156107e9575f80fd5b506107f261160a565b6040516107ff91906149ea565b60405180910390f35b348015610813575f80fd5b5061082e60048036038101906108299190614a03565b61161d565b60405161083b91906148a5565b60405180910390f35b34801561084f575f80fd5b5061086a60048036038101906108659190614a03565b611631565b60405161087791906148a5565b60405180910390f35b34801561088b575f80fd5b50610894611676565b005b3480156108a1575f80fd5b506108bc60048036038101906108b79190614be1565b6117c9565b005b3480156108c9575f80fd5b506108d2611921565b6040516108df91906149ea565b60405180910390f35b3480156108f3575f80fd5b5061090e60048036038101906109099190614b47565b6119d8565b005b34801561091b575f80fd5b50610924611ac6565b60405161093191906148a5565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614c31565b611acc565b005b34801561096d575f80fd5b50610976611be5565b005b348015610983575f80fd5b5061098c611cc1565b6040516109999190614bc8565b60405180910390f35b3480156109ad575f80fd5b506109b6611ce9565b6040516109c39190614bc8565b60405180910390f35b3480156109d7575f80fd5b506109e0611d0e565b6040516109ed91906148a5565b60405180910390f35b348015610a01575f80fd5b50610a1c6004803603810190610a179190614c81565b611d14565b005b348015610a29575f80fd5b50610a32611dc7565b604051610a3f9190614948565b60405180910390f35b348015610a53575f80fd5b50610a6e6004803603810190610a699190614b47565b611e57565b005b348015610a7b575f80fd5b50610a84611f89565b604051610a9191906148a5565b60405180910390f35b348015610aa5575f80fd5b50610aae611f8f565b604051610abb91906148a5565b60405180910390f35b348015610acf575f80fd5b50610ad8611f95565b604051610ae59190614bc8565b60405180910390f35b348015610af9575f80fd5b50610b02611fba565b604051610b0f91906148a5565b60405180910390f35b348015610b23575f80fd5b50610b2c611fc0565b604051610b3991906148a5565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190614992565b611fc6565b604051610b7591906149ea565b60405180910390f35b348015610b89575f80fd5b50610b9261208e565b604051610b9f91906148a5565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190614992565b612094565b604051610bdb91906149ea565b60405180910390f35b348015610bef575f80fd5b50610c0a6004803603810190610c059190614a03565b6120b1565b005b348015610c17575f80fd5b50610c326004803603810190610c2d9190614a03565b612205565b604051610c3f91906149ea565b60405180910390f35b348015610c53575f80fd5b50610c5c612222565b604051610c6991906149ea565b60405180910390f35b348015610c7d575f80fd5b50610c986004803603810190610c939190614b47565b612235565b005b348015610ca5575f80fd5b50610cc06004803603810190610cbb9190614c31565b612371565b005b348015610ccd575f80fd5b50610ce86004803603810190610ce39190614aa2565b61248a565b005b348015610cf5575f80fd5b50610cfe6125b3565b604051610d0b91906149ea565b60405180910390f35b348015610d1f575f80fd5b50610d286125c5565b604051610d3591906148a5565b60405180910390f35b348015610d49575f80fd5b50610d646004803603810190610d5f9190614aa2565b6125cb565b604051610d7191906149ea565b60405180910390f35b348015610d85575f80fd5b50610d8e612739565b604051610d9b91906148a5565b60405180910390f35b348015610daf575f80fd5b50610dca6004803603810190610dc5919061484f565b61273f565b604051610dd791906148a5565b60405180910390f35b348015610deb575f80fd5b50610df46127c1565b604051610e0191906148a5565b60405180910390f35b348015610e15575f80fd5b50610e1e6127c7565b604051610e2b91906149ea565b60405180910390f35b348015610e3f575f80fd5b50610e4861287e565b604051610e5591906148a5565b60405180910390f35b348015610e69575f80fd5b50610e846004803603810190610e7f9190614a03565b612884565b005b348015610e91575f80fd5b50610e9a612a46565b604051610ea79190614bc8565b60405180910390f35b348015610ebb575f80fd5b50610ec4612a5e565b604051610ed191906148a5565b60405180910390f35b348015610ee5575f80fd5b50610eee612a64565b604051610efb91906148a5565b60405180910390f35b348015610f0f575f80fd5b50610f2a6004803603810190610f259190614aa2565b612a6a565b604051610f3791906149ea565b60405180910390f35b6001602052815f5260405f20602052805f5260405f205f91509150505481565b606060038054610f6f90614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9b90614cd9565b8015610fe65780601f10610fbd57610100808354040283529160200191610fe6565b820191905f5260205f20905b815481529060010190602001808311610fc957829003601f168201915b5050505050905090565b5f611003610ffc612ce3565b8484612cea565b6001905092915050565b6023602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b61105f612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614d53565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b6111cb612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614d53565b60405180910390fd5b670de0b6b3a76400006103e8600161126f61104e565b6112799190614d9e565b6112839190614e0c565b61128d9190614e0c565b8110156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614eac565b60405180910390fd5b670de0b6b3a7640000816112e39190614d9e565b60088190555050565b5f6112f8848484612ead565b6113b584611304612ce3565b6113b085604051806060016040528060288152602001615cc66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611367612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b612cea565b600190509392505050565b600d5481565b6113ce612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614d53565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6115726114da612ce3565b8461156d8560015f6114ea612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e6e90919063ffffffff16565b612cea565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115f9054906101000a900460ff1681565b5f60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601a5481565b601160029054906101000a900460ff1681565b5f602052805f5260405f205f915090505481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61167e612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614d53565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d1612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614d53565b60405180910390fd5b6102588310156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90614f3a565b60405180910390fd5b6103e882111580156118b657505f8210155b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614fc8565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b5f61192a612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614d53565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6119e0612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614d53565b60405180910390fd5b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60175481565b611ad4612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d53565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611b8a9190614fe6565b611b949190614fe6565b60168190555060326016541115611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790615063565b60405180910390fd5b505050565b611bed612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614d53565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611d1c612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614d53565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611dd690614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0290614cd9565b8015611e4d5780601f10611e2457610100808354040283529160200191611e4d565b820191905f5260205f20905b815481529060010190602001808311611e3057829003601f168201915b5050505050905090565b611e5f612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614d53565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f72906150f1565b60405180910390fd5b611f858282613ecb565b5050565b60195481565b60105481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60205481565b601d5481565b5f612084611fd2612ce3565b8461207f85604051806060016040528060258152602001615cee6025913960015f611ffb612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b612cea565b6001905092915050565b600e5481565b5f6120a76120a0612ce3565b8484612ead565b6001905092915050565b6120b9612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614d53565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6024602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61223d612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614d53565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161236591906149ea565b60405180910390a25050565b612379612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614d53565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b5461242f9190614fe6565b6124399190614fe6565b601a819055506032601a541115612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90615063565b60405180910390fd5b505050565b612492612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614d53565b60405180910390fd5b670de0b6b3a76400006103e8600561253661104e565b6125409190614d9e565b61254a9190614e0c565b6125549190614e0c565b811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d9061517f565b60405180910390fd5b670de0b6b3a7640000816125aa9190614d9e565b600a8190555050565b60155f9054906101000a900460ff1681565b60085481565b5f6125d4612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614d53565b60405180910390fd5b620186a0600161267061104e565b61267a9190614d9e565b6126849190614e0c565b8210156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd9061520d565b60405180910390fd5b6103e860056126d361104e565b6126dd9190614d9e565b6126e79190614e0c565b821115612729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127209061529b565b60405180910390fd5b8160098190555060019050919050565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6127d0612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590614d53565b60405180910390fd5b5f60155f6101000a81548160ff0219169083151502179055506001905090565b60185481565b61288c612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614d53565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f90615329565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b739490a419a08c9213c2b5844155a396904baea42c81565b601c5481565b600a5481565b5f600f54601054612a7b9190614fe6565b4211612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390615391565b60405180910390fd5b60225f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b0e575f80fd5b426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612b6f9190614bc8565b602060405180830381865afa158015612b8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bae91906153c3565b90505f612bd8612710612bca8685613f6990919063ffffffff16565b613fe090919063ffffffff16565b90505f811115612c0e57612c0d7f00000000000000000000000000000000000000000000000000000000000000003083614029565b5b5f7f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612c77575f80fd5b505af1158015612c89573d5f803e3d5ffd5b50505050612cab82739490a419a08c9213c2b5844155a396904baea42c6142b2565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f9061545e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd906154ec565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ea091906148a5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f129061557a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8090615608565b60405180910390fd5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613027575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615696565b60405180910390fd5b5f810361307d5761307883835f614029565b613e07565b60115f9054906101000a900460ff161561374b57613099611cc1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561310757506130d7611cc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561313f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613179575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131925750600560149054906101000a900460ff16155b1561374a57601160019054906101000a900460ff166132865760225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613246575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c906156fe565b60405180910390fd5b5b60155f9054906101000a900460ff1615613449576132a2611cc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561332957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561338157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613448574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410613405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fc906157b2565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134e6575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561358d57600854811115613530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352790615840565b60405180910390fd5b600a5461353c83611631565b826135479190614fe6565b1115613588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357f906158a8565b60405180910390fd5b613749565b60245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561362a575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156136a057600854811115613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366b90615936565b60405180910390fd5b613691739490a419a08c9213c2b5844155a396904baea42c611631565b811161369b575f80fd5b613748565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661374757600a546136fa83611631565b826137059190614fe6565b1115613746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373d906158a8565b60405180910390fd5b5b5b5b5b5b600260215461375a9190614fe6565b43111580156137b557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138015750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561385c57600160145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f61386630611631565b90505f600954821015905080801561388a5750601160029054906101000a900460ff165b80156138a35750600560149054906101000a900460ff16155b80156138f6575060245f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613949575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561399c575060225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156139df576001600560146101000a81548160ff0219169083151502179055506139c46144e6565b5f600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613a42575060245f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015613a595750600c5f9054906101000a900460ff165b8015613a745750600d54600e54613a709190614fe6565b4210155b8015613ac7575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613ad657613ad46145bf565b505b5f600560149054906101000a900460ff1615905060225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b85575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613b8e575f90505b5f8115613df75760245f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613bec57505f601a54115b15613cb657613c196064613c0b601a5488613f6990919063ffffffff16565b613fe090919063ffffffff16565b9050601a54601c5482613c2c9190614d9e565b613c369190614e0c565b601f5f828254613c469190614fe6565b92505081905550601a54601d5482613c5e9190614d9e565b613c689190614e0c565b60205f828254613c789190614fe6565b92505081905550601a54601b5482613c909190614d9e565b613c9a9190614e0c565b601e5f828254613caa9190614fe6565b92505081905550613dd4565b60245f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613d0d57505f601654115b15613dd357613d3a6064613d2c60165488613f6990919063ffffffff16565b613fe090919063ffffffff16565b905060165460185482613d4d9190614d9e565b613d579190614e0c565b601f5f828254613d679190614fe6565b9250508190555060165460195482613d7f9190614d9e565b613d899190614e0c565b60205f828254613d999190614fe6565b9250508190555060165460175482613db19190614d9e565b613dbb9190614e0c565b601e5f828254613dcb9190614fe6565b925050819055505b5b5f811115613de857613de7873083614029565b5b8085613df49190615954565b94505b613e02878787614029565b505050505b505050565b5f838311158290613e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4a9190614948565b60405180910390fd5b505f8385613e619190615954565b9050809150509392505050565b5f808284613e7c9190614fe6565b905083811015613ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb8906159d1565b60405180910390fd5b8091505092915050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808303613f79575f9050613fda565b5f8284613f869190614d9e565b9050828482613f959190614e0c565b14613fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fcc90615a5f565b60405180910390fd5b809150505b92915050565b5f61402183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061478b565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408e9061557a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140fc90615608565b60405180910390fd5b6141108383836147ec565b61417981604051806060016040528060268152602001615ca0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614208815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e6e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142a591906148a5565b60405180910390a3505050565b5f600267ffffffffffffffff8111156142ce576142cd615a7d565b5b6040519080825280602002602001820160405280156142fc5781602001602082028036833780820191505090505b50905030815f8151811061431357614312615aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143da9190615aeb565b816001815181106143ee576143ed615aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614453307f000000000000000000000000000000000000000000000000000000000000000085612cea565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486426040518663ffffffff1660e01b81526004016144b4959493929190615c06565b5f604051808303815f87803b1580156144cb575f80fd5b505af11580156144dd573d5f803e3d5ffd5b50505050505050565b5f805f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f61453182306142b2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161457690615c8b565b5f6040518083038185875af1925050503d805f81146145b0576040519150601f19603f3d011682016040523d82523d5f602084013e6145b5565b606091505b5050809150505050565b5f42600e819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016146219190614bc8565b602060405180830381865afa15801561463c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466091906153c3565b90505f61468c61271061467e600b5485613f6990919063ffffffff16565b613fe090919063ffffffff16565b90505f8111156146d6576146d57f0000000000000000000000000000000000000000000000000000000000000000739490a419a08c9213c2b5844155a396904baea42c83614029565b5b5f7f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561473f575f80fd5b505af1158015614751573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f80831182906147d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147c89190614948565b60405180910390fd5b505f83856147df9190614e0c565b9050809150509392505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61481e826147f5565b9050919050565b61482e81614814565b8114614838575f80fd5b50565b5f8135905061484981614825565b92915050565b5f8060408385031215614865576148646147f1565b5b5f6148728582860161483b565b92505060206148838582860161483b565b9150509250929050565b5f819050919050565b61489f8161488d565b82525050565b5f6020820190506148b85f830184614896565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156148f55780820151818401526020810190506148da565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61491a826148be565b61492481856148c8565b93506149348185602086016148d8565b61493d81614900565b840191505092915050565b5f6020820190508181035f8301526149608184614910565b905092915050565b6149718161488d565b811461497b575f80fd5b50565b5f8135905061498c81614968565b92915050565b5f80604083850312156149a8576149a76147f1565b5b5f6149b58582860161483b565b92505060206149c68582860161497e565b9150509250929050565b5f8115159050919050565b6149e4816149d0565b82525050565b5f6020820190506149fd5f8301846149db565b92915050565b5f60208284031215614a1857614a176147f1565b5b5f614a258482850161483b565b91505092915050565b5f819050919050565b5f614a51614a4c614a47846147f5565b614a2e565b6147f5565b9050919050565b5f614a6282614a37565b9050919050565b5f614a7382614a58565b9050919050565b614a8381614a69565b82525050565b5f602082019050614a9c5f830184614a7a565b92915050565b5f60208284031215614ab757614ab66147f1565b5b5f614ac48482850161497e565b91505092915050565b5f805f60608486031215614ae457614ae36147f1565b5b5f614af18682870161483b565b9350506020614b028682870161483b565b9250506040614b138682870161497e565b9150509250925092565b614b26816149d0565b8114614b30575f80fd5b50565b5f81359050614b4181614b1d565b92915050565b5f8060408385031215614b5d57614b5c6147f1565b5b5f614b6a8582860161483b565b9250506020614b7b85828601614b33565b9150509250929050565b5f60ff82169050919050565b614b9a81614b85565b82525050565b5f602082019050614bb35f830184614b91565b92915050565b614bc281614814565b82525050565b5f602082019050614bdb5f830184614bb9565b92915050565b5f805f60608486031215614bf857614bf76147f1565b5b5f614c058682870161497e565b9350506020614c168682870161497e565b9250506040614c2786828701614b33565b9150509250925092565b5f805f60608486031215614c4857614c476147f1565b5b5f614c558682870161497e565b9350506020614c668682870161497e565b9250506040614c778682870161497e565b9150509250925092565b5f60208284031215614c9657614c956147f1565b5b5f614ca384828501614b33565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614cf057607f821691505b602082108103614d0357614d02614cac565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614d3d6020836148c8565b9150614d4882614d09565b602082019050919050565b5f6020820190508181035f830152614d6a81614d31565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614da88261488d565b9150614db38361488d565b9250828202614dc18161488d565b91508282048414831517614dd857614dd7614d71565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614e168261488d565b9150614e218361488d565b925082614e3157614e30614ddf565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614e96602f836148c8565b9150614ea182614e3c565b604082019050919050565b5f6020820190508181035f830152614ec381614e8a565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f614f246033836148c8565b9150614f2f82614eca565b604082019050919050565b5f6020820190508181035f830152614f5181614f18565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f614fb26030836148c8565b9150614fbd82614f58565b604082019050919050565b5f6020820190508181035f830152614fdf81614fa6565b9050919050565b5f614ff08261488d565b9150614ffb8361488d565b925082820190508082111561501357615012614d71565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c6573730000005f82015250565b5f61504d601d836148c8565b915061505882615019565b602082019050919050565b5f6020820190508181035f83015261507a81615041565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6150db6039836148c8565b91506150e682615081565b604082019050919050565b5f6020820190508181035f830152615108816150cf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151696024836148c8565b91506151748261510f565b604082019050919050565b5f6020820190508181035f8301526151968161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6151f76035836148c8565b91506152028261519d565b604082019050919050565b5f6020820190508181035f830152615224816151eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6152856034836148c8565b91506152908261522b565b604082019050919050565b5f6020820190508181035f8301526152b281615279565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153136026836148c8565b915061531e826152b9565b604082019050919050565b5f6020820190508181035f83015261534081615307565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f61537b6020836148c8565b915061538682615347565b602082019050919050565b5f6020820190508181035f8301526153a88161536f565b9050919050565b5f815190506153bd81614968565b92915050565b5f602082840312156153d8576153d76147f1565b5b5f6153e5848285016153af565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6154486024836148c8565b9150615453826153ee565b604082019050919050565b5f6020820190508181035f8301526154758161543c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154d66022836148c8565b91506154e18261547c565b604082019050919050565b5f6020820190508181035f830152615503816154ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6155646025836148c8565b915061556f8261550a565b604082019050919050565b5f6020820190508181035f83015261559181615558565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6155f26023836148c8565b91506155fd82615598565b604082019050919050565b5f6020820190508181035f83015261561f816155e6565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f6156806031836148c8565b915061568b82615626565b604082019050919050565b5f6020820190508181035f8301526156ad81615674565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6156e86016836148c8565b91506156f3826156b4565b602082019050919050565b5f6020820190508181035f830152615715816156dc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61579c6049836148c8565b91506157a78261571c565b606082019050919050565b5f6020820190508181035f8301526157c981615790565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61582a6035836148c8565b9150615835826157d0565b604082019050919050565b5f6020820190508181035f8301526158578161581e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6158926013836148c8565b915061589d8261585e565b602082019050919050565b5f6020820190508181035f8301526158bf81615886565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6159206036836148c8565b915061592b826158c6565b604082019050919050565b5f6020820190508181035f83015261594d81615914565b9050919050565b5f61595e8261488d565b91506159698361488d565b925082820390508181111561598157615980614d71565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6159bb601b836148c8565b91506159c682615987565b602082019050919050565b5f6020820190508181035f8301526159e8816159af565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615a496021836148c8565b9150615a54826159ef565b604082019050919050565b5f6020820190508181035f830152615a7681615a3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615ae581614825565b92915050565b5f60208284031215615b0057615aff6147f1565b5b5f615b0d84828501615ad7565b91505092915050565b5f819050919050565b5f615b39615b34615b2f84615b16565b614a2e565b61488d565b9050919050565b615b4981615b1f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b8181614814565b82525050565b5f615b928383615b78565b60208301905092915050565b5f602082019050919050565b5f615bb482615b4f565b615bbe8185615b59565b9350615bc983615b69565b805f5b83811015615bf9578151615be08882615b87565b9750615beb83615b9e565b925050600181019050615bcc565b5085935050505092915050565b5f60a082019050615c195f830188614896565b615c266020830187615b40565b8181036040830152615c388186615baa565b9050615c476060830185614bb9565b615c546080830184614896565b9695505050505050565b5f81905092915050565b50565b5f615c765f83615c5e565b9150615c8182615c68565b5f82019050919050565b5f615c9582615c6b565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a44cd266886c90ec9729ac5f36adf9524afc473d6539ba494f919806927f2baa64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103d1575f3560e01c80638da5cb5b116101fc578063bbc0c74211610117578063dd62ed3e116100aa578063f2fde38b11610079578063f2fde38b14610e5e578063f47df32b14610e86578063f637434214610eb0578063f8b45b0514610eda578063fe72b27a14610f04576103d8565b8063dd62ed3e14610da4578063e2f4560514610de0578063e884f26014610e0a578063f11a24d314610e34576103d8565b8063c876d0b9116100e6578063c876d0b914610cea578063c8c8ebe414610d14578063d257b34f14610d3e578063d85ba06314610d7a576103d8565b8063bbc0c74214610c48578063c024666814610c72578063c17b5b8c14610c9a578063c18bc19514610cc2576103d8565b80639f4974821161018f578063a4c82a001161015e578063a4c82a0014610b7e578063a9059cbb14610ba8578063aacebbe314610be4578063b62496f514610c0c576103d8565b80639f49748214610ac45780639fccce3214610aee578063a0d82dc514610b18578063a457c2d714610b42576103d8565b806395d89b41116101cb57806395d89b4114610a1e5780639a7a23d614610a485780639c3b4fdc14610a705780639ec22c0e14610a9a576103d8565b80638da5cb5b146109785780638ea5220f146109a257806392136913146109cc578063924de9b7146109f6576103d8565b8063313ce567116102ec57806370a082311161027f5780637571336a1161024e5780637571336a146108e85780637bce5a04146109105780638095d5641461093a5780638a8c523c14610962576103d8565b806370a0823114610844578063715018a614610880578063730c188814610896578063751039fc146108be576103d8565b80634fbee193116102bb5780634fbee193146107785780636a486a8e146107b45780636ddd1713146107de5780636ebcf60714610808576103d8565b8063313ce567146106be57806339509351146106e857806349bd5a5e146107245780634a62bb651461074e576103d8565b8063199ffc721161036457806323b872dd1161033357806323b872dd146106065780632c3e486c146106425780632d5a5d341461066c5780632e82f1a014610694576103d8565b8063199ffc72146105605780631a8145bb1461058a5780631f3fed8f146105b4578063203e727e146105de576103d8565b80631694505e116103a05780631694505e146104ba57806318160ddd146104e45780631816467f1461050e578063184c16c514610536576103d8565b8063024c2ddd146103dc57806306fdde0314610418578063095ea7b31461044257806310d5de531461047e576103d8565b366103d857005b5f80fd5b3480156103e7575f80fd5b5061040260048036038101906103fd919061484f565b610f40565b60405161040f91906148a5565b60405180910390f35b348015610423575f80fd5b5061042c610f60565b6040516104399190614948565b60405180910390f35b34801561044d575f80fd5b5061046860048036038101906104639190614992565b610ff0565b60405161047591906149ea565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f9190614a03565b61100d565b6040516104b191906149ea565b60405180910390f35b3480156104c5575f80fd5b506104ce61102a565b6040516104db9190614a89565b60405180910390f35b3480156104ef575f80fd5b506104f861104e565b60405161050591906148a5565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190614a03565b611057565b005b348015610541575f80fd5b5061054a6111ab565b60405161055791906148a5565b60405180910390f35b34801561056b575f80fd5b506105746111b1565b60405161058191906148a5565b60405180910390f35b348015610595575f80fd5b5061059e6111b7565b6040516105ab91906148a5565b60405180910390f35b3480156105bf575f80fd5b506105c86111bd565b6040516105d591906148a5565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190614aa2565b6111c3565b005b348015610611575f80fd5b5061062c60048036038101906106279190614acd565b6112ec565b60405161063991906149ea565b60405180910390f35b34801561064d575f80fd5b506106566113c0565b60405161066391906148a5565b60405180910390f35b348015610677575f80fd5b50610692600480360381019061068d9190614b47565b6113c6565b005b34801561069f575f80fd5b506106a86114b4565b6040516106b591906149ea565b60405180910390f35b3480156106c9575f80fd5b506106d26114c6565b6040516106df9190614ba0565b60405180910390f35b3480156106f3575f80fd5b5061070e60048036038101906107099190614992565b6114ce565b60405161071b91906149ea565b60405180910390f35b34801561072f575f80fd5b5061073861157c565b6040516107459190614bc8565b60405180910390f35b348015610759575f80fd5b506107626115a0565b60405161076f91906149ea565b60405180910390f35b348015610783575f80fd5b5061079e60048036038101906107999190614a03565b6115b2565b6040516107ab91906149ea565b60405180910390f35b3480156107bf575f80fd5b506107c8611604565b6040516107d591906148a5565b60405180910390f35b3480156107e9575f80fd5b506107f261160a565b6040516107ff91906149ea565b60405180910390f35b348015610813575f80fd5b5061082e60048036038101906108299190614a03565b61161d565b60405161083b91906148a5565b60405180910390f35b34801561084f575f80fd5b5061086a60048036038101906108659190614a03565b611631565b60405161087791906148a5565b60405180910390f35b34801561088b575f80fd5b50610894611676565b005b3480156108a1575f80fd5b506108bc60048036038101906108b79190614be1565b6117c9565b005b3480156108c9575f80fd5b506108d2611921565b6040516108df91906149ea565b60405180910390f35b3480156108f3575f80fd5b5061090e60048036038101906109099190614b47565b6119d8565b005b34801561091b575f80fd5b50610924611ac6565b60405161093191906148a5565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614c31565b611acc565b005b34801561096d575f80fd5b50610976611be5565b005b348015610983575f80fd5b5061098c611cc1565b6040516109999190614bc8565b60405180910390f35b3480156109ad575f80fd5b506109b6611ce9565b6040516109c39190614bc8565b60405180910390f35b3480156109d7575f80fd5b506109e0611d0e565b6040516109ed91906148a5565b60405180910390f35b348015610a01575f80fd5b50610a1c6004803603810190610a179190614c81565b611d14565b005b348015610a29575f80fd5b50610a32611dc7565b604051610a3f9190614948565b60405180910390f35b348015610a53575f80fd5b50610a6e6004803603810190610a699190614b47565b611e57565b005b348015610a7b575f80fd5b50610a84611f89565b604051610a9191906148a5565b60405180910390f35b348015610aa5575f80fd5b50610aae611f8f565b604051610abb91906148a5565b60405180910390f35b348015610acf575f80fd5b50610ad8611f95565b604051610ae59190614bc8565b60405180910390f35b348015610af9575f80fd5b50610b02611fba565b604051610b0f91906148a5565b60405180910390f35b348015610b23575f80fd5b50610b2c611fc0565b604051610b3991906148a5565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190614992565b611fc6565b604051610b7591906149ea565b60405180910390f35b348015610b89575f80fd5b50610b9261208e565b604051610b9f91906148a5565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190614992565b612094565b604051610bdb91906149ea565b60405180910390f35b348015610bef575f80fd5b50610c0a6004803603810190610c059190614a03565b6120b1565b005b348015610c17575f80fd5b50610c326004803603810190610c2d9190614a03565b612205565b604051610c3f91906149ea565b60405180910390f35b348015610c53575f80fd5b50610c5c612222565b604051610c6991906149ea565b60405180910390f35b348015610c7d575f80fd5b50610c986004803603810190610c939190614b47565b612235565b005b348015610ca5575f80fd5b50610cc06004803603810190610cbb9190614c31565b612371565b005b348015610ccd575f80fd5b50610ce86004803603810190610ce39190614aa2565b61248a565b005b348015610cf5575f80fd5b50610cfe6125b3565b604051610d0b91906149ea565b60405180910390f35b348015610d1f575f80fd5b50610d286125c5565b604051610d3591906148a5565b60405180910390f35b348015610d49575f80fd5b50610d646004803603810190610d5f9190614aa2565b6125cb565b604051610d7191906149ea565b60405180910390f35b348015610d85575f80fd5b50610d8e612739565b604051610d9b91906148a5565b60405180910390f35b348015610daf575f80fd5b50610dca6004803603810190610dc5919061484f565b61273f565b604051610dd791906148a5565b60405180910390f35b348015610deb575f80fd5b50610df46127c1565b604051610e0191906148a5565b60405180910390f35b348015610e15575f80fd5b50610e1e6127c7565b604051610e2b91906149ea565b60405180910390f35b348015610e3f575f80fd5b50610e4861287e565b604051610e5591906148a5565b60405180910390f35b348015610e69575f80fd5b50610e846004803603810190610e7f9190614a03565b612884565b005b348015610e91575f80fd5b50610e9a612a46565b604051610ea79190614bc8565b60405180910390f35b348015610ebb575f80fd5b50610ec4612a5e565b604051610ed191906148a5565b60405180910390f35b348015610ee5575f80fd5b50610eee612a64565b604051610efb91906148a5565b60405180910390f35b348015610f0f575f80fd5b50610f2a6004803603810190610f259190614aa2565b612a6a565b604051610f3791906149ea565b60405180910390f35b6001602052815f5260405f20602052805f5260405f205f91509150505481565b606060038054610f6f90614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9b90614cd9565b8015610fe65780601f10610fbd57610100808354040283529160200191610fe6565b820191905f5260205f20905b815481529060010190602001808311610fc957829003601f168201915b5050505050905090565b5f611003610ffc612ce3565b8484612cea565b6001905092915050565b6023602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b61105f612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614d53565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b6111cb612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614d53565b60405180910390fd5b670de0b6b3a76400006103e8600161126f61104e565b6112799190614d9e565b6112839190614e0c565b61128d9190614e0c565b8110156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690614eac565b60405180910390fd5b670de0b6b3a7640000816112e39190614d9e565b60088190555050565b5f6112f8848484612ead565b6113b584611304612ce3565b6113b085604051806060016040528060288152602001615cc66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611367612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b612cea565b600190509392505050565b600d5481565b6113ce612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614d53565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5f9054906101000a900460ff1681565b5f6012905090565b5f6115726114da612ce3565b8461156d8560015f6114ea612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e6e90919063ffffffff16565b612cea565b6001905092915050565b7f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6881565b60115f9054906101000a900460ff1681565b5f60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601a5481565b601160029054906101000a900460ff1681565b5f602052805f5260405f205f915090505481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61167e612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614d53565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d1612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614d53565b60405180910390fd5b6102588310156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90614f3a565b60405180910390fd5b6103e882111580156118b657505f8210155b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614fc8565b60405180910390fd5b82600d8190555081600b8190555080600c5f6101000a81548160ff021916908315150217905550505050565b5f61192a612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614d53565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b6119e0612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614d53565b60405180910390fd5b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60175481565b611ad4612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d53565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611b8a9190614fe6565b611b949190614fe6565b60168190555060326016541115611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790615063565b60405180910390fd5b505050565b611bed612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614d53565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611d1c612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614d53565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611dd690614cd9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0290614cd9565b8015611e4d5780601f10611e2457610100808354040283529160200191611e4d565b820191905f5260205f20905b815481529060010190602001808311611e3057829003601f168201915b5050505050905090565b611e5f612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614d53565b60405180910390fd5b7f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f72906150f1565b60405180910390fd5b611f858282613ecb565b5050565b60195481565b60105481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60205481565b601d5481565b5f612084611fd2612ce3565b8461207f85604051806060016040528060258152602001615cee6025913960015f611ffb612ce3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b612cea565b6001905092915050565b600e5481565b5f6120a76120a0612ce3565b8484612ead565b6001905092915050565b6120b9612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614d53565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6024602052805f5260405f205f915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61223d612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614d53565b60405180910390fd5b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161236591906149ea565b60405180910390a25050565b612379612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614d53565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b5461242f9190614fe6565b6124399190614fe6565b601a819055506032601a541115612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90615063565b60405180910390fd5b505050565b612492612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614d53565b60405180910390fd5b670de0b6b3a76400006103e8600561253661104e565b6125409190614d9e565b61254a9190614e0c565b6125549190614e0c565b811015612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d9061517f565b60405180910390fd5b670de0b6b3a7640000816125aa9190614d9e565b600a8190555050565b60155f9054906101000a900460ff1681565b60085481565b5f6125d4612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614d53565b60405180910390fd5b620186a0600161267061104e565b61267a9190614d9e565b6126849190614e0c565b8210156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd9061520d565b60405180910390fd5b6103e860056126d361104e565b6126dd9190614d9e565b6126e79190614e0c565b821115612729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127209061529b565b60405180910390fd5b8160098190555060019050919050565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f6127d0612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590614d53565b60405180910390fd5b5f60155f6101000a81548160ff0219169083151502179055506001905090565b60185481565b61288c612ce3565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614d53565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f90615329565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b739490a419a08c9213c2b5844155a396904baea42c81565b601c5481565b600a5481565b5f600f54601054612a7b9190614fe6565b4211612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390615391565b60405180910390fd5b60225f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b0e575f80fd5b426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000090396099c1495a1172a013b28485af0511cfc686040518263ffffffff1660e01b8152600401612b6f9190614bc8565b602060405180830381865afa158015612b8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bae91906153c3565b90505f612bd8612710612bca8685613f6990919063ffffffff16565b613fe090919063ffffffff16565b90505f811115612c0e57612c0d7f000000000000000000000000090396099c1495a1172a013b28485af0511cfc683083614029565b5b5f7f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612c77575f80fd5b505af1158015612c89573d5f803e3d5ffd5b50505050612cab82739490a419a08c9213c2b5844155a396904baea42c6142b2565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f9061545e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd906154ec565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ea091906148a5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f129061557a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8090615608565b60405180910390fd5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613027575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615696565b60405180910390fd5b5f810361307d5761307883835f614029565b613e07565b60115f9054906101000a900460ff161561374b57613099611cc1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561310757506130d7611cc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561313f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613179575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131925750600560149054906101000a900460ff16155b1561374a57601160019054906101000a900460ff166132865760225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613246575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327c906156fe565b60405180910390fd5b5b60155f9054906101000a900460ff1615613449576132a2611cc1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561332957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561338157507f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613448574360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410613405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fc906157b2565b60405180910390fd5b4360125f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134e6575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561358d57600854811115613530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352790615840565b60405180910390fd5b600a5461353c83611631565b826135479190614fe6565b1115613588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357f906158a8565b60405180910390fd5b613749565b60245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561362a575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156136a057600854811115613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366b90615936565b60405180910390fd5b613691739490a419a08c9213c2b5844155a396904baea42c611631565b811161369b575f80fd5b613748565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661374757600a546136fa83611631565b826137059190614fe6565b1115613746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373d906158a8565b60405180910390fd5b5b5b5b5b5b600260215461375a9190614fe6565b43111580156137b557507f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138015750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561385c57600160145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b5f61386630611631565b90505f600954821015905080801561388a5750601160029054906101000a900460ff165b80156138a35750600560149054906101000a900460ff16155b80156138f6575060245f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613949575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561399c575060225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156139df576001600560146101000a81548160ff0219169083151502179055506139c46144e6565b5f600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613a42575060245f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015613a595750600c5f9054906101000a900460ff165b8015613a745750600d54600e54613a709190614fe6565b4210155b8015613ac7575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613ad657613ad46145bf565b505b5f600560149054906101000a900460ff1615905060225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b85575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613b8e575f90505b5f8115613df75760245f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613bec57505f601a54115b15613cb657613c196064613c0b601a5488613f6990919063ffffffff16565b613fe090919063ffffffff16565b9050601a54601c5482613c2c9190614d9e565b613c369190614e0c565b601f5f828254613c469190614fe6565b92505081905550601a54601d5482613c5e9190614d9e565b613c689190614e0c565b60205f828254613c789190614fe6565b92505081905550601a54601b5482613c909190614d9e565b613c9a9190614e0c565b601e5f828254613caa9190614fe6565b92505081905550613dd4565b60245f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613d0d57505f601654115b15613dd357613d3a6064613d2c60165488613f6990919063ffffffff16565b613fe090919063ffffffff16565b905060165460185482613d4d9190614d9e565b613d579190614e0c565b601f5f828254613d679190614fe6565b9250508190555060165460195482613d7f9190614d9e565b613d899190614e0c565b60205f828254613d999190614fe6565b9250508190555060165460175482613db19190614d9e565b613dbb9190614e0c565b601e5f828254613dcb9190614fe6565b925050819055505b5b5f811115613de857613de7873083614029565b5b8085613df49190615954565b94505b613e02878787614029565b505050505b505050565b5f838311158290613e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4a9190614948565b60405180910390fd5b505f8385613e619190615954565b9050809150509392505050565b5f808284613e7c9190614fe6565b905083811015613ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb8906159d1565b60405180910390fd5b8091505092915050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808303613f79575f9050613fda565b5f8284613f869190614d9e565b9050828482613f959190614e0c565b14613fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fcc90615a5f565b60405180910390fd5b809150505b92915050565b5f61402183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061478b565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603614097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408e9061557a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140fc90615608565b60405180910390fd5b6141108383836147ec565b61417981604051806060016040528060268152602001615ca0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e0c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550614208815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613e6e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142a591906148a5565b60405180910390a3505050565b5f600267ffffffffffffffff8111156142ce576142cd615a7d565b5b6040519080825280602002602001820160405280156142fc5781602001602082028036833780820191505090505b50905030815f8151811061431357614312615aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143da9190615aeb565b816001815181106143ee576143ed615aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614453307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85612cea565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486426040518663ffffffff1660e01b81526004016144b4959493929190615c06565b5f604051808303815f87803b1580156144cb575f80fd5b505af11580156144dd573d5f803e3d5ffd5b50505050505050565b5f805f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f61453182306142b2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161457690615c8b565b5f6040518083038185875af1925050503d805f81146145b0576040519150601f19603f3d011682016040523d82523d5f602084013e6145b5565b606091505b5050809150505050565b5f42600e819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000090396099c1495a1172a013b28485af0511cfc686040518263ffffffff1660e01b81526004016146219190614bc8565b602060405180830381865afa15801561463c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061466091906153c3565b90505f61468c61271061467e600b5485613f6990919063ffffffff16565b613fe090919063ffffffff16565b90505f8111156146d6576146d57f000000000000000000000000090396099c1495a1172a013b28485af0511cfc68739490a419a08c9213c2b5844155a396904baea42c83614029565b5b5f7f000000000000000000000000090396099c1495a1172a013b28485af0511cfc6890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561473f575f80fd5b505af1158015614751573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f80831182906147d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147c89190614948565b60405180910390fd5b505f83856147df9190614e0c565b9050809150509392505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61481e826147f5565b9050919050565b61482e81614814565b8114614838575f80fd5b50565b5f8135905061484981614825565b92915050565b5f8060408385031215614865576148646147f1565b5b5f6148728582860161483b565b92505060206148838582860161483b565b9150509250929050565b5f819050919050565b61489f8161488d565b82525050565b5f6020820190506148b85f830184614896565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156148f55780820151818401526020810190506148da565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61491a826148be565b61492481856148c8565b93506149348185602086016148d8565b61493d81614900565b840191505092915050565b5f6020820190508181035f8301526149608184614910565b905092915050565b6149718161488d565b811461497b575f80fd5b50565b5f8135905061498c81614968565b92915050565b5f80604083850312156149a8576149a76147f1565b5b5f6149b58582860161483b565b92505060206149c68582860161497e565b9150509250929050565b5f8115159050919050565b6149e4816149d0565b82525050565b5f6020820190506149fd5f8301846149db565b92915050565b5f60208284031215614a1857614a176147f1565b5b5f614a258482850161483b565b91505092915050565b5f819050919050565b5f614a51614a4c614a47846147f5565b614a2e565b6147f5565b9050919050565b5f614a6282614a37565b9050919050565b5f614a7382614a58565b9050919050565b614a8381614a69565b82525050565b5f602082019050614a9c5f830184614a7a565b92915050565b5f60208284031215614ab757614ab66147f1565b5b5f614ac48482850161497e565b91505092915050565b5f805f60608486031215614ae457614ae36147f1565b5b5f614af18682870161483b565b9350506020614b028682870161483b565b9250506040614b138682870161497e565b9150509250925092565b614b26816149d0565b8114614b30575f80fd5b50565b5f81359050614b4181614b1d565b92915050565b5f8060408385031215614b5d57614b5c6147f1565b5b5f614b6a8582860161483b565b9250506020614b7b85828601614b33565b9150509250929050565b5f60ff82169050919050565b614b9a81614b85565b82525050565b5f602082019050614bb35f830184614b91565b92915050565b614bc281614814565b82525050565b5f602082019050614bdb5f830184614bb9565b92915050565b5f805f60608486031215614bf857614bf76147f1565b5b5f614c058682870161497e565b9350506020614c168682870161497e565b9250506040614c2786828701614b33565b9150509250925092565b5f805f60608486031215614c4857614c476147f1565b5b5f614c558682870161497e565b9350506020614c668682870161497e565b9250506040614c778682870161497e565b9150509250925092565b5f60208284031215614c9657614c956147f1565b5b5f614ca384828501614b33565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614cf057607f821691505b602082108103614d0357614d02614cac565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614d3d6020836148c8565b9150614d4882614d09565b602082019050919050565b5f6020820190508181035f830152614d6a81614d31565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614da88261488d565b9150614db38361488d565b9250828202614dc18161488d565b91508282048414831517614dd857614dd7614d71565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614e168261488d565b9150614e218361488d565b925082614e3157614e30614ddf565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614e96602f836148c8565b9150614ea182614e3c565b604082019050919050565b5f6020820190508181035f830152614ec381614e8a565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f614f246033836148c8565b9150614f2f82614eca565b604082019050919050565b5f6020820190508181035f830152614f5181614f18565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f614fb26030836148c8565b9150614fbd82614f58565b604082019050919050565b5f6020820190508181035f830152614fdf81614fa6565b9050919050565b5f614ff08261488d565b9150614ffb8361488d565b925082820190508082111561501357615012614d71565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c6573730000005f82015250565b5f61504d601d836148c8565b915061505882615019565b602082019050919050565b5f6020820190508181035f83015261507a81615041565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6150db6039836148c8565b91506150e682615081565b604082019050919050565b5f6020820190508181035f830152615108816150cf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151696024836148c8565b91506151748261510f565b604082019050919050565b5f6020820190508181035f8301526151968161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6151f76035836148c8565b91506152028261519d565b604082019050919050565b5f6020820190508181035f830152615224816151eb565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6152856034836148c8565b91506152908261522b565b604082019050919050565b5f6020820190508181035f8301526152b281615279565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153136026836148c8565b915061531e826152b9565b604082019050919050565b5f6020820190508181035f83015261534081615307565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f61537b6020836148c8565b915061538682615347565b602082019050919050565b5f6020820190508181035f8301526153a88161536f565b9050919050565b5f815190506153bd81614968565b92915050565b5f602082840312156153d8576153d76147f1565b5b5f6153e5848285016153af565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6154486024836148c8565b9150615453826153ee565b604082019050919050565b5f6020820190508181035f8301526154758161543c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154d66022836148c8565b91506154e18261547c565b604082019050919050565b5f6020820190508181035f830152615503816154ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6155646025836148c8565b915061556f8261550a565b604082019050919050565b5f6020820190508181035f83015261559181615558565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6155f26023836148c8565b91506155fd82615598565b604082019050919050565b5f6020820190508181035f83015261561f816155e6565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f6156806031836148c8565b915061568b82615626565b604082019050919050565b5f6020820190508181035f8301526156ad81615674565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6156e86016836148c8565b91506156f3826156b4565b602082019050919050565b5f6020820190508181035f830152615715816156dc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f61579c6049836148c8565b91506157a78261571c565b606082019050919050565b5f6020820190508181035f8301526157c981615790565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61582a6035836148c8565b9150615835826157d0565b604082019050919050565b5f6020820190508181035f8301526158578161581e565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6158926013836148c8565b915061589d8261585e565b602082019050919050565b5f6020820190508181035f8301526158bf81615886565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6159206036836148c8565b915061592b826158c6565b604082019050919050565b5f6020820190508181035f83015261594d81615914565b9050919050565b5f61595e8261488d565b91506159698361488d565b925082820390508181111561598157615980614d71565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6159bb601b836148c8565b91506159c682615987565b602082019050919050565b5f6020820190508181035f8301526159e8816159af565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615a496021836148c8565b9150615a54826159ef565b604082019050919050565b5f6020820190508181035f830152615a7681615a3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615ae581614825565b92915050565b5f60208284031215615b0057615aff6147f1565b5b5f615b0d84828501615ad7565b91505092915050565b5f819050919050565b5f615b39615b34615b2f84615b16565b614a2e565b61488d565b9050919050565b615b4981615b1f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b8181614814565b82525050565b5f615b928383615b78565b60208301905092915050565b5f602082019050919050565b5f615bb482615b4f565b615bbe8185615b59565b9350615bc983615b69565b805f5b83811015615bf9578151615be08882615b87565b9750615beb83615b9e565b925050600181019050615bcc565b5085935050505092915050565b5f60a082019050615c195f830188614896565b615c266020830187615b40565b8181036040830152615c388186615baa565b9050615c476060830185614bb9565b615c546080830184614896565b9695505050505050565b5f81905092915050565b50565b5f615c765f83615c5e565b9150615c8182615c68565b5f82019050919050565b5f615c9582615c6b565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a44cd266886c90ec9729ac5f36adf9524afc473d6539ba494f919806927f2baa64736f6c63430008140033

Deployed Bytecode Sourcemap

29557:17557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6992:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7664:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9838:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31463:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29636:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8787:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38406:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30236:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31177:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35823:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10490:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30145:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37597:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30106:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8628:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11255:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29694:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30334:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38574:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30991:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30414:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6938:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8959:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22166:148;;;;;;;;;;;;;:::i;:::-;;44877:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35040:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36290:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30883:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36641:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34796:191;;;;;;;;;;;;;:::i;:::-;;21522:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29900:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31026:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36531:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7884:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37741:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30957:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30289:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29865:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31217:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31102:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11977:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30197:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9300:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38193:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31686:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30374:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37406:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37019:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36066:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30800:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29934:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35428:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30849:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9539:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29976:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35222:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30920:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22470:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29739:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31064:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45336:998;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6992:66;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7664:100::-;7718:13;7751:5;7744:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7664:100;:::o;9838:169::-;9921:4;9938:39;9947:12;:10;:12::i;:::-;9961:7;9970:6;9938:8;:39::i;:::-;9995:4;9988:11;;9838:169;;;;:::o;31463:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29636:51::-;;;:::o;8787:108::-;8848:7;8875:12;;8868:19;;8787:108;:::o;38406:157::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38513:9:::1;;;;;;;;;;;38485:38;;38502:9;38485:38;;;;;;;;;;;;38546:9;38534;;:21;;;;;;;;;;;;;;;;;;38406:157:::0;:::o;30236:46::-;;;;:::o;30050:36::-;;;;:::o;31177:33::-;;;;:::o;31137:::-;;;;:::o;35823:234::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35942:4:::1;35936;35932:1;35916:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35915:31;;;;:::i;:::-;35905:6;:41;;35897:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36042:6;36032;:17;;;;:::i;:::-;36009:20;:40;;;;35823:234:::0;:::o;10490:355::-;10630:4;10647:36;10657:6;10665:9;10676:6;10647:9;:36::i;:::-;10694:121;10703:6;10711:12;:10;:12::i;:::-;10725:89;10763:6;10725:89;;;;;;;;;;;;;;;;;:11;:19;10737:6;10725:19;;;;;;;;;;;;;;;:33;10745:12;:10;:12::i;:::-;10725:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10694:8;:121::i;:::-;10833:4;10826:11;;10490:355;;;;;:::o;30145:45::-;;;;:::o;37597:135::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37711:13:::1;37689:10;:19;37700:7;37689:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37597:135:::0;;:::o;30106:32::-;;;;;;;;;;;;;:::o;8628:93::-;8686:5;8711:2;8704:9;;8628:93;:::o;11255:218::-;11343:4;11360:83;11369:12;:10;:12::i;:::-;11383:7;11392:50;11431:10;11392:11;:25;11404:12;:10;:12::i;:::-;11392:25;;;;;;;;;;;;;;;:34;11418:7;11392:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11360:8;:83::i;:::-;11461:4;11454:11;;11255:218;;;;:::o;29694:38::-;;;:::o;30334:33::-;;;;;;;;;;;;;:::o;38574:125::-;38639:4;38663:19;:28;38683:7;38663:28;;;;;;;;;;;;;;;;;;;;;;;;;38656:35;;38574:125;;;:::o;30991:28::-;;;;:::o;30414:31::-;;;;;;;;;;;;;:::o;6938:44::-;;;;;;;;;;;;;;;;;:::o;8959:127::-;9033:7;9060:9;:18;9070:7;9060:18;;;;;;;;;;;;;;;;9053:25;;8959:127;;;:::o;22166:148::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:1:::1;22236:40;;22257:6;;;;;;;;;;;22236:40;;;;;;;;;;;;22304:1;22287:6;;:19;;;;;;;;;;;;;;;;;;22166:148::o:0;44877:447::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45031:3:::1;45008:19;:26;;45000:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45121:4;45109:8;:16;;:33;;;;;45141:1;45129:8;:13;;45109:33;45101:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45224:19;45206:15;:37;;;;45273:8;45254:16;:27;;;;45308:8;45292:13;;:24;;;;;;;;;;;;;;;;;;44877:447:::0;;;:::o;35040:120::-;35092:4;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35125:5:::1;35108:14;;:22;;;;;;;;;;;;;;;;;;35148:4;35141:11;;35040:120:::0;:::o;36290:144::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36422:4:::1;36380:31;:39;36412:6;36380:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36290:144:::0;;:::o;30883:30::-;;;;:::o;36641:369::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36775:13:::1;36757:15;:31;;;;36817:13;36799:15;:31;;;;36853:7;36841:9;:19;;;;36922:9;;36904:15;;36886;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36871:12;:60;;;;36966:2;36950:12;;:18;;36942:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36641:369:::0;;;:::o;34796:191::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34867:4:::1;34851:13;;:20;;;;;;;;;;;;;;;;;;34896:4;34882:11;;:18;;;;;;;;;;;;;;;;;;34928:15;34911:14;:32;;;;34967:12;34954:10;:25;;;;34796:191::o:0;21522:79::-;21560:7;21587:6;;;;;;;;;;;21580:13;;21522:79;:::o;29900:24::-;;;;;;;;;;;;;:::o;31026:31::-;;;;:::o;36531:101::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36617:7:::1;36603:11;;:21;;;;;;;;;;;;;;;;;;36531:101:::0;:::o;7884:104::-;7940:13;7973:7;7966:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7884:104;:::o;37741:245::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37848:13:::1;37840:21;;:4;:21;;::::0;37832:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37937:41;37966:4;37972:5;37937:28;:41::i;:::-;37741:245:::0;;:::o;30957:24::-;;;;:::o;30289:35::-;;;;:::o;29865:28::-;;;;;;;;;;;;;:::o;31217:27::-;;;;:::o;31102:25::-;;;;:::o;11977:269::-;12070:4;12087:129;12096:12;:10;:12::i;:::-;12110:7;12119:96;12158:15;12119:96;;;;;;;;;;;;;;;;;:11;:25;12131:12;:10;:12::i;:::-;12119:25;;;;;;;;;;;;;;;:34;12145:7;12119:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12087:8;:129::i;:::-;12234:4;12227:11;;11977:269;;;;:::o;30197:29::-;;;;:::o;9300:175::-;9386:4;9403:42;9413:12;:10;:12::i;:::-;9427:9;9438:6;9403:9;:42::i;:::-;9463:4;9456:11;;9300:175;;;;:::o;38193:204::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38330:13:::1;;;;;;;;;;;38287:57;;38310:18;38287:57;;;;;;;;;;;;38371:18;38355:13;;:34;;;;;;;;;;;;;;;;;;38193:204:::0;:::o;31686:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30374:33::-;;;;;;;;;;;;;:::o;37406:182::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37522:8:::1;37491:19;:28;37511:7;37491:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37562:7;37546:34;;;37571:8;37546:34;;;;;;:::i;:::-;;;;;;;;37406:182:::0;;:::o;37019:378::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:13:::1;37136:16;:32;;;;37198:13;37179:16;:32;;;;37235:7;37222:10;:20;;;;37307:10;;37288:16;;37269;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37253:13;:64;;;;37353:2;37336:13;;:19;;37328:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37019:378:::0;;;:::o;36066:215::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36188:4:::1;36182;36178:1;36162:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36161:31;;;;:::i;:::-;36151:6;:41;;36143:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36266:6;36256;:17;;;;:::i;:::-;36244:9;:29;;;;36066:215:::0;:::o;30800:39::-;;;;;;;;;;;;;:::o;29934:35::-;;;;:::o;35428:386::-;35509:4;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35566:6:::1;35562:1;35546:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35533:9;:39;;35525:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35682:4;35678:1;35662:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35649:9;:37;;35641:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35775:9;35754:18;:30;;;;35802:4;35795:11;;35428:386:::0;;;:::o;30849:27::-;;;;:::o;9539:151::-;9628:7;9655:11;:18;9667:5;9655:18;;;;;;;;;;;;;;;:27;9674:7;9655:27;;;;;;;;;;;;;;;;9648:34;;9539:151;;;;:::o;29976:33::-;;;;:::o;35222:134::-;35282:4;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35321:5:::1;35298:20;;:28;;;;;;;;;;;;;;;;;;35344:4;35337:11;;35222:134:::0;:::o;30920:30::-;;;;:::o;22470:244::-;21745:12;:10;:12::i;:::-;21735:22;;:6;;;;;;;;;;;:22;;;21727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22579:1:::1;22559:22;;:8;:22;;::::0;22551:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22669:8;22640:38;;22661:6;;;;;;;;;;;22640:38;;;;;;;;;;;;22698:8;22689:6;;:17;;;;;;;;;;;;;;;;;;22470:244:::0;:::o;29739:85::-;29781:42;29739:85;:::o;31064:31::-;;;;:::o;30016:24::-;;;;:::o;45336:998::-;45410:4;45475:19;;45452:20;;:42;;;;:::i;:::-;45434:15;:60;45426:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45551:19;:31;45571:10;45551:31;;;;;;;;;;;;;;;;;;;;;;;;;45543:40;;;;;;45617:15;45594:20;:38;;;;45688:28;45719:4;:14;;;45734:13;45719:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45688:60;;45799:20;45822:44;45860:5;45822:33;45847:7;45822:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;45799:67;;45987:1;45972:12;:16;45968:107;;;46004:59;46020:13;46043:4;46050:12;46004:15;:59::i;:::-;45968:107;46151:19;46188:13;46151:51;;46213:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46235:39;46252:12;29781:42;46235:16;:39::i;:::-;46290:14;;;;;;;;;;46322:4;46315:11;;;;;45336:998;;;:::o;271:98::-;324:7;351:10;344:17;;271:98;:::o;15173:381::-;15326:1;15309:19;;:5;:19;;;15301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15407:1;15388:21;;:7;:21;;;15380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15492:6;15462:11;:18;15474:5;15462:18;;;;;;;;;;;;;;;:27;15481:7;15462:27;;;;;;;;;;;;;;;:36;;;;15530:7;15514:32;;15523:5;15514:32;;;15539:6;15514:32;;;;;;:::i;:::-;;;;;;;;15173:381;;;:::o;38759:4689::-;38907:1;38891:18;;:4;:18;;;38883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38984:1;38970:16;;:2;:16;;;38962:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39046:10;:14;39057:2;39046:14;;;;;;;;;;;;;;;;;;;;;;;;;39045:15;:36;;;;;39065:10;:16;39076:4;39065:16;;;;;;;;;;;;;;;;;;;;;;;;;39064:17;39045:36;39037:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39160:1;39150:6;:11;39147:92;;39178:28;39194:4;39200:2;39204:1;39178:15;:28::i;:::-;39221:7;;39147:92;39255:14;;;;;;;;;;;39252:1874;;;39315:7;:5;:7::i;:::-;39307:15;;:4;:15;;;;:49;;;;;39349:7;:5;:7::i;:::-;39343:13;;:2;:13;;;;39307:49;:86;;;;;39391:1;39377:16;;:2;:16;;;;39307:86;:128;;;;;39428:6;39414:21;;:2;:21;;;;39307:128;:158;;;;;39457:8;;;;;;;;;;;39456:9;39307:158;39285:1830;;;39503:13;;;;;;;;;;;39499:148;;39548:19;:25;39568:4;39548:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39577:19;:23;39597:2;39577:23;;;;;;;;;;;;;;;;;;;;;;;;;39548:52;39540:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39499:148;39806:20;;;;;;;;;;;39802:423;;;39860:7;:5;:7::i;:::-;39854:13;;:2;:13;;;;:47;;;;;39885:15;39871:30;;:2;:30;;;;39854:47;:79;;;;;39919:13;39905:28;;:2;:28;;;;39854:79;39850:356;;;40011:12;39969:28;:39;39998:9;39969:39;;;;;;;;;;;;;;;;:54;39961:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40170:12;40128:28;:39;40157:9;40128:39;;;;;;;;;;;;;;;:54;;;;39850:356;39802:423;40278:25;:31;40304:4;40278:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40314:31;:35;40346:2;40314:35;;;;;;;;;;;;;;;;;;;;;;;;;40313:36;40278:71;40274:826;;;40396:20;;40386:6;:30;;40378:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40535:9;;40518:13;40528:2;40518:9;:13::i;:::-;40509:6;:22;;;;:::i;:::-;:35;;40501:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40274:826;;;40647:25;:29;40673:2;40647:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40681:31;:37;40713:4;40681:37;;;;;;;;;;;;;;;;;;;;;;;;;40680:38;40647:71;40643:457;;;40765:20;;40755:6;:30;;40747:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40888:18;29781:42;40888:9;:18::i;:::-;40879:6;:27;40871:36;;;;;;40643:457;;;40954:31;:35;40986:2;40954:35;;;;;;;;;;;;;;;;;;;;;;;;;40950:150;;41047:9;;41030:13;41040:2;41030:9;:13::i;:::-;41021:6;:22;;;;:::i;:::-;:35;;41013:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40950:150;40643:457;40274:826;39285:1830;39252:1874;41200:1;41187:10;;:14;;;;:::i;:::-;41170:12;:32;;:73;;;;;41230:13;41224:19;;:2;:19;;;;41170:73;:152;;;;;41279:42;41265:57;;:2;:57;;;;41170:152;41166:225;;;41371:4;41354:10;:14;41365:2;41354:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41166:225;41403:28;41434:24;41452:4;41434:9;:24::i;:::-;41403:55;;41472:12;41511:18;;41487:20;:42;;41472:57;;41561:7;:35;;;;;41585:11;;;;;;;;;;;41561:35;:61;;;;;41614:8;;;;;;;;;;;41613:9;41561:61;:110;;;;;41640:25;:31;41666:4;41640:31;;;;;;;;;;;;;;;;;;;;;;;;;41639:32;41561:110;:153;;;;;41689:19;:25;41709:4;41689:25;;;;;;;;;;;;;;;;;;;;;;;;;41688:26;41561:153;:194;;;;;41732:19;:23;41752:2;41732:23;;;;;;;;;;;;;;;;;;;;;;;;;41731:24;41561:194;41543:328;;;41793:4;41782:8;;:15;;;;;;;;;;;;;;;;;;41815:10;:8;:10::i;:::-;41854:5;41843:8;;:16;;;;;;;;;;;;;;;;;;41543:328;41888:8;;;;;;;;;;;41887:9;:42;;;;;41900:25;:29;41926:2;41900:29;;;;;;;;;;;;;;;;;;;;;;;;;41887:42;:59;;;;;41933:13;;;;;;;;;;;41887:59;:114;;;;;41986:15;;41969:14;;:32;;;;:::i;:::-;41950:15;:51;;41887:114;:144;;;;;42006:19;:25;42026:4;42006:25;;;;;;;;;;;;;;;;;;;;;;;;;42005:26;41887:144;41884:204;;;42047:29;:27;:29::i;:::-;;41884:204;42101:12;42117:8;;;;;;;;;;;42116:9;42101:24;;42227:19;:25;42247:4;42227:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42256:19;:23;42276:2;42256:23;;;;;;;;;;;;;;;;;;;;;;;;;42227:52;42224:99;;;42306:5;42296:15;;42224:99;42336:12;42440:7;42437:957;;;42491:25;:29;42517:2;42491:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42540:1;42524:13;;:17;42491:50;42487:754;;;42568:34;42598:3;42568:25;42579:13;;42568:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42561:41;;42669:13;;42650:16;;42643:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42621:18;;:61;;;;;;;:::i;:::-;;;;;;;;42737:13;;42724:10;;42717:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42701:12;;:49;;;;;;;:::i;:::-;;;;;;;;42817:13;;42798:16;;42791:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42769:18;;:61;;;;;;;:::i;:::-;;;;;;;;42487:754;;;42891:25;:31;42917:4;42891:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42941:1;42926:12;;:16;42891:51;42888:353;;;42970:33;42999:3;42970:24;42981:12;;42970:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42963:40;;43069:12;;43051:15;;43044:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43022:18;;:59;;;;;;;:::i;:::-;;;;;;;;43135:12;;43123:9;;43116:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43100:12;;:47;;;;;;;:::i;:::-;;;;;;;;43213:12;;43195:15;;43188:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43166:18;;:59;;;;;;;:::i;:::-;;;;;;;;42888:353;42487:754;43268:1;43261:4;:8;43258:93;;;43293:42;43309:4;43323;43330;43293:15;:42::i;:::-;43258:93;43378:4;43368:14;;;;;:::i;:::-;;;42437:957;43407:33;43423:4;43429:2;43433:6;43407:15;:33::i;:::-;38872:4576;;;;38759:4689;;;;:::o;17460:193::-;17546:7;17579:1;17574;:6;;17582:12;17566:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17606:9;17622:1;17618;:5;;;;:::i;:::-;17606:17;;17644:1;17637:8;;;17460:193;;;;;:::o;16554:182::-;16612:7;16632:9;16648:1;16644;:5;;;;:::i;:::-;16632:17;;16673:1;16668;:6;;16660:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16727:1;16720:8;;;16554:182;;;;:::o;37995:189::-;38112:5;38078:25;:31;38104:4;38078:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38170:5;38136:40;;38164:4;38136:40;;;;;;;;;;;;37995:189;;:::o;17913:473::-;17971:7;18221:1;18216;:6;18212:47;;18246:1;18239:8;;;;18212:47;18272:9;18288:1;18284;:5;;;;:::i;:::-;18272:17;;18317:1;18312;18308;:5;;;;:::i;:::-;:10;18300:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18377:1;18370:8;;;17913:473;;;;;:::o;18863:132::-;18921:7;18948:39;18952:1;18955;18948:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18941:46;;18863:132;;;;:::o;12737:575::-;12895:1;12877:20;;:6;:20;;;12869:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12979:1;12958:23;;:9;:23;;;12950:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13035:47;13056:6;13064:9;13075:6;13035:20;:47::i;:::-;13116:71;13138:6;13116:71;;;;;;;;;;;;;;;;;:9;:17;13126:6;13116:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13096:9;:17;13106:6;13096:17;;;;;;;;;;;;;;;:91;;;;13221:32;13246:6;13221:9;:20;13231:9;13221:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13198:9;:20;13208:9;13198:20;;;;;;;;;;;;;;;:55;;;;13286:9;13269:35;;13278:6;13269:35;;;13297:6;13269:35;;;;;;:::i;:::-;;;;;;;;12737:575;;;:::o;43457:602::-;43597:21;43635:1;43621:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43597:40;;43666:4;43648;43653:1;43648:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43692:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43682:4;43687:1;43682:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43727:62;43744:4;43759:15;43777:11;43727:8;:62::i;:::-;43828:15;:66;;;43909:11;43935:1;43979:4;43998:2;44015:15;43828:213;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43524:535;43457:602;;:::o;44591:277::-;44630:23;44656:9;:24;44674:4;44656:24;;;;;;;;;;;;;;;;44630:50;;44691:12;44716:48;44733:15;44758:4;44716:16;:48::i;:::-;44807:13;;;;;;;;;;;44799:27;;44834:21;44799:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44786:74;;;;;44619:249;;44591:277::o;46342:769::-;46399:4;46434:15;46417:14;:32;;;;46505:28;46536:4;:14;;;46551:13;46536:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46505:60;;46616:20;46639:53;46686:5;46639:42;46664:16;;46639:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;46616:76;;46813:1;46798:12;:16;46794:110;;;46830:62;46846:13;29781:42;46879:12;46830:15;:62::i;:::-;46794:110;46980:19;47017:13;46980:51;;47042:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47069:12;;;;;;;;;;47099:4;47092:11;;;;;46342:769;:::o;19492:279::-;19578:7;19610:1;19606;:5;19613:12;19598:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19637:9;19653:1;19649;:5;;;;:::i;:::-;19637:17;;19762:1;19755:8;;;19492:279;;;;;:::o;16158:125::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:246::-;2117:1;2127:113;2141:6;2138:1;2135:13;2127:113;;;2226:1;2221:3;2217:11;2211:18;2207:1;2202:3;2198:11;2191:39;2163:2;2160:1;2156:10;2151:15;;2127:113;;;2274:1;2265:6;2260:3;2256:16;2249:27;2098:184;2036:246;;;:::o;2288:102::-;2329:6;2380:2;2376:7;2371:2;2364:5;2360:14;2356:28;2346:38;;2288:102;;;:::o;2396:377::-;2484:3;2512:39;2545:5;2512:39;:::i;:::-;2567:71;2631:6;2626:3;2567:71;:::i;:::-;2560:78;;2647:65;2705:6;2700:3;2693:4;2686:5;2682:16;2647:65;:::i;:::-;2737:29;2759:6;2737:29;:::i;:::-;2732:3;2728:39;2721:46;;2488:285;2396:377;;;;:::o;2779:313::-;2892:4;2930:2;2919:9;2915:18;2907:26;;2979:9;2973:4;2969:20;2965:1;2954:9;2950:17;2943:47;3007:78;3080:4;3071:6;3007:78;:::i;:::-;2999:86;;2779:313;;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:116::-;6621:21;6636:5;6621:21;:::i;:::-;6614:5;6611:32;6601:60;;6657:1;6654;6647:12;6601:60;6551:116;:::o;6673:133::-;6716:5;6754:6;6741:20;6732:29;;6770:30;6794:5;6770:30;:::i;:::-;6673:133;;;;:::o;6812:468::-;6877:6;6885;6934:2;6922:9;6913:7;6909:23;6905:32;6902:119;;;6940:79;;:::i;:::-;6902:119;7060:1;7085:53;7130:7;7121:6;7110:9;7106:22;7085:53;:::i;:::-;7075:63;;7031:117;7187:2;7213:50;7255:7;7246:6;7235:9;7231:22;7213:50;:::i;:::-;7203:60;;7158:115;6812:468;;;;;:::o;7286:86::-;7321:7;7361:4;7354:5;7350:16;7339:27;;7286:86;;;:::o;7378:112::-;7461:22;7477:5;7461:22;:::i;:::-;7456:3;7449:35;7378:112;;:::o;7496:214::-;7585:4;7623:2;7612:9;7608:18;7600:26;;7636:67;7700:1;7689:9;7685:17;7676:6;7636:67;:::i;:::-;7496:214;;;;:::o;7716:118::-;7803:24;7821:5;7803:24;:::i;:::-;7798:3;7791:37;7716:118;;:::o;7840:222::-;7933:4;7971:2;7960:9;7956:18;7948:26;;7984:71;8052:1;8041:9;8037:17;8028:6;7984:71;:::i;:::-;7840:222;;;;:::o;8068:613::-;8142:6;8150;8158;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8333:1;8358:53;8403:7;8394:6;8383:9;8379:22;8358:53;:::i;:::-;8348:63;;8304:117;8460:2;8486:53;8531:7;8522:6;8511:9;8507:22;8486:53;:::i;:::-;8476:63;;8431:118;8588:2;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8559:115;8068:613;;;;;:::o;8687:619::-;8764:6;8772;8780;8829:2;8817:9;8808:7;8804:23;8800:32;8797:119;;;8835:79;;:::i;:::-;8797:119;8955:1;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8926:117;9082:2;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9053:118;9210:2;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9181:118;8687:619;;;;;:::o;9312:323::-;9368:6;9417:2;9405:9;9396:7;9392:23;9388:32;9385:119;;;9423:79;;:::i;:::-;9385:119;9543:1;9568:50;9610:7;9601:6;9590:9;9586:22;9568:50;:::i;:::-;9558:60;;9514:114;9312:323;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:238::-;13294:34;13290:1;13282:6;13278:14;13271:58;13363:21;13358:2;13350:6;13346:15;13339:46;13154:238;:::o;13398:366::-;13540:3;13561:67;13625:2;13620:3;13561:67;:::i;:::-;13554:74;;13637:93;13726:3;13637:93;:::i;:::-;13755:2;13750:3;13746:12;13739:19;;13398:366;;;:::o;13770:419::-;13936:4;13974:2;13963:9;13959:18;13951:26;;14023:9;14017:4;14013:20;14009:1;13998:9;13994:17;13987:47;14051:131;14177:4;14051:131;:::i;:::-;14043:139;;13770:419;;;:::o;14195:235::-;14335:34;14331:1;14323:6;14319:14;14312:58;14404:18;14399:2;14391:6;14387:15;14380:43;14195:235;:::o;14436:366::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:419::-;14974:4;15012:2;15001:9;14997:18;14989:26;;15061:9;15055:4;15051:20;15047:1;15036:9;15032:17;15025:47;15089:131;15215:4;15089:131;:::i;:::-;15081:139;;14808:419;;;:::o;15233:191::-;15273:3;15292:20;15310:1;15292:20;:::i;:::-;15287:25;;15326:20;15344:1;15326:20;:::i;:::-;15321:25;;15369:1;15366;15362:9;15355:16;;15390:3;15387:1;15384:10;15381:36;;;15397:18;;:::i;:::-;15381:36;15233:191;;;;:::o;15430:179::-;15570:31;15566:1;15558:6;15554:14;15547:55;15430:179;:::o;15615:366::-;15757:3;15778:67;15842:2;15837:3;15778:67;:::i;:::-;15771:74;;15854:93;15943:3;15854:93;:::i;:::-;15972:2;15967:3;15963:12;15956:19;;15615:366;;;:::o;15987:419::-;16153:4;16191:2;16180:9;16176:18;16168:26;;16240:9;16234:4;16230:20;16226:1;16215:9;16211:17;16204:47;16268:131;16394:4;16268:131;:::i;:::-;16260:139;;15987:419;;;:::o;16412:244::-;16552:34;16548:1;16540:6;16536:14;16529:58;16621:27;16616:2;16608:6;16604:15;16597:52;16412:244;:::o;16662:366::-;16804:3;16825:67;16889:2;16884:3;16825:67;:::i;:::-;16818:74;;16901:93;16990:3;16901:93;:::i;:::-;17019:2;17014:3;17010:12;17003:19;;16662:366;;;:::o;17034:419::-;17200:4;17238:2;17227:9;17223:18;17215:26;;17287:9;17281:4;17277:20;17273:1;17262:9;17258:17;17251:47;17315:131;17441:4;17315:131;:::i;:::-;17307:139;;17034:419;;;:::o;17459:223::-;17599:34;17595:1;17587:6;17583:14;17576:58;17668:6;17663:2;17655:6;17651:15;17644:31;17459:223;:::o;17688:366::-;17830:3;17851:67;17915:2;17910:3;17851:67;:::i;:::-;17844:74;;17927:93;18016:3;17927:93;:::i;:::-;18045:2;18040:3;18036:12;18029:19;;17688:366;;;:::o;18060:419::-;18226:4;18264:2;18253:9;18249:18;18241:26;;18313:9;18307:4;18303:20;18299:1;18288:9;18284:17;18277:47;18341:131;18467:4;18341:131;:::i;:::-;18333:139;;18060:419;;;:::o;18485:240::-;18625:34;18621:1;18613:6;18609:14;18602:58;18694:23;18689:2;18681:6;18677:15;18670:48;18485:240;:::o;18731:366::-;18873:3;18894:67;18958:2;18953:3;18894:67;:::i;:::-;18887:74;;18970:93;19059:3;18970:93;:::i;:::-;19088:2;19083:3;19079:12;19072:19;;18731:366;;;:::o;19103:419::-;19269:4;19307:2;19296:9;19292:18;19284:26;;19356:9;19350:4;19346:20;19342:1;19331:9;19327:17;19320:47;19384:131;19510:4;19384:131;:::i;:::-;19376:139;;19103:419;;;:::o;19528:239::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:22;19732:2;19724:6;19720:15;19713:47;19528:239;:::o;19773:366::-;19915:3;19936:67;20000:2;19995:3;19936:67;:::i;:::-;19929:74;;20012:93;20101:3;20012:93;:::i;:::-;20130:2;20125:3;20121:12;20114:19;;19773:366;;;:::o;20145:419::-;20311:4;20349:2;20338:9;20334:18;20326:26;;20398:9;20392:4;20388:20;20384:1;20373:9;20369:17;20362:47;20426:131;20552:4;20426:131;:::i;:::-;20418:139;;20145:419;;;:::o;20570:225::-;20710:34;20706:1;20698:6;20694:14;20687:58;20779:8;20774:2;20766:6;20762:15;20755:33;20570:225;:::o;20801:366::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20801:366;;;:::o;21173:419::-;21339:4;21377:2;21366:9;21362:18;21354:26;;21426:9;21420:4;21416:20;21412:1;21401:9;21397:17;21390:47;21454:131;21580:4;21454:131;:::i;:::-;21446:139;;21173:419;;;:::o;21598:182::-;21738:34;21734:1;21726:6;21722:14;21715:58;21598:182;:::o;21786:366::-;21928:3;21949:67;22013:2;22008:3;21949:67;:::i;:::-;21942:74;;22025:93;22114:3;22025:93;:::i;:::-;22143:2;22138:3;22134:12;22127:19;;21786:366;;;:::o;22158:419::-;22324:4;22362:2;22351:9;22347:18;22339:26;;22411:9;22405:4;22401:20;22397:1;22386:9;22382:17;22375:47;22439:131;22565:4;22439:131;:::i;:::-;22431:139;;22158:419;;;:::o;22583:143::-;22640:5;22671:6;22665:13;22656:22;;22687:33;22714:5;22687:33;:::i;:::-;22583:143;;;;:::o;22732:351::-;22802:6;22851:2;22839:9;22830:7;22826:23;22822:32;22819:119;;;22857:79;;:::i;:::-;22819:119;22977:1;23002:64;23058:7;23049:6;23038:9;23034:22;23002:64;:::i;:::-;22992:74;;22948:128;22732:351;;;;:::o;23089:223::-;23229:34;23225:1;23217:6;23213:14;23206:58;23298:6;23293:2;23285:6;23281:15;23274:31;23089:223;:::o;23318:366::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:419::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:221::-;24255:34;24251:1;24243:6;24239:14;24232:58;24324:4;24319:2;24311:6;24307:15;24300:29;24115:221;:::o;24342:366::-;24484:3;24505:67;24569:2;24564:3;24505:67;:::i;:::-;24498:74;;24581:93;24670:3;24581:93;:::i;:::-;24699:2;24694:3;24690:12;24683:19;;24342:366;;;:::o;24714:419::-;24880:4;24918:2;24907:9;24903:18;24895:26;;24967:9;24961:4;24957:20;24953:1;24942:9;24938:17;24931:47;24995:131;25121:4;24995:131;:::i;:::-;24987:139;;24714:419;;;:::o;25139:224::-;25279:34;25275:1;25267:6;25263:14;25256:58;25348:7;25343:2;25335:6;25331:15;25324:32;25139:224;:::o;25369:366::-;25511:3;25532:67;25596:2;25591:3;25532:67;:::i;:::-;25525:74;;25608:93;25697:3;25608:93;:::i;:::-;25726:2;25721:3;25717:12;25710:19;;25369:366;;;:::o;25741:419::-;25907:4;25945:2;25934:9;25930:18;25922:26;;25994:9;25988:4;25984:20;25980:1;25969:9;25965:17;25958:47;26022:131;26148:4;26022:131;:::i;:::-;26014:139;;25741:419;;;:::o;26166:222::-;26306:34;26302:1;26294:6;26290:14;26283:58;26375:5;26370:2;26362:6;26358:15;26351:30;26166:222;:::o;26394:366::-;26536:3;26557:67;26621:2;26616:3;26557:67;:::i;:::-;26550:74;;26633:93;26722:3;26633:93;:::i;:::-;26751:2;26746:3;26742:12;26735:19;;26394:366;;;:::o;26766:419::-;26932:4;26970:2;26959:9;26955:18;26947:26;;27019:9;27013:4;27009:20;27005:1;26994:9;26990:17;26983:47;27047:131;27173:4;27047:131;:::i;:::-;27039:139;;26766:419;;;:::o;27191:236::-;27331:34;27327:1;27319:6;27315:14;27308:58;27400:19;27395:2;27387:6;27383:15;27376:44;27191:236;:::o;27433:366::-;27575:3;27596:67;27660:2;27655:3;27596:67;:::i;:::-;27589:74;;27672:93;27761:3;27672:93;:::i;:::-;27790:2;27785:3;27781:12;27774:19;;27433:366;;;:::o;27805:419::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:172::-;28370:24;28366:1;28358:6;28354:14;28347:48;28230:172;:::o;28408:366::-;28550:3;28571:67;28635:2;28630:3;28571:67;:::i;:::-;28564:74;;28647:93;28736:3;28647:93;:::i;:::-;28765:2;28760:3;28756:12;28749:19;;28408:366;;;:::o;28780:419::-;28946:4;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28780:419;;;:::o;29205:297::-;29345:34;29341:1;29333:6;29329:14;29322:58;29414:34;29409:2;29401:6;29397:15;29390:59;29483:11;29478:2;29470:6;29466:15;29459:36;29205:297;:::o;29508:366::-;29650:3;29671:67;29735:2;29730:3;29671:67;:::i;:::-;29664:74;;29747:93;29836:3;29747:93;:::i;:::-;29865:2;29860:3;29856:12;29849:19;;29508:366;;;:::o;29880:419::-;30046:4;30084:2;30073:9;30069:18;30061:26;;30133:9;30127:4;30123:20;30119:1;30108:9;30104:17;30097:47;30161:131;30287:4;30161:131;:::i;:::-;30153:139;;29880:419;;;:::o;30305:240::-;30445:34;30441:1;30433:6;30429:14;30422:58;30514:23;30509:2;30501:6;30497:15;30490:48;30305:240;:::o;30551:366::-;30693:3;30714:67;30778:2;30773:3;30714:67;:::i;:::-;30707:74;;30790:93;30879:3;30790:93;:::i;:::-;30908:2;30903:3;30899:12;30892:19;;30551:366;;;:::o;30923:419::-;31089:4;31127:2;31116:9;31112:18;31104:26;;31176:9;31170:4;31166:20;31162:1;31151:9;31147:17;31140:47;31204:131;31330:4;31204:131;:::i;:::-;31196:139;;30923:419;;;:::o;31348:169::-;31488:21;31484:1;31476:6;31472:14;31465:45;31348:169;:::o;31523:366::-;31665:3;31686:67;31750:2;31745:3;31686:67;:::i;:::-;31679:74;;31762:93;31851:3;31762:93;:::i;:::-;31880:2;31875:3;31871:12;31864:19;;31523:366;;;:::o;31895:419::-;32061:4;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;31895:419;;;:::o;32320:241::-;32460:34;32456:1;32448:6;32444:14;32437:58;32529:24;32524:2;32516:6;32512:15;32505:49;32320:241;:::o;32567:366::-;32709:3;32730:67;32794:2;32789:3;32730:67;:::i;:::-;32723:74;;32806:93;32895:3;32806:93;:::i;:::-;32924:2;32919:3;32915:12;32908:19;;32567:366;;;:::o;32939:419::-;33105:4;33143:2;33132:9;33128:18;33120:26;;33192:9;33186:4;33182:20;33178:1;33167:9;33163:17;33156:47;33220:131;33346:4;33220:131;:::i;:::-;33212:139;;32939:419;;;:::o;33364:194::-;33404:4;33424:20;33442:1;33424:20;:::i;:::-;33419:25;;33458:20;33476:1;33458:20;:::i;:::-;33453:25;;33502:1;33499;33495:9;33487:17;;33526:1;33520:4;33517:11;33514:37;;;33531:18;;:::i;:::-;33514:37;33364:194;;;;:::o;33564:177::-;33704:29;33700:1;33692:6;33688:14;33681:53;33564:177;:::o;33747:366::-;33889:3;33910:67;33974:2;33969:3;33910:67;:::i;:::-;33903:74;;33986:93;34075:3;33986:93;:::i;:::-;34104:2;34099:3;34095:12;34088:19;;33747:366;;;:::o;34119:419::-;34285:4;34323:2;34312:9;34308:18;34300:26;;34372:9;34366:4;34362:20;34358:1;34347:9;34343:17;34336:47;34400:131;34526:4;34400:131;:::i;:::-;34392:139;;34119:419;;;:::o;34544:220::-;34684:34;34680:1;34672:6;34668:14;34661:58;34753:3;34748:2;34740:6;34736:15;34729:28;34544:220;:::o;34770:366::-;34912:3;34933:67;34997:2;34992:3;34933:67;:::i;:::-;34926:74;;35009:93;35098:3;35009:93;:::i;:::-;35127:2;35122:3;35118:12;35111:19;;34770:366;;;:::o;35142:419::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35142:419;;;:::o;35567:180::-;35615:77;35612:1;35605:88;35712:4;35709:1;35702:15;35736:4;35733:1;35726:15;35753:180;35801:77;35798:1;35791:88;35898:4;35895:1;35888:15;35922:4;35919:1;35912:15;35939:143;35996:5;36027:6;36021:13;36012:22;;36043:33;36070:5;36043:33;:::i;:::-;35939:143;;;;:::o;36088:351::-;36158:6;36207:2;36195:9;36186:7;36182:23;36178:32;36175:119;;;36213:79;;:::i;:::-;36175:119;36333:1;36358:64;36414:7;36405:6;36394:9;36390:22;36358:64;:::i;:::-;36348:74;;36304:128;36088:351;;;;:::o;36445:85::-;36490:7;36519:5;36508:16;;36445:85;;;:::o;36536:158::-;36594:9;36627:61;36645:42;36654:32;36680:5;36654:32;:::i;:::-;36645:42;:::i;:::-;36627:61;:::i;:::-;36614:74;;36536:158;;;:::o;36700:147::-;36795:45;36834:5;36795:45;:::i;:::-;36790:3;36783:58;36700:147;;:::o;36853:114::-;36920:6;36954:5;36948:12;36938:22;;36853:114;;;:::o;36973:184::-;37072:11;37106:6;37101:3;37094:19;37146:4;37141:3;37137:14;37122:29;;36973:184;;;;:::o;37163:132::-;37230:4;37253:3;37245:11;;37283:4;37278:3;37274:14;37266:22;;37163:132;;;:::o;37301:108::-;37378:24;37396:5;37378:24;:::i;:::-;37373:3;37366:37;37301:108;;:::o;37415:179::-;37484:10;37505:46;37547:3;37539:6;37505:46;:::i;:::-;37583:4;37578:3;37574:14;37560:28;;37415:179;;;;:::o;37600:113::-;37670:4;37702;37697:3;37693:14;37685:22;;37600:113;;;:::o;37749:732::-;37868:3;37897:54;37945:5;37897:54;:::i;:::-;37967:86;38046:6;38041:3;37967:86;:::i;:::-;37960:93;;38077:56;38127:5;38077:56;:::i;:::-;38156:7;38187:1;38172:284;38197:6;38194:1;38191:13;38172:284;;;38273:6;38267:13;38300:63;38359:3;38344:13;38300:63;:::i;:::-;38293:70;;38386:60;38439:6;38386:60;:::i;:::-;38376:70;;38232:224;38219:1;38216;38212:9;38207:14;;38172:284;;;38176:14;38472:3;38465:10;;37873:608;;;37749:732;;;;:::o;38487:831::-;38750:4;38788:3;38777:9;38773:19;38765:27;;38802:71;38870:1;38859:9;38855:17;38846:6;38802:71;:::i;:::-;38883:80;38959:2;38948:9;38944:18;38935:6;38883:80;:::i;:::-;39010:9;39004:4;39000:20;38995:2;38984:9;38980:18;38973:48;39038:108;39141:4;39132:6;39038:108;:::i;:::-;39030:116;;39156:72;39224:2;39213:9;39209:18;39200:6;39156:72;:::i;:::-;39238:73;39306:3;39295:9;39291:19;39282:6;39238:73;:::i;:::-;38487:831;;;;;;;;:::o;39324:147::-;39425:11;39462:3;39447:18;;39324:147;;;;:::o;39477:114::-;;:::o;39597:398::-;39756:3;39777:83;39858:1;39853:3;39777:83;:::i;:::-;39770:90;;39869:93;39958:3;39869:93;:::i;:::-;39987:1;39982:3;39978:11;39971:18;;39597:398;;;:::o;40001:379::-;40185:3;40207:147;40350:3;40207:147;:::i;:::-;40200:154;;40371:3;40364:10;;40001:379;;;:::o

Swarm Source

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