ETH Price: $3,265.59 (+0.14%)
Gas: 2 Gwei

Token

Ordi Shiba (oSHIBA)
 

Overview

Max Total Supply

1,000,000,000 oSHIBA

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: oSHIBA 11
Balance
0.000000000024667928 oSHIBA

Value
$0.00
0xaab7a1a1217faad781622c3e19f9cccd6012b8c8
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:
oSHIBAToken

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: MIT
 */
// https://t.me/ordishibachannel
// We got the sats domain and made oshiba coin on BTC chain. More good stuff coming, follow us - we OGs on BTC chain.
/*
    Guess? We proved we're the real deal by minting our own Telegram on the BTC chain.
    https://ordinals.com/inscription/7a4b171c01203310a310551944508f60126dd13c886bc71515054b42c4085200i0
    https://ordinals.com/inscription/00eca46aee1e86461a54b1166d0f9679e11468d26237b8dbbf4bec8c9839e0bci0
    { 
        "p": "brc-20",
        "op": "deploy",
        "tick": "SHIBA",
        "max": "21000000"
    } 
*/


pragma solidity >=0.8.16;
pragma experimental ABIEncoderV2;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        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] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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 getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract oSHIBAToken is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("Ordi Shiba", "oSHIBA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply) / 100;
        maxWallet = (totalSupply) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x4F45cD639b79EcceF1609FbD8D6309a186575757); 
        devWallet = address(0x4F45cD639b79EcceF1609FbD8D6309a186575757);
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 10, "Must keep fees at  20% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        lpWallet = newLPWallet;
    }

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

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

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

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }
}

Contract Security Audit

Contract ABI

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

60c06040526019600c556001600d60006101000a81548160ff021916908315150217905550610e10600e556107086010556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600a81526020017f4f726469205368696261000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f6f53484942410000000000000000000000000000000000000000000000000000815250816003908162000127919062000e29565b50806004908162000139919062000e29565b5050506200015c620001506200067060201b60201c565b6200067860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001888160016200073e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e919062000f7a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000f7a565b6040518363ffffffff1660e01b8152600401620002db92919062000fbd565b6020604051808303816000875af1158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f7a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036960a05160016200073e60201b60201c565b6200037e60a05160016200082860201b60201c565b60006014905060008060006019905060008060006b033b2e3c9fd0803ce80000009050606481620003b0919062001048565b600981905550606481620003c5919062001048565b600b81905550612710600582620003dd919062001080565b620003e9919062001048565b600a81905550866016819055508560178190555084601881905550601854601754601654620004199190620010e1565b620004259190620010e1565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a54620004559190620010e1565b620004619190620010e1565b601981905550734f45cd639b79eccef1609fbd8d6309a186575757600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f45cd639b79eccef1609fbd8d6309a186575757600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057462000566620008c960201b60201c565b6001620008f360201b60201c565b62000587306001620008f360201b60201c565b6200059c61dead6001620008f360201b60201c565b620005d1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008f360201b60201c565b620005f3620005e5620008c960201b60201c565b60016200073e60201b60201c565b620006063060016200073e60201b60201c565b6200061b61dead60016200073e60201b60201c565b62000650600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073e60201b60201c565b62000662338262000a2d60201b60201c565b505050505050505062001279565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200074e6200067060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000774620008c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c4906200117d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009036200067060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000929620008c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000979906200117d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a219190620011bc565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a969062001229565b60405180910390fd5b62000ab36000838362000ba560201b60201c565b806002600082825462000ac79190620010e1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b1e9190620010e1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8591906200125c565b60405180910390a362000ba16000838362000baa60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3157607f821691505b60208210810362000c475762000c4662000be9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c72565b62000cbd868362000c72565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0a62000d0462000cfe8462000cd5565b62000cdf565b62000cd5565b9050919050565b6000819050919050565b62000d268362000ce9565b62000d3e62000d358262000d11565b84845462000c7f565b825550505050565b600090565b62000d5562000d46565b62000d6281848462000d1b565b505050565b5b8181101562000d8a5762000d7e60008262000d4b565b60018101905062000d68565b5050565b601f82111562000dd95762000da38162000c4d565b62000dae8462000c62565b8101602085101562000dbe578190505b62000dd662000dcd8562000c62565b83018262000d67565b50505b505050565b600082821c905092915050565b600062000dfe6000198460080262000dde565b1980831691505092915050565b600062000e19838362000deb565b9150826002028217905092915050565b62000e348262000baf565b67ffffffffffffffff81111562000e505762000e4f62000bba565b5b62000e5c825462000c18565b62000e6982828562000d8e565b600060209050601f83116001811462000ea1576000841562000e8c578287015190505b62000e98858262000e0b565b86555062000f08565b601f19841662000eb18662000c4d565b60005b8281101562000edb5784890151825560018201915060208501945060208101905062000eb4565b8683101562000efb578489015162000ef7601f89168262000deb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f428262000f15565b9050919050565b62000f548162000f35565b811462000f6057600080fd5b50565b60008151905062000f748162000f49565b92915050565b60006020828403121562000f935762000f9262000f10565b5b600062000fa38482850162000f63565b91505092915050565b62000fb78162000f35565b82525050565b600060408201905062000fd4600083018562000fac565b62000fe3602083018462000fac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010558262000cd5565b9150620010628362000cd5565b92508262001075576200107462000fea565b5b828204905092915050565b60006200108d8262000cd5565b91506200109a8362000cd5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010d657620010d562001019565b5b828202905092915050565b6000620010ee8262000cd5565b9150620010fb8362000cd5565b925082820190508082111562001116576200111562001019565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011656020836200111c565b915062001172826200112d565b602082019050919050565b60006020820190508181036000830152620011988162001156565b9050919050565b60008115159050919050565b620011b6816200119f565b82525050565b6000602082019050620011d36000830184620011ab565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001211601f836200111c565b91506200121e82620011d9565b602082019050919050565b60006020820190508181036000830152620012448162001202565b9050919050565b620012568162000cd5565b82525050565b60006020820190506200127360008301846200124b565b92915050565b60805160a051615d1c620013016000396000818161145801528181611c8e015281816128960152818161294d0152818161297a01528181612f8d0152818161408f015281816141480152614175015260008181610ffb01528181612f35015281816142bf015281816143a0015281816143c701528181614463015261448a0152615d1c6000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e6d578063f8b45b0514610e98578063fbc10c5514610ec3578063fe72b27a14610eec576103ce565b8063e2f4560514610dc3578063e884f26014610dee578063f11a24d314610e19578063f2fde38b14610e44576103ce565b8063c8c8ebe4116100dc578063c8c8ebe414610cf3578063d257b34f14610d1e578063d85ba06314610d5b578063dd62ed3e14610d86576103ce565b8063c024666814610c4d578063c17b5b8c14610c76578063c18bc19514610c9f578063c876d0b914610cc8576103ce565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b7f578063aacebbe314610bbc578063b62496f514610be5578063bbc0c74214610c22576103ce565b80639fccce3214610ac1578063a0d82dc514610aec578063a457c2d714610b17578063a4c82a0014610b54576103ce565b806395d89b41116101c157806395d89b4114610a175780639a7a23d614610a425780639c3b4fdc14610a6b5780639ec22c0e14610a96576103ce565b80638da5cb5b1461096d5780638ea5220f1461099857806392136913146109c3578063924de9b7146109ee576103ce565b806339509351116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108d75780637bce5a04146109025780638095d5641461092d5780638a8c523c14610956576103ce565b8063715018a614610843578063730c18881461085a578063751039fc146108835780637571336a146108ae576103ce565b80636303516c116102b15780636303516c146107855780636a486a8e146107b05780636ddd1713146107db57806370a0823114610806576103ce565b806339509351146106b557806349bd5a5e146106f25780634a62bb651461071d5780634fbee19314610748576103ce565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146106095780632c3e486c146106345780632e82f1a01461065f578063313ce5671461068a576103ce565b80631a8145bb1461054d5780631f3fed8f14610578578063203e727e146105a357806323b872dd146105cc576103ce565b806318160ddd1161039657806318160ddd146104a35780631816467f146104ce578063184c16c5146104f7578063199ffc7214610522576103ce565b806306fdde03146103d3578063095ea7b3146103fe57806310d5de531461043b5780631694505e14610478576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f29565b6040516103f591906145e9565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906146a4565b610fbb565b60405161043291906146ff565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d919061471a565b610fd9565b60405161046f91906146ff565b60405180910390f35b34801561048457600080fd5b5061048d610ff9565b60405161049a91906147a6565b60405180910390f35b3480156104af57600080fd5b506104b861101d565b6040516104c591906147d0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f0919061471a565b611027565b005b34801561050357600080fd5b5061050c611163565b60405161051991906147d0565b60405180910390f35b34801561052e57600080fd5b50610537611169565b60405161054491906147d0565b60405180910390f35b34801561055957600080fd5b5061056261116f565b60405161056f91906147d0565b60405180910390f35b34801561058457600080fd5b5061058d611175565b60405161059a91906147d0565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147eb565b61117b565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190614818565b61128a565b60405161060091906146ff565b60405180910390f35b34801561061557600080fd5b5061061e611382565b60405161062b919061487a565b60405180910390f35b34801561064057600080fd5b50610649611388565b60405161065691906147d0565b60405180910390f35b34801561066b57600080fd5b5061067461138e565b60405161068191906146ff565b60405180910390f35b34801561069657600080fd5b5061069f6113a1565b6040516106ac91906148b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906146a4565b6113aa565b6040516106e991906146ff565b60405180910390f35b3480156106fe57600080fd5b50610707611456565b604051610714919061487a565b60405180910390f35b34801561072957600080fd5b5061073261147a565b60405161073f91906146ff565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061471a565b61148d565b60405161077c91906146ff565b60405180910390f35b34801561079157600080fd5b5061079a6114e3565b6040516107a7919061487a565b60405180910390f35b3480156107bc57600080fd5b506107c5611509565b6040516107d291906147d0565b60405180910390f35b3480156107e757600080fd5b506107f061150f565b6040516107fd91906146ff565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061471a565b611522565b60405161083a91906147d0565b60405180910390f35b34801561084f57600080fd5b5061085861156a565b005b34801561086657600080fd5b50610881600480360381019061087c91906148f8565b6115f2565b005b34801561088f57600080fd5b50610898611732565b6040516108a591906146ff565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d0919061494b565b6117d2565b005b3480156108e357600080fd5b506108ec6118a9565b6040516108f9919061487a565b60405180910390f35b34801561090e57600080fd5b506109176118cf565b60405161092491906147d0565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061498b565b6118d5565b005b34801561096257600080fd5b5061096b6119d4565b005b34801561097957600080fd5b50610982611a8f565b60405161098f919061487a565b60405180910390f35b3480156109a457600080fd5b506109ad611ab9565b6040516109ba919061487a565b60405180910390f35b3480156109cf57600080fd5b506109d8611adf565b6040516109e591906147d0565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906149de565b611ae5565b005b348015610a2357600080fd5b50610a2c611b7e565b604051610a3991906145e9565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061494b565b611c10565b005b348015610a7757600080fd5b50610a80611d28565b604051610a8d91906147d0565b60405180910390f35b348015610aa257600080fd5b50610aab611d2e565b604051610ab891906147d0565b60405180910390f35b348015610acd57600080fd5b50610ad6611d34565b604051610ae391906147d0565b60405180910390f35b348015610af857600080fd5b50610b01611d3a565b604051610b0e91906147d0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b3991906146a4565b611d40565b604051610b4b91906146ff565b60405180910390f35b348015610b6057600080fd5b50610b69611e2b565b604051610b7691906147d0565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba191906146a4565b611e31565b604051610bb391906146ff565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061471a565b611e4f565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061471a565b611f8b565b604051610c1991906146ff565b60405180910390f35b348015610c2e57600080fd5b50610c37611fab565b604051610c4491906146ff565b60405180910390f35b348015610c5957600080fd5b50610c746004803603810190610c6f919061494b565b611fbe565b005b348015610c8257600080fd5b50610c9d6004803603810190610c98919061498b565b6120e3565b005b348015610cab57600080fd5b50610cc66004803603810190610cc191906147eb565b6121e2565b005b348015610cd457600080fd5b50610cdd6122f1565b604051610cea91906146ff565b60405180910390f35b348015610cff57600080fd5b50610d08612304565b604051610d1591906147d0565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906147eb565b61230a565b604051610d5291906146ff565b60405180910390f35b348015610d6757600080fd5b50610d7061245f565b604051610d7d91906147d0565b60405180910390f35b348015610d9257600080fd5b50610dad6004803603810190610da89190614a0b565b612465565b604051610dba91906147d0565b60405180910390f35b348015610dcf57600080fd5b50610dd86124ec565b604051610de591906147d0565b60405180910390f35b348015610dfa57600080fd5b50610e036124f2565b604051610e1091906146ff565b60405180910390f35b348015610e2557600080fd5b50610e2e612592565b604051610e3b91906147d0565b60405180910390f35b348015610e5057600080fd5b50610e6b6004803603810190610e66919061471a565b612598565b005b348015610e7957600080fd5b50610e8261268f565b604051610e8f91906147d0565b60405180910390f35b348015610ea457600080fd5b50610ead612695565b604051610eba91906147d0565b60405180910390f35b348015610ecf57600080fd5b50610eea6004803603810190610ee5919061471a565b61269b565b005b348015610ef857600080fd5b50610f136004803603810190610f0e91906147eb565b61275b565b604051610f2091906146ff565b60405180910390f35b606060038054610f3890614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490614a7a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b5050505050905090565b6000610fcf610fc8612a07565b8484612a0f565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61102f612a07565b73ffffffffffffffffffffffffffffffffffffffff1661104d611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614af7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611183612a07565b73ffffffffffffffffffffffffffffffffffffffff166111a1611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614af7565b60405180910390fd5b670de0b6b3a76400006103e8600161120d61101d565b6112179190614b46565b6112219190614bcf565b61122b9190614bcf565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614c72565b60405180910390fd5b670de0b6b3a7640000816112819190614b46565b60098190555050565b6000611297848484612bd8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e2612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614d04565b60405180910390fd5b6113768561136e612a07565b858403612a0f565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b600061144c6113b7612a07565b8484600160006113c5612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114479190614d24565b612a0f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611572612a07565b73ffffffffffffffffffffffffffffffffffffffff16611590611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90614af7565b60405180910390fd5b6115f0600061396d565b565b6115fa612a07565b73ffffffffffffffffffffffffffffffffffffffff16611618611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614af7565b60405180910390fd5b6102588310156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614dca565b60405180910390fd5b6103e882111580156116c6575060008210155b611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90614e5c565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b600061173c612a07565b73ffffffffffffffffffffffffffffffffffffffff1661175a611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614af7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117da612a07565b73ffffffffffffffffffffffffffffffffffffffff166117f8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590614af7565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118dd612a07565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614af7565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119799190614d24565b6119839190614d24565b601581905550600560155411156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ec8565b60405180910390fd5b505050565b6119dc612a07565b73ffffffffffffffffffffffffffffffffffffffff166119fa611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614af7565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed612a07565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614af7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611b8d90614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb990614a7a565b8015611c065780601f10611bdb57610100808354040283529160200191611c06565b820191906000526020600020905b815481529060010190602001808311611be957829003601f168201915b5050505050905090565b611c18612a07565b73ffffffffffffffffffffffffffffffffffffffff16611c36611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614af7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f5a565b60405180910390fd5b611d248282613a33565b5050565b60185481565b60115481565b601f5481565b601c5481565b60008060016000611d4f612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390614fec565b60405180910390fd5b611e20611e17612a07565b85858403612a0f565b600191505092915050565b600f5481565b6000611e45611e3e612a07565b8484612bd8565b6001905092915050565b611e57612a07565b73ffffffffffffffffffffffffffffffffffffffff16611e75611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614af7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611fc6612a07565b73ffffffffffffffffffffffffffffffffffffffff16611fe4611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614af7565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d791906146ff565b60405180910390a25050565b6120eb612a07565b73ffffffffffffffffffffffffffffffffffffffff16612109611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614af7565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121879190614d24565b6121919190614d24565b601981905550600a60195411156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615058565b60405180910390fd5b505050565b6121ea612a07565b73ffffffffffffffffffffffffffffffffffffffff16612208611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614af7565b60405180910390fd5b670de0b6b3a76400006103e8600561227461101d565b61227e9190614b46565b6122889190614bcf565b6122929190614bcf565b8110156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906150ea565b60405180910390fd5b670de0b6b3a7640000816122e89190614b46565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b6000612314612a07565b73ffffffffffffffffffffffffffffffffffffffff16612332611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614af7565b60405180910390fd5b620186a0600161239661101d565b6123a09190614b46565b6123aa9190614bcf565b8210156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e39061517c565b60405180910390fd5b6103e860056123f961101d565b6124039190614b46565b61240d9190614bcf565b82111561244f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124469061520e565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006124fc612a07565b73ffffffffffffffffffffffffffffffffffffffff1661251a611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614af7565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b6125a0612a07565b73ffffffffffffffffffffffffffffffffffffffff166125be611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a906152a0565b60405180910390fd5b61268c8161396d565b50565b601b5481565b600b5481565b6126a3612a07565b73ffffffffffffffffffffffffffffffffffffffff166126c1611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614af7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612765612a07565b73ffffffffffffffffffffffffffffffffffffffff16612783611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614af7565b60405180910390fd5b6010546011546127e99190614d24565b421161282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061530c565b60405180910390fd5b6103e882111561286f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128669061539e565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016128d1919061487a565b602060405180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906153d3565b9050600061293d61271061292f8685613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115612976576129757f000000000000000000000000000000000000000000000000000000000000000061dead83613b00565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129e357600080fd5b505af11580156129f7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590615472565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae490615504565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcb91906147d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615628565b60405180910390fd5b60008103612ccf57612cca83836000613b00565b613968565b601260009054906101000a900460ff161561339257612cec611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5a5750612d2a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d935750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de65750600560149054906101000a900460ff16155b1561339157601260019054906101000a900460ff16612ee057602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea05750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690615694565b60405180910390fd5b5b601460009054906101000a900460ff16156130a857612efd611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f8457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130a75743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130599061574c565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f257600954811115613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906157de565b60405180910390fd5b600b546131a183611522565b826131ac9190614d24565b11156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061584a565b60405180910390fd5b613390565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e4576009548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906158dc565b60405180910390fd5b61338f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338e57600b5461334183611522565b8261334c9190614d24565b111561338d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133849061584a565b60405180910390fd5b5b5b5b5b5b600061339d30611522565b90506000600a5482101590508080156133c25750601260029054906101000a900460ff165b80156133db5750600560149054906101000a900460ff16155b80156134315750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134875750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613521576001600560146101000a81548160ff021916908315150217905550613505613d7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135875750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561359f5750600d60009054906101000a900460ff165b80156135ba5750600e54600f546135b69190614d24565b4210155b80156136105750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361f5761361d614066565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136df57600090505b6000811561395857602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561374257506000601954115b1561380f5761376f606461376160195488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601954601b54826137829190614b46565b61378c9190614bcf565b601e600082825461379d9190614d24565b92505081905550601954601c54826137b59190614b46565b6137bf9190614bcf565b601f60008282546137d09190614d24565b92505081905550601954601a54826137e89190614b46565b6137f29190614bcf565b601d60008282546138039190614d24565b92505081905550613934565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386a57506000601554115b1561393357613897606461388960155488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601554601754826138aa9190614b46565b6138b49190614bcf565b601e60008282546138c59190614d24565b92505081905550601554601854826138dd9190614b46565b6138e79190614bcf565b601f60008282546138f89190614d24565b92505081905550601554601654826139109190614b46565b61391a9190614bcf565b601d600082825461392b9190614d24565b925050819055505b5b600081111561394957613948873083613b00565b5b808561395591906158fc565b94505b613963878787613b00565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ae29190614b46565b905092915050565b60008183613af89190614bcf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6690615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd590615628565b60405180910390fd5b613be9838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c66906159a2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d029190614d24565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6691906147d0565b60405180910390a3613d79848484614205565b50505050565b6000613d8a30611522565b90506000601f54601d54601e54613da19190614d24565b613dab9190614d24565b9050600080831480613dbd5750600082145b15613dca57505050614064565b6014600a54613dd99190614b46565b831115613df2576014600a54613def9190614b46565b92505b6000600283601e5486613e059190614b46565b613e0f9190614bcf565b613e199190614bcf565b90506000613e30828661420a90919063ffffffff16565b90506000479050613e4082614220565b6000613e55824761420a90919063ffffffff16565b90506000613e8087613e72601d5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000613eab88613e9d601f5486613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000818385613ebc91906158fc565b613ec691906158fc565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f26906159f3565b60006040518083038185875af1925050503d8060008114613f63576040519150601f19603f3d011682016040523d82523d6000602084013e613f68565b606091505b505080985050600087118015613f7e5750600081115b15613fcb57613f8d878261445d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613fc293929190615a08565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614011906159f3565b60006040518083038185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016140ca919061487a565b602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b91906153d3565b9050600061413861271061412a600c5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115614171576141707f000000000000000000000000000000000000000000000000000000000000000061dead83613b00565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141de57600080fd5b505af11580156141f2573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361421891906158fc565b905092915050565b6000600267ffffffffffffffff81111561423d5761423c615a3f565b5b60405190808252806020026020018201604052801561426b5781602001602082028036833780820191505090505b509050308160008151811061428357614282615a6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615ab2565b816001815181106143605761435f615a6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c5307f000000000000000000000000000000000000000000000000000000000000000084612a0f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614427959493929190615bd8565b600060405180830381600087803b15801561444157600080fd5b505af1158015614455573d6000803e3d6000fd5b505050505050565b614488307f000000000000000000000000000000000000000000000000000000000000000084612a0f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161450f96959493929190615c32565b60606040518083038185885af115801561452d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145529190615c93565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614593578082015181840152602081019050614578565b60008484015250505050565b6000601f19601f8301169050919050565b60006145bb82614559565b6145c58185614564565b93506145d5818560208601614575565b6145de8161459f565b840191505092915050565b6000602082019050818103600083015261460381846145b0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061463b82614610565b9050919050565b61464b81614630565b811461465657600080fd5b50565b60008135905061466881614642565b92915050565b6000819050919050565b6146818161466e565b811461468c57600080fd5b50565b60008135905061469e81614678565b92915050565b600080604083850312156146bb576146ba61460b565b5b60006146c985828601614659565b92505060206146da8582860161468f565b9150509250929050565b60008115159050919050565b6146f9816146e4565b82525050565b600060208201905061471460008301846146f0565b92915050565b6000602082840312156147305761472f61460b565b5b600061473e84828501614659565b91505092915050565b6000819050919050565b600061476c61476761476284614610565b614747565b614610565b9050919050565b600061477e82614751565b9050919050565b600061479082614773565b9050919050565b6147a081614785565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6147ca8161466e565b82525050565b60006020820190506147e560008301846147c1565b92915050565b6000602082840312156148015761480061460b565b5b600061480f8482850161468f565b91505092915050565b6000806000606084860312156148315761483061460b565b5b600061483f86828701614659565b935050602061485086828701614659565b92505060406148618682870161468f565b9150509250925092565b61487481614630565b82525050565b600060208201905061488f600083018461486b565b92915050565b600060ff82169050919050565b6148ab81614895565b82525050565b60006020820190506148c660008301846148a2565b92915050565b6148d5816146e4565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b6000806000606084860312156149115761491061460b565b5b600061491f8682870161468f565b93505060206149308682870161468f565b9250506040614941868287016148e3565b9150509250925092565b600080604083850312156149625761496161460b565b5b600061497085828601614659565b9250506020614981858286016148e3565b9150509250929050565b6000806000606084860312156149a4576149a361460b565b5b60006149b28682870161468f565b93505060206149c38682870161468f565b92505060406149d48682870161468f565b9150509250925092565b6000602082840312156149f4576149f361460b565b5b6000614a02848285016148e3565b91505092915050565b60008060408385031215614a2257614a2161460b565b5b6000614a3085828601614659565b9250506020614a4185828601614659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9257607f821691505b602082108103614aa557614aa4614a4b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae1602083614564565b9150614aec82614aab565b602082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b518261466e565b9150614b5c8361466e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b9557614b94614b17565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bda8261466e565b9150614be58361466e565b925082614bf557614bf4614ba0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c5c602f83614564565b9150614c6782614c00565b604082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cee602883614564565b9150614cf982614c92565b604082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b6000614d2f8261466e565b9150614d3a8361466e565b9250828201905080821115614d5257614d51614b17565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614db4603383614564565b9150614dbf82614d58565b604082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e46603083614564565b9150614e5182614dea565b604082019050919050565b60006020820190508181036000830152614e7581614e39565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614eb2601d83614564565b9150614ebd82614e7c565b602082019050919050565b60006020820190508181036000830152614ee181614ea5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f44603983614564565b9150614f4f82614ee8565b604082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fd6602583614564565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b6000615042601e83614564565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006150d4602483614564565b91506150df82615078565b604082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615166603583614564565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151f8603483614564565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061528a602683614564565b91506152958261522e565b604082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006152f6602083614564565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615388602a83614564565b91506153938261532c565b604082019050919050565b600060208201905081810360008301526153b78161537b565b9050919050565b6000815190506153cd81614678565b92915050565b6000602082840312156153e9576153e861460b565b5b60006153f7848285016153be565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061545c602483614564565b915061546782615400565b604082019050919050565b6000602082019050818103600083015261548b8161544f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ee602283614564565b91506154f982615492565b604082019050919050565b6000602082019050818103600083015261551d816154e1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615580602583614564565b915061558b82615524565b604082019050919050565b600060208201905081810360008301526155af81615573565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615612602383614564565b915061561d826155b6565b604082019050919050565b6000602082019050818103600083015261564181615605565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061567e601683614564565b915061568982615648565b602082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615736604983614564565b9150615741826156b4565b606082019050919050565b6000602082019050818103600083015261576581615729565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157c8603583614564565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615834601383614564565b915061583f826157fe565b602082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158c6603683614564565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b60006159078261466e565b91506159128361466e565b925082820390508181111561592a57615929614b17565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061598c602683614564565b915061599782615930565b604082019050919050565b600060208201905081810360008301526159bb8161597f565b9050919050565b600081905092915050565b50565b60006159dd6000836159c2565b91506159e8826159cd565b600082019050919050565b60006159fe826159d0565b9150819050919050565b6000606082019050615a1d60008301866147c1565b615a2a60208301856147c1565b615a3760408301846147c1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615aac81614642565b92915050565b600060208284031215615ac857615ac761460b565b5b6000615ad684828501615a9d565b91505092915050565b6000819050919050565b6000615b04615aff615afa84615adf565b614747565b61466e565b9050919050565b615b1481615ae9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4f81614630565b82525050565b6000615b618383615b46565b60208301905092915050565b6000602082019050919050565b6000615b8582615b1a565b615b8f8185615b25565b9350615b9a83615b36565b8060005b83811015615bcb578151615bb28882615b55565b9750615bbd83615b6d565b925050600181019050615b9e565b5085935050505092915050565b600060a082019050615bed60008301886147c1565b615bfa6020830187615b0b565b8181036040830152615c0c8186615b7a565b9050615c1b606083018561486b565b615c2860808301846147c1565b9695505050505050565b600060c082019050615c47600083018961486b565b615c5460208301886147c1565b615c616040830187615b0b565b615c6e6060830186615b0b565b615c7b608083018561486b565b615c8860a08301846147c1565b979650505050505050565b600080600060608486031215615cac57615cab61460b565b5b6000615cba868287016153be565b9350506020615ccb868287016153be565b9250506040615cdc868287016153be565b915050925092509256fea264697066735822122019d66b01c1b3709827eabbc6ffe5ec1edeb52529e0dda4e32c8dfee9b14e956964736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e6d578063f8b45b0514610e98578063fbc10c5514610ec3578063fe72b27a14610eec576103ce565b8063e2f4560514610dc3578063e884f26014610dee578063f11a24d314610e19578063f2fde38b14610e44576103ce565b8063c8c8ebe4116100dc578063c8c8ebe414610cf3578063d257b34f14610d1e578063d85ba06314610d5b578063dd62ed3e14610d86576103ce565b8063c024666814610c4d578063c17b5b8c14610c76578063c18bc19514610c9f578063c876d0b914610cc8576103ce565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b7f578063aacebbe314610bbc578063b62496f514610be5578063bbc0c74214610c22576103ce565b80639fccce3214610ac1578063a0d82dc514610aec578063a457c2d714610b17578063a4c82a0014610b54576103ce565b806395d89b41116101c157806395d89b4114610a175780639a7a23d614610a425780639c3b4fdc14610a6b5780639ec22c0e14610a96576103ce565b80638da5cb5b1461096d5780638ea5220f1461099857806392136913146109c3578063924de9b7146109ee576103ce565b806339509351116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108d75780637bce5a04146109025780638095d5641461092d5780638a8c523c14610956576103ce565b8063715018a614610843578063730c18881461085a578063751039fc146108835780637571336a146108ae576103ce565b80636303516c116102b15780636303516c146107855780636a486a8e146107b05780636ddd1713146107db57806370a0823114610806576103ce565b806339509351146106b557806349bd5a5e146106f25780634a62bb651461071d5780634fbee19314610748576103ce565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146106095780632c3e486c146106345780632e82f1a01461065f578063313ce5671461068a576103ce565b80631a8145bb1461054d5780631f3fed8f14610578578063203e727e146105a357806323b872dd146105cc576103ce565b806318160ddd1161039657806318160ddd146104a35780631816467f146104ce578063184c16c5146104f7578063199ffc7214610522576103ce565b806306fdde03146103d3578063095ea7b3146103fe57806310d5de531461043b5780631694505e14610478576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f29565b6040516103f591906145e9565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906146a4565b610fbb565b60405161043291906146ff565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d919061471a565b610fd9565b60405161046f91906146ff565b60405180910390f35b34801561048457600080fd5b5061048d610ff9565b60405161049a91906147a6565b60405180910390f35b3480156104af57600080fd5b506104b861101d565b6040516104c591906147d0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f0919061471a565b611027565b005b34801561050357600080fd5b5061050c611163565b60405161051991906147d0565b60405180910390f35b34801561052e57600080fd5b50610537611169565b60405161054491906147d0565b60405180910390f35b34801561055957600080fd5b5061056261116f565b60405161056f91906147d0565b60405180910390f35b34801561058457600080fd5b5061058d611175565b60405161059a91906147d0565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147eb565b61117b565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190614818565b61128a565b60405161060091906146ff565b60405180910390f35b34801561061557600080fd5b5061061e611382565b60405161062b919061487a565b60405180910390f35b34801561064057600080fd5b50610649611388565b60405161065691906147d0565b60405180910390f35b34801561066b57600080fd5b5061067461138e565b60405161068191906146ff565b60405180910390f35b34801561069657600080fd5b5061069f6113a1565b6040516106ac91906148b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906146a4565b6113aa565b6040516106e991906146ff565b60405180910390f35b3480156106fe57600080fd5b50610707611456565b604051610714919061487a565b60405180910390f35b34801561072957600080fd5b5061073261147a565b60405161073f91906146ff565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061471a565b61148d565b60405161077c91906146ff565b60405180910390f35b34801561079157600080fd5b5061079a6114e3565b6040516107a7919061487a565b60405180910390f35b3480156107bc57600080fd5b506107c5611509565b6040516107d291906147d0565b60405180910390f35b3480156107e757600080fd5b506107f061150f565b6040516107fd91906146ff565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061471a565b611522565b60405161083a91906147d0565b60405180910390f35b34801561084f57600080fd5b5061085861156a565b005b34801561086657600080fd5b50610881600480360381019061087c91906148f8565b6115f2565b005b34801561088f57600080fd5b50610898611732565b6040516108a591906146ff565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d0919061494b565b6117d2565b005b3480156108e357600080fd5b506108ec6118a9565b6040516108f9919061487a565b60405180910390f35b34801561090e57600080fd5b506109176118cf565b60405161092491906147d0565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061498b565b6118d5565b005b34801561096257600080fd5b5061096b6119d4565b005b34801561097957600080fd5b50610982611a8f565b60405161098f919061487a565b60405180910390f35b3480156109a457600080fd5b506109ad611ab9565b6040516109ba919061487a565b60405180910390f35b3480156109cf57600080fd5b506109d8611adf565b6040516109e591906147d0565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906149de565b611ae5565b005b348015610a2357600080fd5b50610a2c611b7e565b604051610a3991906145e9565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061494b565b611c10565b005b348015610a7757600080fd5b50610a80611d28565b604051610a8d91906147d0565b60405180910390f35b348015610aa257600080fd5b50610aab611d2e565b604051610ab891906147d0565b60405180910390f35b348015610acd57600080fd5b50610ad6611d34565b604051610ae391906147d0565b60405180910390f35b348015610af857600080fd5b50610b01611d3a565b604051610b0e91906147d0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b3991906146a4565b611d40565b604051610b4b91906146ff565b60405180910390f35b348015610b6057600080fd5b50610b69611e2b565b604051610b7691906147d0565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba191906146a4565b611e31565b604051610bb391906146ff565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061471a565b611e4f565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061471a565b611f8b565b604051610c1991906146ff565b60405180910390f35b348015610c2e57600080fd5b50610c37611fab565b604051610c4491906146ff565b60405180910390f35b348015610c5957600080fd5b50610c746004803603810190610c6f919061494b565b611fbe565b005b348015610c8257600080fd5b50610c9d6004803603810190610c98919061498b565b6120e3565b005b348015610cab57600080fd5b50610cc66004803603810190610cc191906147eb565b6121e2565b005b348015610cd457600080fd5b50610cdd6122f1565b604051610cea91906146ff565b60405180910390f35b348015610cff57600080fd5b50610d08612304565b604051610d1591906147d0565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906147eb565b61230a565b604051610d5291906146ff565b60405180910390f35b348015610d6757600080fd5b50610d7061245f565b604051610d7d91906147d0565b60405180910390f35b348015610d9257600080fd5b50610dad6004803603810190610da89190614a0b565b612465565b604051610dba91906147d0565b60405180910390f35b348015610dcf57600080fd5b50610dd86124ec565b604051610de591906147d0565b60405180910390f35b348015610dfa57600080fd5b50610e036124f2565b604051610e1091906146ff565b60405180910390f35b348015610e2557600080fd5b50610e2e612592565b604051610e3b91906147d0565b60405180910390f35b348015610e5057600080fd5b50610e6b6004803603810190610e66919061471a565b612598565b005b348015610e7957600080fd5b50610e8261268f565b604051610e8f91906147d0565b60405180910390f35b348015610ea457600080fd5b50610ead612695565b604051610eba91906147d0565b60405180910390f35b348015610ecf57600080fd5b50610eea6004803603810190610ee5919061471a565b61269b565b005b348015610ef857600080fd5b50610f136004803603810190610f0e91906147eb565b61275b565b604051610f2091906146ff565b60405180910390f35b606060038054610f3890614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490614a7a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b5050505050905090565b6000610fcf610fc8612a07565b8484612a0f565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61102f612a07565b73ffffffffffffffffffffffffffffffffffffffff1661104d611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614af7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611183612a07565b73ffffffffffffffffffffffffffffffffffffffff166111a1611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614af7565b60405180910390fd5b670de0b6b3a76400006103e8600161120d61101d565b6112179190614b46565b6112219190614bcf565b61122b9190614bcf565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614c72565b60405180910390fd5b670de0b6b3a7640000816112819190614b46565b60098190555050565b6000611297848484612bd8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e2612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614d04565b60405180910390fd5b6113768561136e612a07565b858403612a0f565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b600061144c6113b7612a07565b8484600160006113c5612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114479190614d24565b612a0f565b6001905092915050565b7f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c881565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611572612a07565b73ffffffffffffffffffffffffffffffffffffffff16611590611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90614af7565b60405180910390fd5b6115f0600061396d565b565b6115fa612a07565b73ffffffffffffffffffffffffffffffffffffffff16611618611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614af7565b60405180910390fd5b6102588310156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614dca565b60405180910390fd5b6103e882111580156116c6575060008210155b611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90614e5c565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b600061173c612a07565b73ffffffffffffffffffffffffffffffffffffffff1661175a611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614af7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117da612a07565b73ffffffffffffffffffffffffffffffffffffffff166117f8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590614af7565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118dd612a07565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614af7565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119799190614d24565b6119839190614d24565b601581905550600560155411156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614ec8565b60405180910390fd5b505050565b6119dc612a07565b73ffffffffffffffffffffffffffffffffffffffff166119fa611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614af7565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed612a07565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614af7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611b8d90614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb990614a7a565b8015611c065780601f10611bdb57610100808354040283529160200191611c06565b820191906000526020600020905b815481529060010190602001808311611be957829003601f168201915b5050505050905090565b611c18612a07565b73ffffffffffffffffffffffffffffffffffffffff16611c36611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614af7565b60405180910390fd5b7f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f5a565b60405180910390fd5b611d248282613a33565b5050565b60185481565b60115481565b601f5481565b601c5481565b60008060016000611d4f612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390614fec565b60405180910390fd5b611e20611e17612a07565b85858403612a0f565b600191505092915050565b600f5481565b6000611e45611e3e612a07565b8484612bd8565b6001905092915050565b611e57612a07565b73ffffffffffffffffffffffffffffffffffffffff16611e75611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614af7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611fc6612a07565b73ffffffffffffffffffffffffffffffffffffffff16611fe4611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614af7565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d791906146ff565b60405180910390a25050565b6120eb612a07565b73ffffffffffffffffffffffffffffffffffffffff16612109611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614af7565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121879190614d24565b6121919190614d24565b601981905550600a60195411156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615058565b60405180910390fd5b505050565b6121ea612a07565b73ffffffffffffffffffffffffffffffffffffffff16612208611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614af7565b60405180910390fd5b670de0b6b3a76400006103e8600561227461101d565b61227e9190614b46565b6122889190614bcf565b6122929190614bcf565b8110156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906150ea565b60405180910390fd5b670de0b6b3a7640000816122e89190614b46565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b6000612314612a07565b73ffffffffffffffffffffffffffffffffffffffff16612332611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614af7565b60405180910390fd5b620186a0600161239661101d565b6123a09190614b46565b6123aa9190614bcf565b8210156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e39061517c565b60405180910390fd5b6103e860056123f961101d565b6124039190614b46565b61240d9190614bcf565b82111561244f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124469061520e565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006124fc612a07565b73ffffffffffffffffffffffffffffffffffffffff1661251a611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614af7565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b6125a0612a07565b73ffffffffffffffffffffffffffffffffffffffff166125be611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a906152a0565b60405180910390fd5b61268c8161396d565b50565b601b5481565b600b5481565b6126a3612a07565b73ffffffffffffffffffffffffffffffffffffffff166126c1611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614af7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612765612a07565b73ffffffffffffffffffffffffffffffffffffffff16612783611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614af7565b60405180910390fd5b6010546011546127e99190614d24565b421161282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061530c565b60405180910390fd5b6103e882111561286f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128669061539e565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c86040518263ffffffff1660e01b81526004016128d1919061487a565b602060405180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906153d3565b9050600061293d61271061292f8685613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115612976576129757f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c861dead83613b00565b5b60007f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129e357600080fd5b505af11580156129f7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590615472565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae490615504565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcb91906147d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615628565b60405180910390fd5b60008103612ccf57612cca83836000613b00565b613968565b601260009054906101000a900460ff161561339257612cec611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5a5750612d2a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d935750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de65750600560149054906101000a900460ff16155b1561339157601260019054906101000a900460ff16612ee057602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea05750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690615694565b60405180910390fd5b5b601460009054906101000a900460ff16156130a857612efd611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f8457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdc57507f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130a75743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130599061574c565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f257600954811115613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906157de565b60405180910390fd5b600b546131a183611522565b826131ac9190614d24565b11156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e49061584a565b60405180910390fd5b613390565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e4576009548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906158dc565b60405180910390fd5b61338f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338e57600b5461334183611522565b8261334c9190614d24565b111561338d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133849061584a565b60405180910390fd5b5b5b5b5b5b600061339d30611522565b90506000600a5482101590508080156133c25750601260029054906101000a900460ff165b80156133db5750600560149054906101000a900460ff16155b80156134315750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134875750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613521576001600560146101000a81548160ff021916908315150217905550613505613d7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135875750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561359f5750600d60009054906101000a900460ff165b80156135ba5750600e54600f546135b69190614d24565b4210155b80156136105750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361f5761361d614066565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136df57600090505b6000811561395857602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561374257506000601954115b1561380f5761376f606461376160195488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601954601b54826137829190614b46565b61378c9190614bcf565b601e600082825461379d9190614d24565b92505081905550601954601c54826137b59190614b46565b6137bf9190614bcf565b601f60008282546137d09190614d24565b92505081905550601954601a54826137e89190614b46565b6137f29190614bcf565b601d60008282546138039190614d24565b92505081905550613934565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386a57506000601554115b1561393357613897606461388960155488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601554601754826138aa9190614b46565b6138b49190614bcf565b601e60008282546138c59190614d24565b92505081905550601554601854826138dd9190614b46565b6138e79190614bcf565b601f60008282546138f89190614d24565b92505081905550601554601654826139109190614b46565b61391a9190614bcf565b601d600082825461392b9190614d24565b925050819055505b5b600081111561394957613948873083613b00565b5b808561395591906158fc565b94505b613963878787613b00565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ae29190614b46565b905092915050565b60008183613af89190614bcf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6690615596565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd590615628565b60405180910390fd5b613be9838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c66906159a2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d029190614d24565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6691906147d0565b60405180910390a3613d79848484614205565b50505050565b6000613d8a30611522565b90506000601f54601d54601e54613da19190614d24565b613dab9190614d24565b9050600080831480613dbd5750600082145b15613dca57505050614064565b6014600a54613dd99190614b46565b831115613df2576014600a54613def9190614b46565b92505b6000600283601e5486613e059190614b46565b613e0f9190614bcf565b613e199190614bcf565b90506000613e30828661420a90919063ffffffff16565b90506000479050613e4082614220565b6000613e55824761420a90919063ffffffff16565b90506000613e8087613e72601d5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000613eab88613e9d601f5486613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000818385613ebc91906158fc565b613ec691906158fc565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f26906159f3565b60006040518083038185875af1925050503d8060008114613f63576040519150601f19603f3d011682016040523d82523d6000602084013e613f68565b606091505b505080985050600087118015613f7e5750600081115b15613fcb57613f8d878261445d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613fc293929190615a08565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614011906159f3565b60006040518083038185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c86040518263ffffffff1660e01b81526004016140ca919061487a565b602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b91906153d3565b9050600061413861271061412a600c5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115614171576141707f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c861dead83613b00565b5b60007f000000000000000000000000aab7a1a1217faad781622c3e19f9cccd6012b8c890508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141de57600080fd5b505af11580156141f2573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361421891906158fc565b905092915050565b6000600267ffffffffffffffff81111561423d5761423c615a3f565b5b60405190808252806020026020018201604052801561426b5781602001602082028036833780820191505090505b509050308160008151811061428357614282615a6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615ab2565b816001815181106143605761435f615a6e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a0f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614427959493929190615bd8565b600060405180830381600087803b15801561444157600080fd5b505af1158015614455573d6000803e3d6000fd5b505050505050565b614488307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a0f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161450f96959493929190615c32565b60606040518083038185885af115801561452d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145529190615c93565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614593578082015181840152602081019050614578565b60008484015250505050565b6000601f19601f8301169050919050565b60006145bb82614559565b6145c58185614564565b93506145d5818560208601614575565b6145de8161459f565b840191505092915050565b6000602082019050818103600083015261460381846145b0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061463b82614610565b9050919050565b61464b81614630565b811461465657600080fd5b50565b60008135905061466881614642565b92915050565b6000819050919050565b6146818161466e565b811461468c57600080fd5b50565b60008135905061469e81614678565b92915050565b600080604083850312156146bb576146ba61460b565b5b60006146c985828601614659565b92505060206146da8582860161468f565b9150509250929050565b60008115159050919050565b6146f9816146e4565b82525050565b600060208201905061471460008301846146f0565b92915050565b6000602082840312156147305761472f61460b565b5b600061473e84828501614659565b91505092915050565b6000819050919050565b600061476c61476761476284614610565b614747565b614610565b9050919050565b600061477e82614751565b9050919050565b600061479082614773565b9050919050565b6147a081614785565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6147ca8161466e565b82525050565b60006020820190506147e560008301846147c1565b92915050565b6000602082840312156148015761480061460b565b5b600061480f8482850161468f565b91505092915050565b6000806000606084860312156148315761483061460b565b5b600061483f86828701614659565b935050602061485086828701614659565b92505060406148618682870161468f565b9150509250925092565b61487481614630565b82525050565b600060208201905061488f600083018461486b565b92915050565b600060ff82169050919050565b6148ab81614895565b82525050565b60006020820190506148c660008301846148a2565b92915050565b6148d5816146e4565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b6000806000606084860312156149115761491061460b565b5b600061491f8682870161468f565b93505060206149308682870161468f565b9250506040614941868287016148e3565b9150509250925092565b600080604083850312156149625761496161460b565b5b600061497085828601614659565b9250506020614981858286016148e3565b9150509250929050565b6000806000606084860312156149a4576149a361460b565b5b60006149b28682870161468f565b93505060206149c38682870161468f565b92505060406149d48682870161468f565b9150509250925092565b6000602082840312156149f4576149f361460b565b5b6000614a02848285016148e3565b91505092915050565b60008060408385031215614a2257614a2161460b565b5b6000614a3085828601614659565b9250506020614a4185828601614659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9257607f821691505b602082108103614aa557614aa4614a4b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae1602083614564565b9150614aec82614aab565b602082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b518261466e565b9150614b5c8361466e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b9557614b94614b17565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bda8261466e565b9150614be58361466e565b925082614bf557614bf4614ba0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c5c602f83614564565b9150614c6782614c00565b604082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cee602883614564565b9150614cf982614c92565b604082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b6000614d2f8261466e565b9150614d3a8361466e565b9250828201905080821115614d5257614d51614b17565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614db4603383614564565b9150614dbf82614d58565b604082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e46603083614564565b9150614e5182614dea565b604082019050919050565b60006020820190508181036000830152614e7581614e39565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614eb2601d83614564565b9150614ebd82614e7c565b602082019050919050565b60006020820190508181036000830152614ee181614ea5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f44603983614564565b9150614f4f82614ee8565b604082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fd6602583614564565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b6000615042601e83614564565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006150d4602483614564565b91506150df82615078565b604082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615166603583614564565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151f8603483614564565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061528a602683614564565b91506152958261522e565b604082019050919050565b600060208201905081810360008301526152b98161527d565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006152f6602083614564565b9150615301826152c0565b602082019050919050565b60006020820190508181036000830152615325816152e9565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615388602a83614564565b91506153938261532c565b604082019050919050565b600060208201905081810360008301526153b78161537b565b9050919050565b6000815190506153cd81614678565b92915050565b6000602082840312156153e9576153e861460b565b5b60006153f7848285016153be565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061545c602483614564565b915061546782615400565b604082019050919050565b6000602082019050818103600083015261548b8161544f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ee602283614564565b91506154f982615492565b604082019050919050565b6000602082019050818103600083015261551d816154e1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615580602583614564565b915061558b82615524565b604082019050919050565b600060208201905081810360008301526155af81615573565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615612602383614564565b915061561d826155b6565b604082019050919050565b6000602082019050818103600083015261564181615605565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061567e601683614564565b915061568982615648565b602082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615736604983614564565b9150615741826156b4565b606082019050919050565b6000602082019050818103600083015261576581615729565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157c8603583614564565b91506157d38261576c565b604082019050919050565b600060208201905081810360008301526157f7816157bb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615834601383614564565b915061583f826157fe565b602082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158c6603683614564565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b60006159078261466e565b91506159128361466e565b925082820390508181111561592a57615929614b17565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061598c602683614564565b915061599782615930565b604082019050919050565b600060208201905081810360008301526159bb8161597f565b9050919050565b600081905092915050565b50565b60006159dd6000836159c2565b91506159e8826159cd565b600082019050919050565b60006159fe826159d0565b9150819050919050565b6000606082019050615a1d60008301866147c1565b615a2a60208301856147c1565b615a3760408301846147c1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615aac81614642565b92915050565b600060208284031215615ac857615ac761460b565b5b6000615ad684828501615a9d565b91505092915050565b6000819050919050565b6000615b04615aff615afa84615adf565b614747565b61466e565b9050919050565b615b1481615ae9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4f81614630565b82525050565b6000615b618383615b46565b60208301905092915050565b6000602082019050919050565b6000615b8582615b1a565b615b8f8185615b25565b9350615b9a83615b36565b8060005b83811015615bcb578151615bb28882615b55565b9750615bbd83615b6d565b925050600181019050615b9e565b5085935050505092915050565b600060a082019050615bed60008301886147c1565b615bfa6020830187615b0b565b8181036040830152615c0c8186615b7a565b9050615c1b606083018561486b565b615c2860808301846147c1565b9695505050505050565b600060c082019050615c47600083018961486b565b615c5460208301886147c1565b615c616040830187615b0b565b615c6e6060830186615b0b565b615c7b608083018561486b565b615c8860a08301846147c1565b979650505050505050565b600080600060608486031215615cac57615cab61460b565b5b6000615cba868287016153be565b9350506020615ccb868287016153be565b9250506040615cdc868287016153be565b915050925092509256fea264697066735822122019d66b01c1b3709827eabbc6ffe5ec1edeb52529e0dda4e32c8dfee9b14e956964736f6c63430008100033

Deployed Bytecode Sourcemap

32636:19513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9464:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11631:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34298:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32717:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10584:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41538:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33312:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33127:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34082:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34042;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38716:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12282:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32820:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33222:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33183:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10426:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13183:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32775:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33410:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41703:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32980:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33897:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33490:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10755:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2699:103;;;;;;;;;;;;;:::i;:::-;;49789:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37824:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39263:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32912:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33790;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39634:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37617:155;;;;;;;;;;;;;:::i;:::-;;2048:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32949:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33932:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39526:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9683:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40655:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33864:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33366:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34122:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34008:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13901:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33274:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11095:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41163:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34519:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33450:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40465:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40044:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38999:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33708:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33012:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38211:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33756:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11333:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33054:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38006:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33827:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2957:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33970:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33094:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41402:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51120:1026;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9464:100;9518:13;9551:5;9544:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9464:100;:::o;11631:169::-;11714:4;11731:39;11740:12;:10;:12::i;:::-;11754:7;11763:6;11731:8;:39::i;:::-;11788:4;11781:11;;11631:169;;;;:::o;34298:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32717:51::-;;;:::o;10584:108::-;10645:7;10672:12;;10665:19;;10584:108;:::o;41538:157::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41645:9:::1;;;;;;;;;;;41617:38;;41634:9;41617:38;;;;;;;;;;;;41678:9;41666;;:21;;;;;;;;;;;;;;;;;;41538:157:::0;:::o;33312:47::-;;;;:::o;33127:36::-;;;;:::o;34082:33::-;;;;:::o;34042:::-;;;;:::o;38716:275::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38853:4:::1;38845;38840:1;38824:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38823:26;;;;:::i;:::-;38822:35;;;;:::i;:::-;38812:6;:45;;38790:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38976:6;38966;:17;;;;:::i;:::-;38943:20;:40;;;;38716:275:::0;:::o;12282:492::-;12422:4;12439:36;12449:6;12457:9;12468:6;12439:9;:36::i;:::-;12488:24;12515:11;:19;12527:6;12515:19;;;;;;;;;;;;;;;:33;12535:12;:10;:12::i;:::-;12515:33;;;;;;;;;;;;;;;;12488:60;;12587:6;12567:16;:26;;12559:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12674:57;12683:6;12691:12;:10;:12::i;:::-;12724:6;12705:16;:25;12674:8;:57::i;:::-;12762:4;12755:11;;;12282:492;;;;;:::o;32820:53::-;32866:6;32820:53;:::o;33222:45::-;;;;:::o;33183:32::-;;;;;;;;;;;;;:::o;10426:93::-;10484:5;10509:2;10502:9;;10426:93;:::o;13183:215::-;13271:4;13288:80;13297:12;:10;:12::i;:::-;13311:7;13357:10;13320:11;:25;13332:12;:10;:12::i;:::-;13320:25;;;;;;;;;;;;;;;:34;13346:7;13320:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13288:8;:80::i;:::-;13386:4;13379:11;;13183:215;;;;:::o;32775:38::-;;;:::o;33410:33::-;;;;;;;;;;;;;:::o;41703:126::-;41769:4;41793:19;:28;41813:7;41793:28;;;;;;;;;;;;;;;;;;;;;;;;;41786:35;;41703:126;;;:::o;32980:23::-;;;;;;;;;;;;;:::o;33897:28::-;;;;:::o;33490:31::-;;;;;;;;;;;;;:::o;10755:127::-;10829:7;10856:9;:18;10866:7;10856:18;;;;;;;;;;;;;;;;10849:25;;10755:127;;;:::o;2699:103::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2764:30:::1;2791:1;2764:18;:30::i;:::-;2699:103::o:0;49789:555::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49991:3:::1;49968:19;:26;;49946:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;50118:4;50106:8;:16;;:33;;;;;50138:1;50126:8;:13;;50106:33;50084:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50244:19;50226:15;:37;;;;50293:8;50274:16;:27;;;;50328:8;50312:13;;:24;;;;;;;;;;;;;;;;;;49789:555:::0;;;:::o;37824:121::-;37876:4;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37910:5:::1;37893:14;;:22;;;;;;;;;;;;;;;;;;37933:4;37926:11;;37824:121:::0;:::o;39263:167::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39418:4:::1;39376:31;:39;39408:6;39376:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39263:167:::0;;:::o;32912:30::-;;;;;;;;;;;;;:::o;33790:::-;;;;:::o;39634:402::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39802:13:::1;39784:15;:31;;;;39844:13;39826:15;:31;;;;39880:7;39868:9;:19;;;;39949:9;;39931:15;;39913;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;39898:12;:60;;;;39993:1;39977:12;;:17;;39969:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39634:402:::0;;;:::o;37617:155::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37688:4:::1;37672:13;;:20;;;;;;;;;;;;;;;;;;37717:4;37703:11;;:18;;;;;;;;;;;;;;;;;;37749:15;37732:14;:32;;;;37617:155::o:0;2048:87::-;2094:7;2121:6;;;;;;;;;;;2114:13;;2048:87;:::o;32949:24::-;;;;;;;;;;;;;:::o;33932:31::-;;;;:::o;39526:100::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39611:7:::1;39597:11;;:21;;;;;;;;;;;;;;;;;;39526:100:::0;:::o;9683:104::-;9739:13;9772:7;9765:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9683:104;:::o;40655:304::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40799:13:::1;40791:21;;:4;:21;;::::0;40769:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40910:41;40939:4;40945:5;40910:28;:41::i;:::-;40655:304:::0;;:::o;33864:24::-;;;;:::o;33366:35::-;;;;:::o;34122:27::-;;;;:::o;34008:25::-;;;;:::o;13901:413::-;13994:4;14011:24;14038:11;:25;14050:12;:10;:12::i;:::-;14038:25;;;;;;;;;;;;;;;:34;14064:7;14038:34;;;;;;;;;;;;;;;;14011:61;;14111:15;14091:16;:35;;14083:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14204:67;14213:12;:10;:12::i;:::-;14227:7;14255:15;14236:16;:34;14204:8;:67::i;:::-;14302:4;14295:11;;;13901:413;;;;:::o;33274:29::-;;;;:::o;11095:175::-;11181:4;11198:42;11208:12;:10;:12::i;:::-;11222:9;11233:6;11198:9;:42::i;:::-;11258:4;11251:11;;11095:175;;;;:::o;41163:231::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41323:15:::1;;;;;;;;;;;41280:59;;41303:18;41280:59;;;;;;;;;;;;41368:18;41350:15;;:36;;;;;;;;;;;;;;;;;;41163:231:::0;:::o;34519:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33450:33::-;;;;;;;;;;;;;:::o;40465:182::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40581:8:::1;40550:19;:28;40570:7;40550:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40621:7;40605:34;;;40630:8;40605:34;;;;;;:::i;:::-;;;;;;;;40465:182:::0;;:::o;40044:413::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40214:13:::1;40195:16;:32;;;;40257:13;40238:16;:32;;;;40294:7;40281:10;:20;;;;40366:10;;40347:16;;40328;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;40312:13;:64;;;;40412:2;40395:13;;:19;;40387:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40044:413:::0;;;:::o;38999:256::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39139:4:::1;39131;39126:1;39110:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39109:26;;;;:::i;:::-;39108:35;;;;:::i;:::-;39098:6;:45;;39076:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39240:6;39230;:17;;;;:::i;:::-;39218:9;:29;;;;38999:256:::0;:::o;33708:39::-;;;;;;;;;;;;;:::o;33012:35::-;;;;:::o;38211:497::-;38319:4;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38398:6:::1;38393:1;38377:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38376:28;;;;:::i;:::-;38363:9;:41;;38341:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38553:4;38548:1;38532:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38531:26;;;;:::i;:::-;38518:9;:39;;38496:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38669:9;38648:18;:30;;;;38696:4;38689:11;;38211:497:::0;;;:::o;33756:27::-;;;;:::o;11333:151::-;11422:7;11449:11;:18;11461:5;11449:18;;;;;;;;;;;;;;;:27;11468:7;11449:27;;;;;;;;;;;;;;;;11442:34;;11333:151;;;;:::o;33054:33::-;;;;:::o;38006:135::-;38066:4;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38106:5:::1;38083:20;;:28;;;;;;;;;;;;;;;;;;38129:4;38122:11;;38006:135:::0;:::o;33827:30::-;;;;:::o;2957:201::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3066:1:::1;3046:22;;:8;:22;;::::0;3038:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3122:28;3141:8;3122:18;:28::i;:::-;2957:201:::0;:::o;33970:31::-;;;;:::o;33094:24::-;;;;:::o;41402:128::-;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:11:::1;41500:8;;:22;;;;;;;;;;;;;;;;;;41402:128:::0;:::o;51120:1026::-;51231:4;2279:12;:10;:12::i;:::-;2268:23;;:7;:5;:7::i;:::-;:23;;;2260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51316:19:::1;;51293:20;;:42;;;;:::i;:::-;51275:15;:60;51253:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51425:4;51414:7;:15;;51406:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51510:15;51487:20;:38;;;;51580:28;51611:4;:14;;;51626:13;51611:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51580:60;;51690:20;51713:44;51751:5;51713:33;51738:7;51713:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51690:67;;51877:1;51862:12;:16;51858:110;;;51895:61;51911:13;51934:6;51943:12;51895:15;:61::i;:::-;51858:110;52043:19;52080:13;52043:51;;52105:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52134:4;52127:11;;;;;51120:1026:::0;;;:::o;721:98::-;774:7;801:10;794:17;;721:98;:::o;17585:380::-;17738:1;17721:19;;:5;:19;;;17713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17819:1;17800:21;;:7;:21;;;17792:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17903:6;17873:11;:18;17885:5;17873:18;;;;;;;;;;;;;;;:27;17892:7;17873:27;;;;;;;;;;;;;;;:36;;;;17941:7;17925:32;;17934:5;17925:32;;;17950:6;17925:32;;;;;;:::i;:::-;;;;;;;;17585:380;;;:::o;41887:5011::-;42035:1;42019:18;;:4;:18;;;42011:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42112:1;42098:16;;:2;:16;;;42090:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42181:1;42171:6;:11;42167:93;;42199:28;42215:4;42221:2;42225:1;42199:15;:28::i;:::-;42242:7;;42167:93;42276:14;;;;;;;;;;;42272:2487;;;42337:7;:5;:7::i;:::-;42329:15;;:4;:15;;;;:49;;;;;42371:7;:5;:7::i;:::-;42365:13;;:2;:13;;;;42329:49;:86;;;;;42413:1;42399:16;;:2;:16;;;;42329:86;:128;;;;;42450:6;42436:21;;:2;:21;;;;42329:128;:158;;;;;42479:8;;;;;;;;;;;42478:9;42329:158;42307:2441;;;42527:13;;;;;;;;;;;42522:223;;42599:19;:25;42619:4;42599:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42628:19;:23;42648:2;42628:23;;;;;;;;;;;;;;;;;;;;;;;;;42599:52;42565:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42522:223;42901:20;;;;;;;;;;;42897:641;;;42982:7;:5;:7::i;:::-;42976:13;;:2;:13;;;;:72;;;;;43032:15;43018:30;;:2;:30;;;;42976:72;:129;;;;;43091:13;43077:28;;:2;:28;;;;42976:129;42946:573;;;43269:12;43194:28;:39;43223:9;43194:39;;;;;;;;;;;;;;;;:87;43156:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43483:12;43441:28;:39;43470:9;43441:39;;;;;;;;;;;;;;;:54;;;;42946:573;42897:641;43612:25;:31;43638:4;43612:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43669:31;:35;43701:2;43669:35;;;;;;;;;;;;;;;;;;;;;;;;;43668:36;43612:92;43586:1147;;;43791:20;;43781:6;:30;;43747:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43999:9;;43982:13;43992:2;43982:9;:13::i;:::-;43973:6;:22;;;;:::i;:::-;:35;;43939:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43586:1147;;;44177:25;:29;44203:2;44177:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44232:31;:37;44264:4;44232:37;;;;;;;;;;;;;;;;;;;;;;;;;44231:38;44177:92;44151:582;;;44356:20;;44346:6;:30;;44312:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44151:582;;;44513:31;:35;44545:2;44513:35;;;;;;;;;;;;;;;;;;;;;;;;;44508:225;;44633:9;;44616:13;44626:2;44616:9;:13::i;:::-;44607:6;:22;;;;:::i;:::-;:35;;44573:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44508:225;44151:582;43586:1147;42307:2441;42272:2487;44771:28;44802:24;44820:4;44802:9;:24::i;:::-;44771:55;;44839:12;44878:18;;44854:20;:42;;44839:57;;44927:7;:35;;;;;44951:11;;;;;;;;;;;44927:35;:61;;;;;44980:8;;;;;;;;;;;44979:9;44927:61;:110;;;;;45006:25;:31;45032:4;45006:31;;;;;;;;;;;;;;;;;;;;;;;;;45005:32;44927:110;:153;;;;;45055:19;:25;45075:4;45055:25;;;;;;;;;;;;;;;;;;;;;;;;;45054:26;44927:153;:194;;;;;45098:19;:23;45118:2;45098:23;;;;;;;;;;;;;;;;;;;;;;;;;45097:24;44927:194;44909:326;;;45159:4;45148:8;;:15;;;;;;;;;;;;;;;;;;45180:10;:8;:10::i;:::-;45218:5;45207:8;;:16;;;;;;;;;;;;;;;;;;44909:326;45266:8;;;;;;;;;;;45265:9;:55;;;;;45291:25;:29;45317:2;45291:29;;;;;;;;;;;;;;;;;;;;;;;;;45265:55;:85;;;;;45337:13;;;;;;;;;;;45265:85;:153;;;;;45403:15;;45386:14;;:32;;;;:::i;:::-;45367:15;:51;;45265:153;:196;;;;;45436:19;:25;45456:4;45436:25;;;;;;;;;;;;;;;;;;;;;;;;;45435:26;45265:196;45247:282;;;45488:29;:27;:29::i;:::-;;45247:282;45541:12;45557:8;;;;;;;;;;;45556:9;45541:24;;45667:19;:25;45687:4;45667:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45696:19;:23;45716:2;45696:23;;;;;;;;;;;;;;;;;;;;;;;;;45667:52;45663:100;;;45746:5;45736:15;;45663:100;45775:12;45880:7;45876:969;;;45932:25;:29;45958:2;45932:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45981:1;45965:13;;:17;45932:50;45928:768;;;46010:34;46040:3;46010:25;46021:13;;46010:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46003:41;;46113:13;;46093:16;;46086:4;:23;;;;:::i;:::-;46085:41;;;;:::i;:::-;46063:18;;:63;;;;;;;:::i;:::-;;;;;;;;46183:13;;46169:10;;46162:4;:17;;;;:::i;:::-;46161:35;;;;:::i;:::-;46145:12;;:51;;;;;;;:::i;:::-;;;;;;;;46265:13;;46245:16;;46238:4;:23;;;;:::i;:::-;46237:41;;;;:::i;:::-;46215:18;;:63;;;;;;;:::i;:::-;;;;;;;;45928:768;;;46340:25;:31;46366:4;46340:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46390:1;46375:12;;:16;46340:51;46336:360;;;46419:33;46448:3;46419:24;46430:12;;46419:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46412:40;;46520:12;;46501:15;;46494:4;:22;;;;:::i;:::-;46493:39;;;;:::i;:::-;46471:18;;:61;;;;;;;:::i;:::-;;;;;;;;46588:12;;46575:9;;46568:4;:16;;;;:::i;:::-;46567:33;;;;:::i;:::-;46551:12;;:49;;;;;;;:::i;:::-;;;;;;;;46668:12;;46649:15;;46642:4;:22;;;;:::i;:::-;46641:39;;;;:::i;:::-;46619:18;;:61;;;;;;;:::i;:::-;;;;;;;;46336:360;45928:768;46723:1;46716:4;:8;46712:91;;;46745:42;46761:4;46775;46782;46745:15;:42::i;:::-;46712:91;46829:4;46819:14;;;;;:::i;:::-;;;45876:969;46857:33;46873:4;46879:2;46883:6;46857:15;:33::i;:::-;42000:4898;;;;41887:5011;;;;:::o;3318:191::-;3392:16;3411:6;;;;;;;;;;;3392:25;;3437:8;3428:6;;:17;;;;;;;;;;;;;;;;;;3492:8;3461:40;;3482:8;3461:40;;;;;;;;;;;;3381:128;3318:191;:::o;40967:188::-;41084:5;41050:25;:31;41076:4;41050:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41141:5;41107:40;;41135:4;41107:40;;;;;;;;;;;;40967:188;;:::o;23038:98::-;23096:7;23127:1;23123;:5;;;;:::i;:::-;23116:12;;23038:98;;;;:::o;23437:::-;23495:7;23526:1;23522;:5;;;;:::i;:::-;23515:12;;23437:98;;;;:::o;14804:733::-;14962:1;14944:20;;:6;:20;;;14936:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15046:1;15025:23;;:9;:23;;;15017:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15101:47;15122:6;15130:9;15141:6;15101:20;:47::i;:::-;15161:21;15185:9;:17;15195:6;15185:17;;;;;;;;;;;;;;;;15161:41;;15238:6;15221:13;:23;;15213:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15359:6;15343:13;:22;15323:9;:17;15333:6;15323:17;;;;;;;;;;;;;;;:42;;;;15411:6;15387:9;:20;15397:9;15387:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15452:9;15435:35;;15444:6;15435:35;;;15463:6;15435:35;;;;;;:::i;:::-;;;;;;;;15483:46;15503:6;15511:9;15522:6;15483:19;:46::i;:::-;14925:612;14804:733;;;:::o;48025:1756::-;48064:23;48090:24;48108:4;48090:9;:24::i;:::-;48064:50;;48125:25;48221:12;;48187:18;;48153;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;48125:108;;48244:12;48292:1;48273:15;:20;:46;;;;48318:1;48297:17;:22;48273:46;48269:85;;;48336:7;;;;;48269:85;48409:2;48388:18;;:23;;;;:::i;:::-;48370:15;:41;48366:115;;;48467:2;48446:18;;:23;;;;:::i;:::-;48428:41;;48366:115;48542:23;48655:1;48622:17;48587:18;;48569:15;:36;;;;:::i;:::-;48568:71;;;;:::i;:::-;:88;;;;:::i;:::-;48542:114;;48667:26;48696:36;48716:15;48696;:19;;:36;;;;:::i;:::-;48667:65;;48745:25;48773:21;48745:49;;48807:36;48824:18;48807:16;:36::i;:::-;48856:18;48877:44;48903:17;48877:21;:25;;:44;;;;:::i;:::-;48856:65;;48934:23;48960:81;49013:17;48960:34;48975:18;;48960:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48934:107;;49052:17;49072:51;49105:17;49072:28;49087:12;;49072:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49052:71;;49136:23;49193:9;49175:15;49162:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;49136:66;;49236:1;49215:18;:22;;;;49269:1;49248:18;:22;;;;49296:1;49281:12;:16;;;;49332:9;;;;;;;;;;;49324:23;;49355:9;49324:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49310:59;;;;;49404:1;49386:15;:19;:42;;;;;49427:1;49409:15;:19;49386:42;49382:278;;;49445:46;49458:15;49475;49445:12;:46::i;:::-;49511:137;49544:18;49581:15;49615:18;;49511:137;;;;;;;;:::i;:::-;;;;;;;;49382:278;49694:15;;;;;;;;;;;49686:29;;49737:21;49686:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49672:101;;;;;48053:1728;;;;;;;;;;48025:1756;:::o;50352:760::-;50409:4;50443:15;50426:14;:32;;;;50513:28;50544:4;:14;;;50559:13;50544:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50513:60;;50623:20;50646:77;50707:5;50646:42;50671:16;;50646:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50623:100;;50843:1;50828:12;:16;50824:110;;;50861:61;50877:13;50900:6;50909:12;50861:15;:61::i;:::-;50824:110;51009:19;51046:13;51009:51;;51071:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51100:4;51093:11;;;;;50352:760;:::o;18565:125::-;;;;:::o;19294:124::-;;;;:::o;22681:98::-;22739:7;22770:1;22766;:5;;;;:::i;:::-;22759:12;;22681:98;;;;:::o;46906:589::-;47032:21;47070:1;47056:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47032:40;;47101:4;47083;47088:1;47083:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47127:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47117:4;47122:1;47117:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47162:62;47179:4;47194:15;47212:11;47162:8;:62::i;:::-;47263:15;:66;;;47344:11;47370:1;47414:4;47441;47461:15;47263:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46961:534;46906:589;:::o;47503:514::-;47651:62;47668:4;47683:15;47701:11;47651:8;:62::i;:::-;47756:15;:31;;;47795:9;47828:4;47848:11;47874:1;47917;47960:8;;;;;;;;;;;47983:15;47756:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47503:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:468::-;7798:6;7806;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;8108:2;8134:50;8176:7;8167:6;8156:9;8152:22;8134:50;:::i;:::-;8124:60;;8079:115;7733:468;;;;;:::o;8207:619::-;8284:6;8292;8300;8349:2;8337:9;8328:7;8324:23;8320:32;8317:119;;;8355:79;;:::i;:::-;8317:119;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8207:619;;;;;:::o;8832:323::-;8888:6;8937:2;8925:9;8916:7;8912:23;8908:32;8905:119;;;8943:79;;:::i;:::-;8905:119;9063:1;9088:50;9130:7;9121:6;9110:9;9106:22;9088:50;:::i;:::-;9078:60;;9034:114;8832:323;;;;:::o;9161:474::-;9229:6;9237;9286:2;9274:9;9265:7;9261:23;9257:32;9254:119;;;9292:79;;:::i;:::-;9254:119;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9161:474;;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:348;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11609:1;11541:66;11537:74;11534:1;11531:81;11526:1;11519:9;11512:17;11508:105;11505:131;;;11616:18;;:::i;:::-;11505:131;11664:1;11661;11657:9;11646:20;;11324:348;;;;:::o;11678:180::-;11726:77;11723:1;11716:88;11823:4;11820:1;11813:15;11847:4;11844:1;11837:15;11864:185;11904:1;11921:20;11939:1;11921:20;:::i;:::-;11916:25;;11955:20;11973:1;11955:20;:::i;:::-;11950:25;;11994:1;11984:35;;11999:18;;:::i;:::-;11984:35;12041:1;12038;12034:9;12029:14;;11864:185;;;;:::o;12055:234::-;12195:34;12191:1;12183:6;12179:14;12172:58;12264:17;12259:2;12251:6;12247:15;12240:42;12055:234;:::o;12295:366::-;12437:3;12458:67;12522:2;12517:3;12458:67;:::i;:::-;12451:74;;12534:93;12623:3;12534:93;:::i;:::-;12652:2;12647:3;12643:12;12636:19;;12295:366;;;:::o;12667:419::-;12833:4;12871:2;12860:9;12856:18;12848:26;;12920:9;12914:4;12910:20;12906:1;12895:9;12891:17;12884:47;12948:131;13074:4;12948:131;:::i;:::-;12940:139;;12667:419;;;:::o;13092:227::-;13232:34;13228:1;13220:6;13216:14;13209:58;13301:10;13296:2;13288:6;13284:15;13277:35;13092:227;:::o;13325:366::-;13467:3;13488:67;13552:2;13547:3;13488:67;:::i;:::-;13481:74;;13564:93;13653:3;13564:93;:::i;:::-;13682:2;13677:3;13673:12;13666:19;;13325:366;;;:::o;13697:419::-;13863:4;13901:2;13890:9;13886:18;13878:26;;13950:9;13944:4;13940:20;13936:1;13925:9;13921:17;13914:47;13978:131;14104:4;13978:131;:::i;:::-;13970:139;;13697:419;;;:::o;14122:191::-;14162:3;14181:20;14199:1;14181:20;:::i;:::-;14176:25;;14215:20;14233:1;14215:20;:::i;:::-;14210:25;;14258:1;14255;14251:9;14244:16;;14279:3;14276:1;14273:10;14270:36;;;14286:18;;:::i;:::-;14270:36;14122:191;;;;:::o;14319:238::-;14459:34;14455:1;14447:6;14443:14;14436:58;14528:21;14523:2;14515:6;14511:15;14504:46;14319:238;:::o;14563:366::-;14705:3;14726:67;14790:2;14785:3;14726:67;:::i;:::-;14719:74;;14802:93;14891:3;14802:93;:::i;:::-;14920:2;14915:3;14911:12;14904:19;;14563:366;;;:::o;14935:419::-;15101:4;15139:2;15128:9;15124:18;15116:26;;15188:9;15182:4;15178:20;15174:1;15163:9;15159:17;15152:47;15216:131;15342:4;15216:131;:::i;:::-;15208:139;;14935:419;;;:::o;15360:235::-;15500:34;15496:1;15488:6;15484:14;15477:58;15569:18;15564:2;15556:6;15552:15;15545:43;15360:235;:::o;15601:366::-;15743:3;15764:67;15828:2;15823:3;15764:67;:::i;:::-;15757:74;;15840:93;15929:3;15840:93;:::i;:::-;15958:2;15953:3;15949:12;15942:19;;15601:366;;;:::o;15973:419::-;16139:4;16177:2;16166:9;16162:18;16154:26;;16226:9;16220:4;16216:20;16212:1;16201:9;16197:17;16190:47;16254:131;16380:4;16254:131;:::i;:::-;16246:139;;15973:419;;;:::o;16398:179::-;16538:31;16534:1;16526:6;16522:14;16515:55;16398:179;:::o;16583:366::-;16725:3;16746:67;16810:2;16805:3;16746:67;:::i;:::-;16739:74;;16822:93;16911:3;16822:93;:::i;:::-;16940:2;16935:3;16931:12;16924:19;;16583:366;;;:::o;16955:419::-;17121:4;17159:2;17148:9;17144:18;17136:26;;17208:9;17202:4;17198:20;17194:1;17183:9;17179:17;17172:47;17236:131;17362:4;17236:131;:::i;:::-;17228:139;;16955:419;;;:::o;17380:244::-;17520:34;17516:1;17508:6;17504:14;17497:58;17589:27;17584:2;17576:6;17572:15;17565:52;17380:244;:::o;17630:366::-;17772:3;17793:67;17857:2;17852:3;17793:67;:::i;:::-;17786:74;;17869:93;17958:3;17869:93;:::i;:::-;17987:2;17982:3;17978:12;17971:19;;17630:366;;;:::o;18002:419::-;18168:4;18206:2;18195:9;18191:18;18183:26;;18255:9;18249:4;18245:20;18241:1;18230:9;18226:17;18219:47;18283:131;18409:4;18283:131;:::i;:::-;18275:139;;18002:419;;;:::o;18427:224::-;18567:34;18563:1;18555:6;18551:14;18544:58;18636:7;18631:2;18623:6;18619:15;18612:32;18427:224;:::o;18657:366::-;18799:3;18820:67;18884:2;18879:3;18820:67;:::i;:::-;18813:74;;18896:93;18985:3;18896:93;:::i;:::-;19014:2;19009:3;19005:12;18998:19;;18657:366;;;:::o;19029:419::-;19195:4;19233:2;19222:9;19218:18;19210:26;;19282:9;19276:4;19272:20;19268:1;19257:9;19253:17;19246:47;19310:131;19436:4;19310:131;:::i;:::-;19302:139;;19029:419;;;:::o;19454:180::-;19594:32;19590:1;19582:6;19578:14;19571:56;19454:180;:::o;19640:366::-;19782:3;19803:67;19867:2;19862:3;19803:67;:::i;:::-;19796:74;;19879:93;19968:3;19879:93;:::i;:::-;19997:2;19992:3;19988:12;19981:19;;19640:366;;;:::o;20012:419::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20265:9;20259:4;20255:20;20251:1;20240:9;20236:17;20229:47;20293:131;20419:4;20293:131;:::i;:::-;20285:139;;20012:419;;;:::o;20437:223::-;20577:34;20573:1;20565:6;20561:14;20554:58;20646:6;20641:2;20633:6;20629:15;20622:31;20437:223;:::o;20666:366::-;20808:3;20829:67;20893:2;20888:3;20829:67;:::i;:::-;20822:74;;20905:93;20994:3;20905:93;:::i;:::-;21023:2;21018:3;21014:12;21007:19;;20666:366;;;:::o;21038:419::-;21204:4;21242:2;21231:9;21227:18;21219:26;;21291:9;21285:4;21281:20;21277:1;21266:9;21262:17;21255:47;21319:131;21445:4;21319:131;:::i;:::-;21311:139;;21038:419;;;:::o;21463:240::-;21603:34;21599:1;21591:6;21587:14;21580:58;21672:23;21667:2;21659:6;21655:15;21648:48;21463:240;:::o;21709:366::-;21851:3;21872:67;21936:2;21931:3;21872:67;:::i;:::-;21865:74;;21948:93;22037:3;21948:93;:::i;:::-;22066:2;22061:3;22057:12;22050:19;;21709:366;;;:::o;22081:419::-;22247:4;22285:2;22274:9;22270:18;22262:26;;22334:9;22328:4;22324:20;22320:1;22309:9;22305:17;22298:47;22362:131;22488:4;22362:131;:::i;:::-;22354:139;;22081:419;;;:::o;22506:239::-;22646:34;22642:1;22634:6;22630:14;22623:58;22715:22;22710:2;22702:6;22698:15;22691:47;22506:239;:::o;22751:366::-;22893:3;22914:67;22978:2;22973:3;22914:67;:::i;:::-;22907:74;;22990:93;23079:3;22990:93;:::i;:::-;23108:2;23103:3;23099:12;23092:19;;22751:366;;;:::o;23123:419::-;23289:4;23327:2;23316:9;23312:18;23304:26;;23376:9;23370:4;23366:20;23362:1;23351:9;23347:17;23340:47;23404:131;23530:4;23404:131;:::i;:::-;23396:139;;23123:419;;;:::o;23548:225::-;23688:34;23684:1;23676:6;23672:14;23665:58;23757:8;23752:2;23744:6;23740:15;23733:33;23548:225;:::o;23779:366::-;23921:3;23942:67;24006:2;24001:3;23942:67;:::i;:::-;23935:74;;24018:93;24107:3;24018:93;:::i;:::-;24136:2;24131:3;24127:12;24120:19;;23779:366;;;:::o;24151:419::-;24317:4;24355:2;24344:9;24340:18;24332:26;;24404:9;24398:4;24394:20;24390:1;24379:9;24375:17;24368:47;24432:131;24558:4;24432:131;:::i;:::-;24424:139;;24151:419;;;:::o;24576:182::-;24716:34;24712:1;24704:6;24700:14;24693:58;24576:182;:::o;24764:366::-;24906:3;24927:67;24991:2;24986:3;24927:67;:::i;:::-;24920:74;;25003:93;25092:3;25003:93;:::i;:::-;25121:2;25116:3;25112:12;25105:19;;24764:366;;;:::o;25136:419::-;25302:4;25340:2;25329:9;25325:18;25317:26;;25389:9;25383:4;25379:20;25375:1;25364:9;25360:17;25353:47;25417:131;25543:4;25417:131;:::i;:::-;25409:139;;25136:419;;;:::o;25561:229::-;25701:34;25697:1;25689:6;25685:14;25678:58;25770:12;25765:2;25757:6;25753:15;25746:37;25561:229;:::o;25796:366::-;25938:3;25959:67;26023:2;26018:3;25959:67;:::i;:::-;25952:74;;26035:93;26124:3;26035:93;:::i;:::-;26153:2;26148:3;26144:12;26137:19;;25796:366;;;:::o;26168:419::-;26334:4;26372:2;26361:9;26357:18;26349:26;;26421:9;26415:4;26411:20;26407:1;26396:9;26392:17;26385:47;26449:131;26575:4;26449:131;:::i;:::-;26441:139;;26168:419;;;:::o;26593:143::-;26650:5;26681:6;26675:13;26666:22;;26697:33;26724:5;26697:33;:::i;:::-;26593:143;;;;:::o;26742:351::-;26812:6;26861:2;26849:9;26840:7;26836:23;26832:32;26829:119;;;26867:79;;:::i;:::-;26829:119;26987:1;27012:64;27068:7;27059:6;27048:9;27044:22;27012:64;:::i;:::-;27002:74;;26958:128;26742:351;;;;:::o;27099:223::-;27239:34;27235:1;27227:6;27223:14;27216:58;27308:6;27303:2;27295:6;27291:15;27284:31;27099:223;:::o;27328:366::-;27470:3;27491:67;27555:2;27550:3;27491:67;:::i;:::-;27484:74;;27567:93;27656:3;27567:93;:::i;:::-;27685:2;27680:3;27676:12;27669:19;;27328:366;;;:::o;27700:419::-;27866:4;27904:2;27893:9;27889:18;27881:26;;27953:9;27947:4;27943:20;27939:1;27928:9;27924:17;27917:47;27981:131;28107:4;27981:131;:::i;:::-;27973:139;;27700:419;;;:::o;28125:221::-;28265:34;28261:1;28253:6;28249:14;28242:58;28334:4;28329:2;28321:6;28317:15;28310:29;28125:221;:::o;28352:366::-;28494:3;28515:67;28579:2;28574:3;28515:67;:::i;:::-;28508:74;;28591:93;28680:3;28591:93;:::i;:::-;28709:2;28704:3;28700:12;28693:19;;28352:366;;;:::o;28724:419::-;28890:4;28928:2;28917:9;28913:18;28905:26;;28977:9;28971:4;28967:20;28963:1;28952:9;28948:17;28941:47;29005:131;29131:4;29005:131;:::i;:::-;28997:139;;28724:419;;;:::o;29149:224::-;29289:34;29285:1;29277:6;29273:14;29266:58;29358:7;29353:2;29345:6;29341:15;29334:32;29149:224;:::o;29379:366::-;29521:3;29542:67;29606:2;29601:3;29542:67;:::i;:::-;29535:74;;29618:93;29707:3;29618:93;:::i;:::-;29736:2;29731:3;29727:12;29720:19;;29379:366;;;:::o;29751:419::-;29917:4;29955:2;29944:9;29940:18;29932:26;;30004:9;29998:4;29994:20;29990:1;29979:9;29975:17;29968:47;30032:131;30158:4;30032:131;:::i;:::-;30024:139;;29751:419;;;:::o;30176:222::-;30316:34;30312:1;30304:6;30300:14;30293:58;30385:5;30380:2;30372:6;30368:15;30361:30;30176:222;:::o;30404:366::-;30546:3;30567:67;30631:2;30626:3;30567:67;:::i;:::-;30560:74;;30643:93;30732:3;30643:93;:::i;:::-;30761:2;30756:3;30752:12;30745:19;;30404:366;;;:::o;30776:419::-;30942:4;30980:2;30969:9;30965:18;30957:26;;31029:9;31023:4;31019:20;31015:1;31004:9;31000:17;30993:47;31057:131;31183:4;31057:131;:::i;:::-;31049:139;;30776:419;;;:::o;31201:172::-;31341:24;31337:1;31329:6;31325:14;31318:48;31201:172;:::o;31379:366::-;31521:3;31542:67;31606:2;31601:3;31542:67;:::i;:::-;31535:74;;31618:93;31707:3;31618:93;:::i;:::-;31736:2;31731:3;31727:12;31720:19;;31379:366;;;:::o;31751:419::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:297::-;32316:34;32312:1;32304:6;32300:14;32293:58;32385:34;32380:2;32372:6;32368:15;32361:59;32454:11;32449:2;32441:6;32437:15;32430:36;32176:297;:::o;32479:366::-;32621:3;32642:67;32706:2;32701:3;32642:67;:::i;:::-;32635:74;;32718:93;32807:3;32718:93;:::i;:::-;32836:2;32831:3;32827:12;32820:19;;32479:366;;;:::o;32851:419::-;33017:4;33055:2;33044:9;33040:18;33032:26;;33104:9;33098:4;33094:20;33090:1;33079:9;33075:17;33068:47;33132:131;33258:4;33132:131;:::i;:::-;33124:139;;32851:419;;;:::o;33276:240::-;33416:34;33412:1;33404:6;33400:14;33393:58;33485:23;33480:2;33472:6;33468:15;33461:48;33276:240;:::o;33522:366::-;33664:3;33685:67;33749:2;33744:3;33685:67;:::i;:::-;33678:74;;33761:93;33850:3;33761:93;:::i;:::-;33879:2;33874:3;33870:12;33863:19;;33522:366;;;:::o;33894:419::-;34060:4;34098:2;34087:9;34083:18;34075:26;;34147:9;34141:4;34137:20;34133:1;34122:9;34118:17;34111:47;34175:131;34301:4;34175:131;:::i;:::-;34167:139;;33894:419;;;:::o;34319:169::-;34459:21;34455:1;34447:6;34443:14;34436:45;34319:169;:::o;34494:366::-;34636:3;34657:67;34721:2;34716:3;34657:67;:::i;:::-;34650:74;;34733:93;34822:3;34733:93;:::i;:::-;34851:2;34846:3;34842:12;34835:19;;34494:366;;;:::o;34866:419::-;35032:4;35070:2;35059:9;35055:18;35047:26;;35119:9;35113:4;35109:20;35105:1;35094:9;35090:17;35083:47;35147:131;35273:4;35147:131;:::i;:::-;35139:139;;34866:419;;;:::o;35291:241::-;35431:34;35427:1;35419:6;35415:14;35408:58;35500:24;35495:2;35487:6;35483:15;35476:49;35291:241;:::o;35538:366::-;35680:3;35701:67;35765:2;35760:3;35701:67;:::i;:::-;35694:74;;35777:93;35866:3;35777:93;:::i;:::-;35895:2;35890:3;35886:12;35879:19;;35538:366;;;:::o;35910:419::-;36076:4;36114:2;36103:9;36099:18;36091:26;;36163:9;36157:4;36153:20;36149:1;36138:9;36134:17;36127:47;36191:131;36317:4;36191:131;:::i;:::-;36183:139;;35910:419;;;:::o;36335:194::-;36375:4;36395:20;36413:1;36395:20;:::i;:::-;36390:25;;36429:20;36447:1;36429:20;:::i;:::-;36424:25;;36473:1;36470;36466:9;36458:17;;36497:1;36491:4;36488:11;36485:37;;;36502:18;;:::i;:::-;36485:37;36335:194;;;;:::o;36535:225::-;36675:34;36671:1;36663:6;36659:14;36652:58;36744:8;36739:2;36731:6;36727:15;36720:33;36535:225;:::o;36766:366::-;36908:3;36929:67;36993:2;36988:3;36929:67;:::i;:::-;36922:74;;37005:93;37094:3;37005:93;:::i;:::-;37123:2;37118:3;37114:12;37107:19;;36766:366;;;:::o;37138:419::-;37304:4;37342:2;37331:9;37327:18;37319:26;;37391:9;37385:4;37381:20;37377:1;37366:9;37362:17;37355:47;37419:131;37545:4;37419:131;:::i;:::-;37411:139;;37138:419;;;:::o;37563:147::-;37664:11;37701:3;37686:18;;37563:147;;;;:::o;37716:114::-;;:::o;37836:398::-;37995:3;38016:83;38097:1;38092:3;38016:83;:::i;:::-;38009:90;;38108:93;38197:3;38108:93;:::i;:::-;38226:1;38221:3;38217:11;38210:18;;37836:398;;;:::o;38240:379::-;38424:3;38446:147;38589:3;38446:147;:::i;:::-;38439:154;;38610:3;38603:10;;38240:379;;;:::o;38625:442::-;38774:4;38812:2;38801:9;38797:18;38789:26;;38825:71;38893:1;38882:9;38878:17;38869:6;38825:71;:::i;:::-;38906:72;38974:2;38963:9;38959:18;38950:6;38906:72;:::i;:::-;38988;39056:2;39045:9;39041:18;39032:6;38988:72;:::i;:::-;38625:442;;;;;;:::o;39073:180::-;39121:77;39118:1;39111:88;39218:4;39215:1;39208:15;39242:4;39239:1;39232:15;39259:180;39307:77;39304:1;39297:88;39404:4;39401:1;39394:15;39428:4;39425:1;39418:15;39445:143;39502:5;39533:6;39527:13;39518:22;;39549:33;39576:5;39549:33;:::i;:::-;39445:143;;;;:::o;39594:351::-;39664:6;39713:2;39701:9;39692:7;39688:23;39684:32;39681:119;;;39719:79;;:::i;:::-;39681:119;39839:1;39864:64;39920:7;39911:6;39900:9;39896:22;39864:64;:::i;:::-;39854:74;;39810:128;39594:351;;;;:::o;39951:85::-;39996:7;40025:5;40014:16;;39951:85;;;:::o;40042:158::-;40100:9;40133:61;40151:42;40160:32;40186:5;40160:32;:::i;:::-;40151:42;:::i;:::-;40133:61;:::i;:::-;40120:74;;40042:158;;;:::o;40206:147::-;40301:45;40340:5;40301:45;:::i;:::-;40296:3;40289:58;40206:147;;:::o;40359:114::-;40426:6;40460:5;40454:12;40444:22;;40359:114;;;:::o;40479:184::-;40578:11;40612:6;40607:3;40600:19;40652:4;40647:3;40643:14;40628:29;;40479:184;;;;:::o;40669:132::-;40736:4;40759:3;40751:11;;40789:4;40784:3;40780:14;40772:22;;40669:132;;;:::o;40807:108::-;40884:24;40902:5;40884:24;:::i;:::-;40879:3;40872:37;40807:108;;:::o;40921:179::-;40990:10;41011:46;41053:3;41045:6;41011:46;:::i;:::-;41089:4;41084:3;41080:14;41066:28;;40921:179;;;;:::o;41106:113::-;41176:4;41208;41203:3;41199:14;41191:22;;41106:113;;;:::o;41255:732::-;41374:3;41403:54;41451:5;41403:54;:::i;:::-;41473:86;41552:6;41547:3;41473:86;:::i;:::-;41466:93;;41583:56;41633:5;41583:56;:::i;:::-;41662:7;41693:1;41678:284;41703:6;41700:1;41697:13;41678:284;;;41779:6;41773:13;41806:63;41865:3;41850:13;41806:63;:::i;:::-;41799:70;;41892:60;41945:6;41892:60;:::i;:::-;41882:70;;41738:224;41725:1;41722;41718:9;41713:14;;41678:284;;;41682:14;41978:3;41971:10;;41379:608;;;41255:732;;;;:::o;41993:831::-;42256:4;42294:3;42283:9;42279:19;42271:27;;42308:71;42376:1;42365:9;42361:17;42352:6;42308:71;:::i;:::-;42389:80;42465:2;42454:9;42450:18;42441:6;42389:80;:::i;:::-;42516:9;42510:4;42506:20;42501:2;42490:9;42486:18;42479:48;42544:108;42647:4;42638:6;42544:108;:::i;:::-;42536:116;;42662:72;42730:2;42719:9;42715:18;42706:6;42662:72;:::i;:::-;42744:73;42812:3;42801:9;42797:19;42788:6;42744:73;:::i;:::-;41993:831;;;;;;;;:::o;42830:807::-;43079:4;43117:3;43106:9;43102:19;43094:27;;43131:71;43199:1;43188:9;43184:17;43175:6;43131:71;:::i;:::-;43212:72;43280:2;43269:9;43265:18;43256:6;43212:72;:::i;:::-;43294:80;43370:2;43359:9;43355:18;43346:6;43294:80;:::i;:::-;43384;43460:2;43449:9;43445:18;43436:6;43384:80;:::i;:::-;43474:73;43542:3;43531:9;43527:19;43518:6;43474:73;:::i;:::-;43557;43625:3;43614:9;43610:19;43601:6;43557:73;:::i;:::-;42830:807;;;;;;;;;:::o;43643:663::-;43731:6;43739;43747;43796:2;43784:9;43775:7;43771:23;43767:32;43764:119;;;43802:79;;:::i;:::-;43764:119;43922:1;43947:64;44003:7;43994:6;43983:9;43979:22;43947:64;:::i;:::-;43937:74;;43893:128;44060:2;44086:64;44142:7;44133:6;44122:9;44118:22;44086:64;:::i;:::-;44076:74;;44031:129;44199:2;44225:64;44281:7;44272:6;44261:9;44257:22;44225:64;:::i;:::-;44215:74;;44170:129;43643:663;;;;;:::o

Swarm Source

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