ETH Price: $3,062.51 (-4.14%)
 

Overview

Max Total Supply

2,488,888,000 MAMBA

Holders

83,235

Transfers

-
7 (0%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MAMBA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-05-29
*/

/**
           /^\/^\
         _|__|  O|
\/     /~     \_/ \
 \____|__________/  \
        \_______      \
                `\     \                 \
                  |     |                  \
                 /      /                    \
                /     /                       \\
              /      /                         \ \
             /     /                            \  \
           /     /             _----_            \   \
          /     /           _-~      ~-_         |   |
         (      (        _-~    _--_    ~-_     _/   |
          \      ~-____-~    _-~    ~-_    ~-_-~    /
            ~-_           _-~          ~-_       _-~
               ~--______-~                ~-___-~
         .-.   .-.  .--.  .-.   .-..----.   .--.  
         |  `.'  | / {} \ |  `.'  || {}  } / {} \ 
         | |\ /| |/  /\  \| |\ /| || {}  }/  /\  \
         `-' ` `-'`-'  `-'`-' ` `-'`----' `-'  `-'
 */

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */

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

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

// OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (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);
}

// OpenZeppelin Contracts (last updated v4.8.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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

// OpenZeppelin Contracts (last updated v4.6.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 subtraction 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;
        }
    }
}

// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingActive;
    bool public swapEnabled;
    bool public limited = true;
    bool private _swapping;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    uint256 private _previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTransaction;
    mapping(address => bool) private _automatedMarketMakerPairs;
    mapping(address => bool) private _isMamba;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

    constructor(address[] memory _mambas) ERC20("Mamba", "MAMBA") {

        uint256 totalSupply = 2_488_888_000 * (10 ** 18);

        address mambaMultisig = 0x41cEc07AfCE8Feb9C56164667cFD7fD027aF68a3;  
        address mambaAirdrop = 0x719B04440f7403c1eBec51A4f2093eaA5cAB6b40;
        address mambaMM = 0xD2444f1EACc911141d74e8FBeD4397E3D9020fCC;

        uniswapV2Router = IUniswapV2Router02(
            0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxTransaction = totalSupply;
        maxWallet = totalSupply / 50;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;
        _previousFee = sellTotalFees;

        marketingWallet = mambaMultisig;
        developmentWallet = mambaMultisig;
        liquidityWallet = mambaMultisig;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(mambaMultisig, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(mambaMultisig, true);

        _mint(mambaMultisig, (totalSupply / 100) * 30); 
        _mint(mambaAirdrop, (totalSupply / 100) * 35); 
        _mint(mambaMM, (totalSupply / 100) * 35); 

        setMamba(_mambas, true);
    }

    receive() external payable {}

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }

    function addLiquidity() public onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function enableTrading() public onlyOwner {
        require(!tradingActive, "Trading already active.");
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner{
        limited = false;
        maxWallet = totalSupply();
    }

    function setMamba(address[] memory _mambas, bool set) internal {
        for(uint256 i = 0; i < _mambas.length; i++){
            _isMamba[_mambas[i]] = set;
        }
    }

    function setSwapEnabled(bool value) public onlyOwner {
        swapEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            amount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = amount;
    }

    function setMaxWalletAndMaxTransaction(
        uint256 _maxTransaction,
        uint256 _maxWallet
    ) public onlyOwner {
        require(
            _maxTransaction >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            _maxWallet >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxTransaction = _maxTransaction;
        maxWallet = _maxWallet;
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _buyMarketingFee = _marketingFee;
        _buyDevelopmentFee = _developmentFee;
        _buyLiquidityFee = _liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _sellMarketingFee = _marketingFee;
        _sellDevelopmentFee = _developmentFee;
        _sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            _sellMarketingFee +
            _sellDevelopmentFee +
            _sellLiquidityFee;
        _previousFee = sellTotalFees;
    }

    function setMarketingWallet(address _marketingWallet) public onlyOwner {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function setDevelopmentWallet(address _developmentWallet) public onlyOwner {
        require(_developmentWallet != address(0), "ERC20: Address 0");
        address oldWallet = developmentWallet;
        developmentWallet = _developmentWallet;
        emit developmentWalletUpdated(developmentWallet, oldWallet);
    }

    function setLiquidityWallet(address _liquidityWallet) public onlyOwner {
        require(_liquidityWallet != address(0), "ERC20: Address 0");
        address oldWallet = liquidityWallet;
        liquidityWallet = _liquidityWallet;
        emit liquidityWalletUpdated(liquidityWallet, oldWallet);
    }

    function excludeFromMaxTransaction(address account, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxTransaction[account] = value;
        emit ExcludeFromLimits(account, value);
    }

    function bulkExcludeFromMaxTransaction(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromMaxTransaction[accounts[i]] = value;
            emit ExcludeFromLimits(accounts[i], value);
        }
    }

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

    function bulkExcludeFromFees(address[] calldata accounts, bool value)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = value;
            emit ExcludeFromFees(accounts[i], value);
        }
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function isExcludedFromMaxTransaction(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxTransaction[account];
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        _automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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 (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !_swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            if (limited && from == address(uniswapV2Pair)) {  // has to be the LP 
                require(balanceOf(to) + amount <= maxWallet, "Forbid");
                require(_isMamba[from] || _isMamba[to], "Forbid");
            }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = _previousFee;
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;

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

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

        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 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

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

    function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner {
        require(addresses.length <= 2500,"More than 2500 wallets");
        require(addresses.length == tokenAmounts.length,"List length mismatch");

        uint256 airdropTotal = 0;
        for(uint i=0; i < addresses.length; i++){
            airdropTotal += tokenAmounts[i];
        }
        require(balanceOf(msg.sender) >= airdropTotal, "Token balance too low");

        for(uint i=0; i < addresses.length; i++){
            super._transfer(msg.sender, addresses[i], tokenAmounts[i]);
        }

        emit TokensAirdropped(addresses.length, airdropTotal);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"_mambas","type":"address[]"}],"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","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":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","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":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600960166101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200709a3803806200709a833981810160405281019062000052919062000daf565b6040518060400160405280600581526020017f4d616d62610000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d414d42410000000000000000000000000000000000000000000000000000008152508160039081620000cf91906200104b565b508060049081620000e191906200104b565b50505062000104620000f8620004de60201b60201c565b620004e660201b60201c565b60006b080ac288d56a6bd0f3000000905060007341cec07afce8feb9c56164667cfd7fd027af68a39050600073719b04440f7403c1ebec51a4f2093eaa5cab6b409050600073d2444f1eacc911141d74e8fbed4397e3d9020fcc9050736bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620001dd306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620005ac60201b60201c565b83600a81905550603284620001f3919062001190565b600b819055506103e86001856200020b9190620011c8565b62000217919062001190565b600c819055506000600e819055506000600f819055506000601081905550601054600f54600e546200024a919062001213565b62000256919062001213565b600d8190555060006012819055506000601381905550600060148190555060145460135460125462000289919062001213565b62000295919062001213565b60118190555060115460188190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003896200037b6200077d60201b60201c565b6001620007a760201b60201c565b6200039c306001620007a760201b60201c565b620003b161dead6001620007a760201b60201c565b620003c4836001620007a760201b60201c565b620003e6620003d86200077d60201b60201c565b60016200086260201b60201c565b620003f93060016200086260201b60201c565b6200040e61dead60016200086260201b60201c565b6200042360805160016200086260201b60201c565b620004368360016200086260201b60201c565b6200046483601e6064876200044c919062001190565b620004589190620011c8565b6200091d60201b60201c565b620004928260236064876200047a919062001190565b620004869190620011c8565b6200091d60201b60201c565b620004c0816023606487620004a8919062001190565b620004b49190620011c8565b6200091d60201b60201c565b620004d385600162000a8a60201b60201c565b505050505062001557565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200061e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200061590620012d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000687906200136d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620007709190620013a0565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007b762000b2660201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008569190620013da565b60405180910390a25050565b6200087262000b2660201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620009119190620013da565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200098f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009869062001447565b60405180910390fd5b620009a36000838362000bb760201b60201c565b8060026000828254620009b7919062001213565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a6a9190620013a0565b60405180910390a362000a866000838362000bbc60201b60201c565b5050565b60005b825181101562000b215781601c600085848151811062000ab25762000ab162001469565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808062000b189062001498565b91505062000a8d565b505050565b62000b36620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b5c6200077d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000bb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bac9062001535565b60405180910390fd5b565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000c258262000bda565b810181811067ffffffffffffffff8211171562000c475762000c4662000beb565b5b80604052505050565b600062000c5c62000bc1565b905062000c6a828262000c1a565b919050565b600067ffffffffffffffff82111562000c8d5762000c8c62000beb565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd08262000ca3565b9050919050565b62000ce28162000cc3565b811462000cee57600080fd5b50565b60008151905062000d028162000cd7565b92915050565b600062000d1f62000d198462000c6f565b62000c50565b9050808382526020820190506020840283018581111562000d455762000d4462000c9e565b5b835b8181101562000d72578062000d5d888262000cf1565b84526020840193505060208101905062000d47565b5050509392505050565b600082601f83011262000d945762000d9362000bd5565b5b815162000da684826020860162000d08565b91505092915050565b60006020828403121562000dc85762000dc762000bcb565b5b600082015167ffffffffffffffff81111562000de95762000de862000bd0565b5b62000df78482850162000d7c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5357607f821691505b60208210810362000e695762000e6862000e0b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ed37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e94565b62000edf868362000e94565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f2c62000f2662000f208462000ef7565b62000f01565b62000ef7565b9050919050565b6000819050919050565b62000f488362000f0b565b62000f6062000f578262000f33565b84845462000ea1565b825550505050565b600090565b62000f7762000f68565b62000f8481848462000f3d565b505050565b5b8181101562000fac5762000fa060008262000f6d565b60018101905062000f8a565b5050565b601f82111562000ffb5762000fc58162000e6f565b62000fd08462000e84565b8101602085101562000fe0578190505b62000ff862000fef8562000e84565b83018262000f89565b50505b505050565b600082821c905092915050565b6000620010206000198460080262001000565b1980831691505092915050565b60006200103b83836200100d565b9150826002028217905092915050565b620010568262000e00565b67ffffffffffffffff81111562001072576200107162000beb565b5b6200107e825462000e3a565b6200108b82828562000fb0565b600060209050601f831160018114620010c35760008415620010ae578287015190505b620010ba85826200102d565b8655506200112a565b601f198416620010d38662000e6f565b60005b82811015620010fd57848901518255600182019150602085019450602081019050620010d6565b868310156200111d578489015162001119601f8916826200100d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200119d8262000ef7565b9150620011aa8362000ef7565b925082620011bd57620011bc62001132565b5b828204905092915050565b6000620011d58262000ef7565b9150620011e28362000ef7565b9250828202620011f28162000ef7565b915082820484148315176200120c576200120b62001161565b5b5092915050565b6000620012208262000ef7565b91506200122d8362000ef7565b925082820190508082111562001248576200124762001161565b5b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620012bd6024836200124e565b9150620012ca826200125f565b604082019050919050565b60006020820190508181036000830152620012f081620012ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620013556022836200124e565b91506200136282620012f7565b604082019050919050565b60006020820190508181036000830152620013888162001346565b9050919050565b6200139a8162000ef7565b82525050565b6000602082019050620013b760008301846200138f565b92915050565b60008115159050919050565b620013d481620013bd565b82525050565b6000602082019050620013f16000830184620013c9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200142f601f836200124e565b91506200143c82620013f7565b602082019050919050565b60006020820190508181036000830152620014628162001420565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620014a58262000ef7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620014da57620014d962001161565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200151d6020836200124e565b91506200152a82620014e5565b602082019050919050565b6000602082019050818103600083015262001550816200150e565b9050919050565b608051615ae8620015b260003960008181610e070152818161206901528181612114015281816122ce015281816123cb01528181613dd001528181613eb101528181613ed801528181613f740152613f9b0152615ae86000f3fe6080604052600436106102975760003560e01c80637571336a1161015a578063c24a7a8c116100c1578063dd62ed3e1161007a578063dd62ed3e146109e9578063e01af92c14610a26578063e2f4560514610a4f578063e8078d9414610a7a578063f2fde38b14610a91578063f8b45b0514610aba5761029e565b8063c24a7a8c146108ed578063c3f70b5214610916578063cb96372814610941578063d46980161461096a578063d7d1d10e14610995578063d85ba063146109be5761029e565b8063a457c2d711610113578063a457c2d7146107cb578063a9059cbb14610808578063afa4f3b214610845578063bbc0c7421461086e578063c024666814610899578063c04a5414146108c25761029e565b80637571336a146106df57806375f0a87414610708578063860a32ec146107335780638a8c523c1461075e5780638da5cb5b1461077557806395d89b41146107a05761029e565b806339509351116101fe5780636a486a8e116101b75780636a486a8e146105f55780636ddd17131461062057806370a082311461064b578063715018a61461068857806372ac24861461069f578063751039fc146106c85761029e565b806339509351146104d557806342966c681461051257806349bd5a5e1461053b5780634fbee193146105665780635d098b38146105a357806367243482146105cc5761029e565b806318160ddd1161025057806318160ddd146103b157806318d9ceae146103dc57806323b872dd1461041957806327c8f83514610456578063296f0a0c14610481578063313ce567146104aa5761029e565b806306fdde03146102a3578063095ea7b3146102ce5780630d075d9c1461030b5780630f683e9014610334578063155ca7c11461035d5780631694505e146103865761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ae5565b6040516102c591906140fa565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906141ba565b610b77565b6040516103029190614215565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190614230565b610b9a565b005b34801561034057600080fd5b5061035b60048036038101906103569190614230565b610c3a565b005b34801561036957600080fd5b50610384600480360381019061037f9190614314565b610ce3565b005b34801561039257600080fd5b5061039b610e05565b6040516103a891906143d3565b60405180910390f35b3480156103bd57600080fd5b506103c6610e29565b6040516103d391906143fd565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190614418565b610e33565b6040516104109190614215565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190614445565b610e89565b60405161044d9190614215565b60405180910390f35b34801561046257600080fd5b5061046b610eb8565b60405161047891906144a7565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614418565b610ebe565b005b3480156104b657600080fd5b506104bf61101d565b6040516104cc91906144de565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906141ba565b611026565b6040516105099190614215565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906144f9565b61105d565b005b34801561054757600080fd5b5061055061106a565b60405161055d91906144a7565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190614418565b611090565b60405161059a9190614215565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614418565b6110e6565b005b3480156105d857600080fd5b506105f360048036038101906105ee919061457c565b611245565b005b34801561060157600080fd5b5061060a611422565b60405161061791906143fd565b60405180910390f35b34801561062c57600080fd5b50610635611428565b6040516106429190614215565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190614418565b61143b565b60405161067f91906143fd565b60405180910390f35b34801561069457600080fd5b5061069d611483565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190614418565b611497565b005b3480156106d457600080fd5b506106dd6115f6565b005b3480156106eb57600080fd5b50610706600480360381019061070191906145fd565b611629565b005b34801561071457600080fd5b5061071d6116da565b60405161072a91906144a7565b60405180910390f35b34801561073f57600080fd5b50610748611700565b6040516107559190614215565b60405180910390f35b34801561076a57600080fd5b50610773611713565b005b34801561078157600080fd5b5061078a6117a3565b60405161079791906144a7565b60405180910390f35b3480156107ac57600080fd5b506107b56117cd565b6040516107c291906140fa565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906141ba565b61185f565b6040516107ff9190614215565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906141ba565b6118d6565b60405161083c9190614215565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906144f9565b6118f9565b005b34801561087a57600080fd5b506108836119d2565b6040516108909190614215565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906145fd565b6119e5565b005b3480156108ce57600080fd5b506108d7611a96565b6040516108e491906144a7565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061463d565b611abc565b005b34801561092257600080fd5b5061092b611b9c565b60405161093891906143fd565b60405180910390f35b34801561094d57600080fd5b5061096860048036038101906109639190614418565b611ba2565b005b34801561097657600080fd5b5061097f611e0f565b60405161098c91906144a7565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190614314565b611e35565b005b3480156109ca57600080fd5b506109d3611f57565b6040516109e091906143fd565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b919061467d565b611f5d565b604051610a1d91906143fd565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a4891906146bd565b611fe4565b005b348015610a5b57600080fd5b50610a64612009565b604051610a7191906143fd565b60405180910390f35b348015610a8657600080fd5b50610a8f61200f565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab39190614418565b612485565b005b348015610ac657600080fd5b50610acf612508565b604051610adc91906143fd565b60405180910390f35b606060038054610af490614719565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2090614719565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b600080610b8261250e565b9050610b8f818585612516565b600191505092915050565b610ba26126df565b61012c818385610bb29190614779565b610bbc9190614779565b1115610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf49061481f565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610c259190614779565b610c2f9190614779565b600d81905550505050565b610c426126df565b61012c818385610c529190614779565b610c5c9190614779565b1115610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c949061481f565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610cc59190614779565b610ccf9190614779565b601181905550601154601881905550505050565b610ceb6126df565b60005b83839050811015610dff578160196000868685818110610d1157610d1061483f565b5b9050602002016020810190610d269190614418565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610d8a57610d8961483f565b5b9050602002016020810190610d9f9190614418565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610de49190614215565b60405180910390a28080610df79061486e565b915050610cee565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080610e9461250e565b9050610ea185828561275d565b610eac8585856127e9565b60019150509392505050565b61dead81565b610ec66126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614902565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b60008061103161250e565b90506110528185856110438589611f5d565b61104d9190614779565b612516565b600191505092915050565b6110673382613454565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110ee6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490614902565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b61124d6126df565b6109c4848490501115611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061496e565b60405180910390fd5b8181905084849050146112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906149da565b60405180910390fd5b6000805b85859050811015611326578383828181106112ff576112fe61483f565b5b90506020020135826113119190614779565b9150808061131e9061486e565b9150506112e1565b50806113313361143b565b1015611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614a46565b60405180910390fd5b60005b858590508110156113de576113cb338787848181106113975761139661483f565b5b90506020020160208101906113ac9190614418565b8686858181106113bf576113be61483f565b5b90506020020135613621565b80806113d69061486e565b915050611375565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611413929190614a66565b60405180910390a15050505050565b60115481565b600960159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6126df565b6114956000613897565b565b61149f6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614902565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b6115fe6126df565b6000600960166101000a81548160ff021916908315150217905550611621610e29565b600b81905550565b6116316126df565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116ce9190614215565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960169054906101000a900460ff1681565b61171b6126df565b600960149054906101000a900460ff161561176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614adb565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117dc90614719565b80601f016020809104026020016040519081016040528092919081815260200182805461180890614719565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b5050505050905090565b60008061186a61250e565b905060006118788286611f5d565b9050838110156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614b6d565b60405180910390fd5b6118ca8286868403612516565b60019250505092915050565b6000806118e161250e565b90506118ee8185856127e9565b600191505092915050565b6119016126df565b620186a0600161190f610e29565b6119199190614b8d565b6119239190614bfe565b811015611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614ca1565b60405180910390fd5b6103e86005611972610e29565b61197c9190614b8d565b6119869190614bfe565b8111156119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf90614d33565b60405180910390fd5b80600c8190555050565b600960149054906101000a900460ff1681565b6119ed6126df565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a8a9190614215565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ac46126df565b6103e86005611ad1610e29565b611adb9190614b8d565b611ae59190614bfe565b821015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614dc5565b60405180910390fd5b6103e86005611b34610e29565b611b3e9190614b8d565b611b489190614bfe565b811015611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614e57565b60405180910390fd5b81600a8190555080600b819055505050565b600a5481565b611baa6126df565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50573373ffffffffffffffffffffffffffffffffffffffff1647604051611c0390614ea8565b60006040518083038185875af1925050503d8060008114611c40576040519150601f19603f3d011682016040523d82523d6000602084013e611c45565b606091505b505080915050611e0b565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c8b91906144a7565b602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc9190614ed2565b11611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390614f4b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4791906144a7565b602060405180830381865afa158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190614ed2565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611dc5929190614f6b565b6020604051808303816000875af1158015611de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e089190614fa9565b50505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e3d6126df565b60005b83839050811015611f515781601a6000868685818110611e6357611e6261483f565b5b9050602002016020810190611e789190614418565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110611edc57611edb61483f565b5b9050602002016020810190611ef19190614418565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611f369190614215565b60405180910390a28080611f499061486e565b915050611e40565b50505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fec6126df565b80600960156101000a81548160ff02191690831515021790555050565b600c5481565b6120176126df565b600960149054906101000a900460ff1615612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614adb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f69190614feb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a19190614feb565b6040518363ffffffff1660e01b81526004016121be929190615018565b6020604051808303816000875af11580156121dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122019190614feb565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061228e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612516565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161232b929190614f6b565b6020604051808303816000875af115801561234a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236e9190614fa9565b5061239c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161395d565b6123c9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611629565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306124103061143b565b60008061241b6117a3565b426040518863ffffffff1660e01b815260040161243d9695949392919061507c565b60606040518083038185885af115801561245b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061248091906150dd565b505050565b61248d6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906151a2565b60405180910390fd5b61250581613897565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90615234565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb906152c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126d291906143fd565b60405180910390a3505050565b6126e761250e565b73ffffffffffffffffffffffffffffffffffffffff166127056117a3565b73ffffffffffffffffffffffffffffffffffffffff161461275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275290615332565b60405180910390fd5b565b60006127698484611f5d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127e357818110156127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc9061539e565b60405180910390fd5b6127e28484848403612516565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f90615430565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be906154c2565b60405180910390fd5b600081036128e0576128db83836000613621565b61344f565b6128e86117a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295657506129266117a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129c9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e25750600960179054906101000a900460ff16155b15612f6c57600960149054906101000a900460ff16612adc57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a9c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29061552e565b60405180910390fd5b5b600960169054906101000a900460ff168015612b455750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612c8357600b5481612b578461143b565b612b619190614779565b1115612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061559a565b60405180910390fd5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c435750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c799061559a565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d265750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcd57600a54811115612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d679061562c565b60405180910390fd5b600b54612d7c8361143b565b82612d879190614779565b1115612dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbf90615698565b60405180910390fd5b612f6b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e705750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ebf57600a54811115612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb19061572a565b60405180910390fd5b612f6a565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f6957600b54612f1c8361143b565b82612f279190614779565b1115612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90615698565b60405180910390fd5b5b5b5b5b6000612f773061143b565b90506000600c548210159050808015612f9c5750600960159054906101000a900460ff165b8015612fb55750600960179054906101000a900460ff16155b801561300b5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130615750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130b75750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130fb576001600960176101000a81548160ff0219169083151502179055506130df6139fe565b6000600960176101000a81548160ff0219169083151502179055505b6000600960179054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131b15750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131bb57600090505b6000811561343657601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321e57506000601154115b156132ec5761324c61271061323e60115488613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506011546014548261325f9190614b8d565b6132699190614bfe565b6017600082825461327a9190614779565b92505081905550601154601254826132929190614b8d565b61329c9190614bfe565b601560008282546132ad9190614779565b92505081905550601154601354826132c59190614b8d565b6132cf9190614bfe565b601660008282546132e09190614779565b92505081905550613412565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334757506000600d54115b1561341157613375612710613367600d5488613ce590919063ffffffff16565b613cfb90919063ffffffff16565b9050600d54601054826133889190614b8d565b6133929190614bfe565b601760008282546133a39190614779565b92505081905550600d54600e54826133bb9190614b8d565b6133c59190614bfe565b601560008282546133d69190614779565b92505081905550600d54600f54826133ee9190614b8d565b6133f89190614bfe565b601660008282546134099190614779565b925050819055505b5b600081111561342757613426873083613621565b5b8085613433919061574a565b94505b613441878787613621565b601854601181905550505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ba906157f0565b60405180910390fd5b6134cf82600083613d11565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90615882565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161360891906143fd565b60405180910390a361361c83600084613d16565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368790615430565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f6906154c2565b60405180910390fd5b61370a838383613d11565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378790615914565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161387e91906143fd565b60405180910390a3613891848484613d16565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613a093061143b565b90506000601654601554601754613a209190614779565b613a2a9190614779565b9050600080831480613a3c5750600082145b15613a4957505050613ce3565b600a600c54613a589190614b8d565b831115613a7157600a600c54613a6e9190614b8d565b92505b600060028360175486613a849190614b8d565b613a8e9190614bfe565b613a989190614bfe565b90506000613aaf8286613d1b90919063ffffffff16565b90506000479050613abf82613d31565b6000613ad48247613d1b90919063ffffffff16565b90506000613aff87613af160155485613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506000613b2a88613b1c60165486613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506000818385613b3b919061574a565b613b45919061574a565b9050600060178190555060006015819055506000601681905550600087118015613b6f5750600081115b15613bbc57613b7e8782613f6e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613bb393929190615934565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c0290614ea8565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c9090614ea8565b60006040518083038185875af1925050503d8060008114613ccd576040519150601f19603f3d011682016040523d82523d6000602084013e613cd2565b606091505b505080985050505050505050505050505b565b60008183613cf39190614b8d565b905092915050565b60008183613d099190614bfe565b905092915050565b505050565b505050565b60008183613d29919061574a565b905092915050565b6000600267ffffffffffffffff811115613d4e57613d4d61596b565b5b604051908082528060200260200182016040528015613d7c5781602001602082028036833780820191505090505b5090503081600081518110613d9457613d9361483f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d9190614feb565b81600181518110613e7157613e7061483f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ed6307f000000000000000000000000000000000000000000000000000000000000000084612516565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f38959493929190615a58565b600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b505050505050565b613f99307f000000000000000000000000000000000000000000000000000000000000000084612516565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140209695949392919061507c565b60606040518083038185885af115801561403e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061406391906150dd565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140a4578082015181840152602081019050614089565b60008484015250505050565b6000601f19601f8301169050919050565b60006140cc8261406a565b6140d68185614075565b93506140e6818560208601614086565b6140ef816140b0565b840191505092915050565b6000602082019050818103600083015261411481846140c1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061415182614126565b9050919050565b61416181614146565b811461416c57600080fd5b50565b60008135905061417e81614158565b92915050565b6000819050919050565b61419781614184565b81146141a257600080fd5b50565b6000813590506141b48161418e565b92915050565b600080604083850312156141d1576141d061411c565b5b60006141df8582860161416f565b92505060206141f0858286016141a5565b9150509250929050565b60008115159050919050565b61420f816141fa565b82525050565b600060208201905061422a6000830184614206565b92915050565b6000806000606084860312156142495761424861411c565b5b6000614257868287016141a5565b9350506020614268868287016141a5565b9250506040614279868287016141a5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126142a8576142a7614283565b5b8235905067ffffffffffffffff8111156142c5576142c4614288565b5b6020830191508360208202830111156142e1576142e061428d565b5b9250929050565b6142f1816141fa565b81146142fc57600080fd5b50565b60008135905061430e816142e8565b92915050565b60008060006040848603121561432d5761432c61411c565b5b600084013567ffffffffffffffff81111561434b5761434a614121565b5b61435786828701614292565b9350935050602061436a868287016142ff565b9150509250925092565b6000819050919050565b600061439961439461438f84614126565b614374565b614126565b9050919050565b60006143ab8261437e565b9050919050565b60006143bd826143a0565b9050919050565b6143cd816143b2565b82525050565b60006020820190506143e860008301846143c4565b92915050565b6143f781614184565b82525050565b600060208201905061441260008301846143ee565b92915050565b60006020828403121561442e5761442d61411c565b5b600061443c8482850161416f565b91505092915050565b60008060006060848603121561445e5761445d61411c565b5b600061446c8682870161416f565b935050602061447d8682870161416f565b925050604061448e868287016141a5565b9150509250925092565b6144a181614146565b82525050565b60006020820190506144bc6000830184614498565b92915050565b600060ff82169050919050565b6144d8816144c2565b82525050565b60006020820190506144f360008301846144cf565b92915050565b60006020828403121561450f5761450e61411c565b5b600061451d848285016141a5565b91505092915050565b60008083601f84011261453c5761453b614283565b5b8235905067ffffffffffffffff81111561455957614558614288565b5b6020830191508360208202830111156145755761457461428d565b5b9250929050565b600080600080604085870312156145965761459561411c565b5b600085013567ffffffffffffffff8111156145b4576145b3614121565b5b6145c087828801614292565b9450945050602085013567ffffffffffffffff8111156145e3576145e2614121565b5b6145ef87828801614526565b925092505092959194509250565b600080604083850312156146145761461361411c565b5b60006146228582860161416f565b9250506020614633858286016142ff565b9150509250929050565b600080604083850312156146545761465361411c565b5b6000614662858286016141a5565b9250506020614673858286016141a5565b9150509250929050565b600080604083850312156146945761469361411c565b5b60006146a28582860161416f565b92505060206146b38582860161416f565b9150509250929050565b6000602082840312156146d3576146d261411c565b5b60006146e1848285016142ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061473157607f821691505b602082108103614744576147436146ea565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061478482614184565b915061478f83614184565b92508282019050808211156147a7576147a661474a565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c60008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614809602383614075565b9150614814826147ad565b604082019050919050565b60006020820190508181036000830152614838816147fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061487982614184565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148ab576148aa61474a565b5b600182019050919050565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b60006148ec601083614075565b91506148f7826148b6565b602082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4d6f7265207468616e20323530302077616c6c65747300000000000000000000600082015250565b6000614958601683614075565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b7f4c697374206c656e677468206d69736d61746368000000000000000000000000600082015250565b60006149c4601483614075565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614a30601583614075565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b6000604082019050614a7b60008301856143ee565b614a8860208301846143ee565b9392505050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b6000614ac5601783614075565b9150614ad082614a8f565b602082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b57602583614075565b9150614b6282614afb565b604082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b6000614b9882614184565b9150614ba383614184565b9250828202614bb181614184565b91508282048414831517614bc857614bc761474a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c0982614184565b9150614c1483614184565b925082614c2457614c23614bcf565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760008201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b6000614c8b603c83614075565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760008201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b6000614d1d603b83614075565b9150614d2882614cc1565b604082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b6000614daf602883614075565b9150614dba82614d53565b604082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614e41602b83614075565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b600081905092915050565b50565b6000614e92600083614e77565b9150614e9d82614e82565b600082019050919050565b6000614eb382614e85565b9150819050919050565b600081519050614ecc8161418e565b92915050565b600060208284031215614ee857614ee761411c565b5b6000614ef684828501614ebd565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614f35600983614075565b9150614f4082614eff565b602082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b6000604082019050614f806000830185614498565b614f8d60208301846143ee565b9392505050565b600081519050614fa3816142e8565b92915050565b600060208284031215614fbf57614fbe61411c565b5b6000614fcd84828501614f94565b91505092915050565b600081519050614fe581614158565b92915050565b6000602082840312156150015761500061411c565b5b600061500f84828501614fd6565b91505092915050565b600060408201905061502d6000830185614498565b61503a6020830184614498565b9392505050565b6000819050919050565b600061506661506161505c84615041565b614374565b614184565b9050919050565b6150768161504b565b82525050565b600060c0820190506150916000830189614498565b61509e60208301886143ee565b6150ab604083018761506d565b6150b8606083018661506d565b6150c56080830185614498565b6150d260a08301846143ee565b979650505050505050565b6000806000606084860312156150f6576150f561411c565b5b600061510486828701614ebd565b935050602061511586828701614ebd565b925050604061512686828701614ebd565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061518c602683614075565b915061519782615130565b604082019050919050565b600060208201905081810360008301526151bb8161517f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061521e602483614075565b9150615229826151c2565b604082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152b0602283614075565b91506152bb82615254565b604082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061531c602083614075565b9150615327826152e6565b602082019050919050565b6000602082019050818103600083015261534b8161530f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615388601d83614075565b915061539382615352565b602082019050919050565b600060208201905081810360008301526153b78161537b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061541a602583614075565b9150615425826153be565b604082019050919050565b600060208201905081810360008301526154498161540d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154ac602383614075565b91506154b782615450565b604082019050919050565b600060208201905081810360008301526154db8161549f565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000615518601d83614075565b9150615523826154e2565b602082019050919050565b600060208201905081810360008301526155478161550b565b9050919050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b6000615584600683614075565b915061558f8261554e565b602082019050919050565b600060208201905081810360008301526155b381615577565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000615616603683614075565b9150615621826155ba565b604082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000615682601a83614075565b915061568d8261564c565b602082019050919050565b600060208201905081810360008301526156b181615675565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b6000615714603783614075565b915061571f826156b8565b604082019050919050565b6000602082019050818103600083015261574381615707565b9050919050565b600061575582614184565b915061576083614184565b92508282039050818111156157785761577761474a565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006157da602183614075565b91506157e58261577e565b604082019050919050565b60006020820190508181036000830152615809816157cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061586c602283614075565b915061587782615810565b604082019050919050565b6000602082019050818103600083015261589b8161585f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006158fe602683614075565b9150615909826158a2565b604082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060608201905061594960008301866143ee565b61595660208301856143ee565b61596360408301846143ee565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159cf81614146565b82525050565b60006159e183836159c6565b60208301905092915050565b6000602082019050919050565b6000615a058261599a565b615a0f81856159a5565b9350615a1a836159b6565b8060005b83811015615a4b578151615a3288826159d5565b9750615a3d836159ed565b925050600181019050615a1e565b5085935050505092915050565b600060a082019050615a6d60008301886143ee565b615a7a602083018761506d565b8181036040830152615a8c81866159fa565b9050615a9b6060830185614498565b615aa860808301846143ee565b969550505050505056fea2646970667358221220a02223400b4d70880217dd55d76f6f7cd7d157349941b48eb527c2b301c1f22064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002ce7a437ecb648bcab37bdb2138c9144afb4235f00000000000000000000000041cec07afce8feb9c56164667cfd7fd027af68a3000000000000000000000000719b04440f7403c1ebec51a4f2093eaa5cab6b40000000000000000000000000d2444f1eacc911141d74e8fbed4397e3d9020fcc

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637571336a1161015a578063c24a7a8c116100c1578063dd62ed3e1161007a578063dd62ed3e146109e9578063e01af92c14610a26578063e2f4560514610a4f578063e8078d9414610a7a578063f2fde38b14610a91578063f8b45b0514610aba5761029e565b8063c24a7a8c146108ed578063c3f70b5214610916578063cb96372814610941578063d46980161461096a578063d7d1d10e14610995578063d85ba063146109be5761029e565b8063a457c2d711610113578063a457c2d7146107cb578063a9059cbb14610808578063afa4f3b214610845578063bbc0c7421461086e578063c024666814610899578063c04a5414146108c25761029e565b80637571336a146106df57806375f0a87414610708578063860a32ec146107335780638a8c523c1461075e5780638da5cb5b1461077557806395d89b41146107a05761029e565b806339509351116101fe5780636a486a8e116101b75780636a486a8e146105f55780636ddd17131461062057806370a082311461064b578063715018a61461068857806372ac24861461069f578063751039fc146106c85761029e565b806339509351146104d557806342966c681461051257806349bd5a5e1461053b5780634fbee193146105665780635d098b38146105a357806367243482146105cc5761029e565b806318160ddd1161025057806318160ddd146103b157806318d9ceae146103dc57806323b872dd1461041957806327c8f83514610456578063296f0a0c14610481578063313ce567146104aa5761029e565b806306fdde03146102a3578063095ea7b3146102ce5780630d075d9c1461030b5780630f683e9014610334578063155ca7c11461035d5780631694505e146103865761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ae5565b6040516102c591906140fa565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906141ba565b610b77565b6040516103029190614215565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190614230565b610b9a565b005b34801561034057600080fd5b5061035b60048036038101906103569190614230565b610c3a565b005b34801561036957600080fd5b50610384600480360381019061037f9190614314565b610ce3565b005b34801561039257600080fd5b5061039b610e05565b6040516103a891906143d3565b60405180910390f35b3480156103bd57600080fd5b506103c6610e29565b6040516103d391906143fd565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190614418565b610e33565b6040516104109190614215565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190614445565b610e89565b60405161044d9190614215565b60405180910390f35b34801561046257600080fd5b5061046b610eb8565b60405161047891906144a7565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614418565b610ebe565b005b3480156104b657600080fd5b506104bf61101d565b6040516104cc91906144de565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906141ba565b611026565b6040516105099190614215565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906144f9565b61105d565b005b34801561054757600080fd5b5061055061106a565b60405161055d91906144a7565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190614418565b611090565b60405161059a9190614215565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614418565b6110e6565b005b3480156105d857600080fd5b506105f360048036038101906105ee919061457c565b611245565b005b34801561060157600080fd5b5061060a611422565b60405161061791906143fd565b60405180910390f35b34801561062c57600080fd5b50610635611428565b6040516106429190614215565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190614418565b61143b565b60405161067f91906143fd565b60405180910390f35b34801561069457600080fd5b5061069d611483565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190614418565b611497565b005b3480156106d457600080fd5b506106dd6115f6565b005b3480156106eb57600080fd5b50610706600480360381019061070191906145fd565b611629565b005b34801561071457600080fd5b5061071d6116da565b60405161072a91906144a7565b60405180910390f35b34801561073f57600080fd5b50610748611700565b6040516107559190614215565b60405180910390f35b34801561076a57600080fd5b50610773611713565b005b34801561078157600080fd5b5061078a6117a3565b60405161079791906144a7565b60405180910390f35b3480156107ac57600080fd5b506107b56117cd565b6040516107c291906140fa565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906141ba565b61185f565b6040516107ff9190614215565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906141ba565b6118d6565b60405161083c9190614215565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906144f9565b6118f9565b005b34801561087a57600080fd5b506108836119d2565b6040516108909190614215565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906145fd565b6119e5565b005b3480156108ce57600080fd5b506108d7611a96565b6040516108e491906144a7565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061463d565b611abc565b005b34801561092257600080fd5b5061092b611b9c565b60405161093891906143fd565b60405180910390f35b34801561094d57600080fd5b5061096860048036038101906109639190614418565b611ba2565b005b34801561097657600080fd5b5061097f611e0f565b60405161098c91906144a7565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190614314565b611e35565b005b3480156109ca57600080fd5b506109d3611f57565b6040516109e091906143fd565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b919061467d565b611f5d565b604051610a1d91906143fd565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a4891906146bd565b611fe4565b005b348015610a5b57600080fd5b50610a64612009565b604051610a7191906143fd565b60405180910390f35b348015610a8657600080fd5b50610a8f61200f565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab39190614418565b612485565b005b348015610ac657600080fd5b50610acf612508565b604051610adc91906143fd565b60405180910390f35b606060038054610af490614719565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2090614719565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b600080610b8261250e565b9050610b8f818585612516565b600191505092915050565b610ba26126df565b61012c818385610bb29190614779565b610bbc9190614779565b1115610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf49061481f565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610c259190614779565b610c2f9190614779565b600d81905550505050565b610c426126df565b61012c818385610c529190614779565b610c5c9190614779565b1115610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c949061481f565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610cc59190614779565b610ccf9190614779565b601181905550601154601881905550505050565b610ceb6126df565b60005b83839050811015610dff578160196000868685818110610d1157610d1061483f565b5b9050602002016020810190610d269190614418565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610d8a57610d8961483f565b5b9050602002016020810190610d9f9190614418565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610de49190614215565b60405180910390a28080610df79061486e565b915050610cee565b50505050565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789181565b6000600254905090565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080610e9461250e565b9050610ea185828561275d565b610eac8585856127e9565b60019150509392505050565b61dead81565b610ec66126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614902565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b60008061103161250e565b90506110528185856110438589611f5d565b61104d9190614779565b612516565b600191505092915050565b6110673382613454565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110ee6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490614902565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b61124d6126df565b6109c4848490501115611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061496e565b60405180910390fd5b8181905084849050146112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d4906149da565b60405180910390fd5b6000805b85859050811015611326578383828181106112ff576112fe61483f565b5b90506020020135826113119190614779565b9150808061131e9061486e565b9150506112e1565b50806113313361143b565b1015611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614a46565b60405180910390fd5b60005b858590508110156113de576113cb338787848181106113975761139661483f565b5b90506020020160208101906113ac9190614418565b8686858181106113bf576113be61483f565b5b90506020020135613621565b80806113d69061486e565b915050611375565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611413929190614a66565b60405180910390a15050505050565b60115481565b600960159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6126df565b6114956000613897565b565b61149f6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614902565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b6115fe6126df565b6000600960166101000a81548160ff021916908315150217905550611621610e29565b600b81905550565b6116316126df565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116ce9190614215565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960169054906101000a900460ff1681565b61171b6126df565b600960149054906101000a900460ff161561176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290614adb565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117dc90614719565b80601f016020809104026020016040519081016040528092919081815260200182805461180890614719565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b5050505050905090565b60008061186a61250e565b905060006118788286611f5d565b9050838110156118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490614b6d565b60405180910390fd5b6118ca8286868403612516565b60019250505092915050565b6000806118e161250e565b90506118ee8185856127e9565b600191505092915050565b6119016126df565b620186a0600161190f610e29565b6119199190614b8d565b6119239190614bfe565b811015611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614ca1565b60405180910390fd5b6103e86005611972610e29565b61197c9190614b8d565b6119869190614bfe565b8111156119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bf90614d33565b60405180910390fd5b80600c8190555050565b600960149054906101000a900460ff1681565b6119ed6126df565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a8a9190614215565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ac46126df565b6103e86005611ad1610e29565b611adb9190614b8d565b611ae59190614bfe565b821015611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614dc5565b60405180910390fd5b6103e86005611b34610e29565b611b3e9190614b8d565b611b489190614bfe565b811015611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614e57565b60405180910390fd5b81600a8190555080600b819055505050565b600a5481565b611baa6126df565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50573373ffffffffffffffffffffffffffffffffffffffff1647604051611c0390614ea8565b60006040518083038185875af1925050503d8060008114611c40576040519150601f19603f3d011682016040523d82523d6000602084013e611c45565b606091505b505080915050611e0b565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c8b91906144a7565b602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc9190614ed2565b11611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390614f4b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d4791906144a7565b602060405180830381865afa158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190614ed2565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611dc5929190614f6b565b6020604051808303816000875af1158015611de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e089190614fa9565b50505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e3d6126df565b60005b83839050811015611f515781601a6000868685818110611e6357611e6261483f565b5b9050602002016020810190611e789190614418565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110611edc57611edb61483f565b5b9050602002016020810190611ef19190614418565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611f369190614215565b60405180910390a28080611f499061486e565b915050611e40565b50505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fec6126df565b80600960156101000a81548160ff02191690831515021790555050565b600c5481565b6120176126df565b600960149054906101000a900460ff1615612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614adb565b60405180910390fd5b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f69190614feb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a19190614feb565b6040518363ffffffff1660e01b81526004016121be929190615018565b6020604051808303816000875af11580156121dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122019190614feb565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061228e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612516565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d78917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161232b929190614f6b565b6020604051808303816000875af115801561234a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236e9190614fa9565b5061239c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161395d565b6123c9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611629565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663f305d71947306124103061143b565b60008061241b6117a3565b426040518863ffffffff1660e01b815260040161243d9695949392919061507c565b60606040518083038185885af115801561245b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061248091906150dd565b505050565b61248d6126df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906151a2565b60405180910390fd5b61250581613897565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90615234565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb906152c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126d291906143fd565b60405180910390a3505050565b6126e761250e565b73ffffffffffffffffffffffffffffffffffffffff166127056117a3565b73ffffffffffffffffffffffffffffffffffffffff161461275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275290615332565b60405180910390fd5b565b60006127698484611f5d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127e357818110156127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc9061539e565b60405180910390fd5b6127e28484848403612516565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f90615430565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be906154c2565b60405180910390fd5b600081036128e0576128db83836000613621565b61344f565b6128e86117a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295657506129266117a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561298f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129c9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e25750600960179054906101000a900460ff16155b15612f6c57600960149054906101000a900460ff16612adc57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a9c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29061552e565b60405180910390fd5b5b600960169054906101000a900460ff168015612b455750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612c8357600b5481612b578461143b565b612b619190614779565b1115612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b999061559a565b60405180910390fd5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c435750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c799061559a565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d265750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcd57600a54811115612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d679061562c565b60405180910390fd5b600b54612d7c8361143b565b82612d879190614779565b1115612dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbf90615698565b60405180910390fd5b612f6b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e705750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ebf57600a54811115612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb19061572a565b60405180910390fd5b612f6a565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f6957600b54612f1c8361143b565b82612f279190614779565b1115612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90615698565b60405180910390fd5b5b5b5b5b6000612f773061143b565b90506000600c548210159050808015612f9c5750600960159054906101000a900460ff165b8015612fb55750600960179054906101000a900460ff16155b801561300b5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130615750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130b75750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130fb576001600960176101000a81548160ff0219169083151502179055506130df6139fe565b6000600960176101000a81548160ff0219169083151502179055505b6000600960179054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131b15750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131bb57600090505b6000811561343657601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321e57506000601154115b156132ec5761324c61271061323e60115488613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506011546014548261325f9190614b8d565b6132699190614bfe565b6017600082825461327a9190614779565b92505081905550601154601254826132929190614b8d565b61329c9190614bfe565b601560008282546132ad9190614779565b92505081905550601154601354826132c59190614b8d565b6132cf9190614bfe565b601660008282546132e09190614779565b92505081905550613412565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334757506000600d54115b1561341157613375612710613367600d5488613ce590919063ffffffff16565b613cfb90919063ffffffff16565b9050600d54601054826133889190614b8d565b6133929190614bfe565b601760008282546133a39190614779565b92505081905550600d54600e54826133bb9190614b8d565b6133c59190614bfe565b601560008282546133d69190614779565b92505081905550600d54600f54826133ee9190614b8d565b6133f89190614bfe565b601660008282546134099190614779565b925050819055505b5b600081111561342757613426873083613621565b5b8085613433919061574a565b94505b613441878787613621565b601854601181905550505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ba906157f0565b60405180910390fd5b6134cf82600083613d11565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90615882565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161360891906143fd565b60405180910390a361361c83600084613d16565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368790615430565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f6906154c2565b60405180910390fd5b61370a838383613d11565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378790615914565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161387e91906143fd565b60405180910390a3613891848484613d16565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613a093061143b565b90506000601654601554601754613a209190614779565b613a2a9190614779565b9050600080831480613a3c5750600082145b15613a4957505050613ce3565b600a600c54613a589190614b8d565b831115613a7157600a600c54613a6e9190614b8d565b92505b600060028360175486613a849190614b8d565b613a8e9190614bfe565b613a989190614bfe565b90506000613aaf8286613d1b90919063ffffffff16565b90506000479050613abf82613d31565b6000613ad48247613d1b90919063ffffffff16565b90506000613aff87613af160155485613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506000613b2a88613b1c60165486613ce590919063ffffffff16565b613cfb90919063ffffffff16565b90506000818385613b3b919061574a565b613b45919061574a565b9050600060178190555060006015819055506000601681905550600087118015613b6f5750600081115b15613bbc57613b7e8782613f6e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601754604051613bb393929190615934565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c0290614ea8565b60006040518083038185875af1925050503d8060008114613c3f576040519150601f19603f3d011682016040523d82523d6000602084013e613c44565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c9090614ea8565b60006040518083038185875af1925050503d8060008114613ccd576040519150601f19603f3d011682016040523d82523d6000602084013e613cd2565b606091505b505080985050505050505050505050505b565b60008183613cf39190614b8d565b905092915050565b60008183613d099190614bfe565b905092915050565b505050565b505050565b60008183613d29919061574a565b905092915050565b6000600267ffffffffffffffff811115613d4e57613d4d61596b565b5b604051908082528060200260200182016040528015613d7c5781602001602082028036833780820191505090505b5090503081600081518110613d9457613d9361483f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d9190614feb565b81600181518110613e7157613e7061483f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ed6307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789184612516565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f38959493929190615a58565b600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b505050505050565b613f99307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789184612516565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140209695949392919061507c565b60606040518083038185885af115801561403e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061406391906150dd565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140a4578082015181840152602081019050614089565b60008484015250505050565b6000601f19601f8301169050919050565b60006140cc8261406a565b6140d68185614075565b93506140e6818560208601614086565b6140ef816140b0565b840191505092915050565b6000602082019050818103600083015261411481846140c1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061415182614126565b9050919050565b61416181614146565b811461416c57600080fd5b50565b60008135905061417e81614158565b92915050565b6000819050919050565b61419781614184565b81146141a257600080fd5b50565b6000813590506141b48161418e565b92915050565b600080604083850312156141d1576141d061411c565b5b60006141df8582860161416f565b92505060206141f0858286016141a5565b9150509250929050565b60008115159050919050565b61420f816141fa565b82525050565b600060208201905061422a6000830184614206565b92915050565b6000806000606084860312156142495761424861411c565b5b6000614257868287016141a5565b9350506020614268868287016141a5565b9250506040614279868287016141a5565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126142a8576142a7614283565b5b8235905067ffffffffffffffff8111156142c5576142c4614288565b5b6020830191508360208202830111156142e1576142e061428d565b5b9250929050565b6142f1816141fa565b81146142fc57600080fd5b50565b60008135905061430e816142e8565b92915050565b60008060006040848603121561432d5761432c61411c565b5b600084013567ffffffffffffffff81111561434b5761434a614121565b5b61435786828701614292565b9350935050602061436a868287016142ff565b9150509250925092565b6000819050919050565b600061439961439461438f84614126565b614374565b614126565b9050919050565b60006143ab8261437e565b9050919050565b60006143bd826143a0565b9050919050565b6143cd816143b2565b82525050565b60006020820190506143e860008301846143c4565b92915050565b6143f781614184565b82525050565b600060208201905061441260008301846143ee565b92915050565b60006020828403121561442e5761442d61411c565b5b600061443c8482850161416f565b91505092915050565b60008060006060848603121561445e5761445d61411c565b5b600061446c8682870161416f565b935050602061447d8682870161416f565b925050604061448e868287016141a5565b9150509250925092565b6144a181614146565b82525050565b60006020820190506144bc6000830184614498565b92915050565b600060ff82169050919050565b6144d8816144c2565b82525050565b60006020820190506144f360008301846144cf565b92915050565b60006020828403121561450f5761450e61411c565b5b600061451d848285016141a5565b91505092915050565b60008083601f84011261453c5761453b614283565b5b8235905067ffffffffffffffff81111561455957614558614288565b5b6020830191508360208202830111156145755761457461428d565b5b9250929050565b600080600080604085870312156145965761459561411c565b5b600085013567ffffffffffffffff8111156145b4576145b3614121565b5b6145c087828801614292565b9450945050602085013567ffffffffffffffff8111156145e3576145e2614121565b5b6145ef87828801614526565b925092505092959194509250565b600080604083850312156146145761461361411c565b5b60006146228582860161416f565b9250506020614633858286016142ff565b9150509250929050565b600080604083850312156146545761465361411c565b5b6000614662858286016141a5565b9250506020614673858286016141a5565b9150509250929050565b600080604083850312156146945761469361411c565b5b60006146a28582860161416f565b92505060206146b38582860161416f565b9150509250929050565b6000602082840312156146d3576146d261411c565b5b60006146e1848285016142ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061473157607f821691505b602082108103614744576147436146ea565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061478482614184565b915061478f83614184565b92508282019050808211156147a7576147a661474a565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c60008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614809602383614075565b9150614814826147ad565b604082019050919050565b60006020820190508181036000830152614838816147fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061487982614184565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148ab576148aa61474a565b5b600182019050919050565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b60006148ec601083614075565b91506148f7826148b6565b602082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4d6f7265207468616e20323530302077616c6c65747300000000000000000000600082015250565b6000614958601683614075565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b7f4c697374206c656e677468206d69736d61746368000000000000000000000000600082015250565b60006149c4601483614075565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614a30601583614075565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b6000604082019050614a7b60008301856143ee565b614a8860208301846143ee565b9392505050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b6000614ac5601783614075565b9150614ad082614a8f565b602082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b57602583614075565b9150614b6282614afb565b604082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b6000614b9882614184565b9150614ba383614184565b9250828202614bb181614184565b91508282048414831517614bc857614bc761474a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c0982614184565b9150614c1483614184565b925082614c2457614c23614bcf565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760008201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b6000614c8b603c83614075565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760008201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b6000614d1d603b83614075565b9150614d2882614cc1565b604082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b6000614daf602883614075565b9150614dba82614d53565b604082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614e41602b83614075565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b600081905092915050565b50565b6000614e92600083614e77565b9150614e9d82614e82565b600082019050919050565b6000614eb382614e85565b9150819050919050565b600081519050614ecc8161418e565b92915050565b600060208284031215614ee857614ee761411c565b5b6000614ef684828501614ebd565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614f35600983614075565b9150614f4082614eff565b602082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b6000604082019050614f806000830185614498565b614f8d60208301846143ee565b9392505050565b600081519050614fa3816142e8565b92915050565b600060208284031215614fbf57614fbe61411c565b5b6000614fcd84828501614f94565b91505092915050565b600081519050614fe581614158565b92915050565b6000602082840312156150015761500061411c565b5b600061500f84828501614fd6565b91505092915050565b600060408201905061502d6000830185614498565b61503a6020830184614498565b9392505050565b6000819050919050565b600061506661506161505c84615041565b614374565b614184565b9050919050565b6150768161504b565b82525050565b600060c0820190506150916000830189614498565b61509e60208301886143ee565b6150ab604083018761506d565b6150b8606083018661506d565b6150c56080830185614498565b6150d260a08301846143ee565b979650505050505050565b6000806000606084860312156150f6576150f561411c565b5b600061510486828701614ebd565b935050602061511586828701614ebd565b925050604061512686828701614ebd565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061518c602683614075565b915061519782615130565b604082019050919050565b600060208201905081810360008301526151bb8161517f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061521e602483614075565b9150615229826151c2565b604082019050919050565b6000602082019050818103600083015261524d81615211565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152b0602283614075565b91506152bb82615254565b604082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061531c602083614075565b9150615327826152e6565b602082019050919050565b6000602082019050818103600083015261534b8161530f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615388601d83614075565b915061539382615352565b602082019050919050565b600060208201905081810360008301526153b78161537b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061541a602583614075565b9150615425826153be565b604082019050919050565b600060208201905081810360008301526154498161540d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154ac602383614075565b91506154b782615450565b604082019050919050565b600060208201905081810360008301526154db8161549f565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000615518601d83614075565b9150615523826154e2565b602082019050919050565b600060208201905081810360008301526155478161550b565b9050919050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b6000615584600683614075565b915061558f8261554e565b602082019050919050565b600060208201905081810360008301526155b381615577565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000615616603683614075565b9150615621826155ba565b604082019050919050565b6000602082019050818103600083015261564581615609565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000615682601a83614075565b915061568d8261564c565b602082019050919050565b600060208201905081810360008301526156b181615675565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b6000615714603783614075565b915061571f826156b8565b604082019050919050565b6000602082019050818103600083015261574381615707565b9050919050565b600061575582614184565b915061576083614184565b92508282039050818111156157785761577761474a565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006157da602183614075565b91506157e58261577e565b604082019050919050565b60006020820190508181036000830152615809816157cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061586c602283614075565b915061587782615810565b604082019050919050565b6000602082019050818103600083015261589b8161585f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006158fe602683614075565b9150615909826158a2565b604082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060608201905061594960008301866143ee565b61595660208301856143ee565b61596360408301846143ee565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159cf81614146565b82525050565b60006159e183836159c6565b60208301905092915050565b6000602082019050919050565b6000615a058261599a565b615a0f81856159a5565b9350615a1a836159b6565b8060005b83811015615a4b578151615a3288826159d5565b9750615a3d836159ed565b925050600181019050615a1e565b5085935050505092915050565b600060a082019050615a6d60008301886143ee565b615a7a602083018761506d565b8181036040830152615a8c81866159fa565b9050615a9b6060830185614498565b615aa860808301846143ee565b969550505050505056fea2646970667358221220a02223400b4d70880217dd55d76f6f7cd7d157349941b48eb527c2b301c1f22064736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000002ce7a437ecb648bcab37bdb2138c9144afb4235f00000000000000000000000041cec07afce8feb9c56164667cfd7fd027af68a3000000000000000000000000719b04440f7403c1ebec51a4f2093eaa5cab6b40000000000000000000000000d2444f1eacc911141d74e8fbed4397e3d9020fcc

-----Decoded View---------------
Arg [0] : _mambas (address[]): 0x2cE7A437ecB648BCaB37Bdb2138c9144AFB4235F,0x41cEc07AfCE8Feb9C56164667cFD7fD027aF68a3,0x719B04440f7403c1eBec51A4f2093eaA5cAB6b40,0xD2444f1EACc911141d74e8FBeD4397E3D9020fCC

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 0000000000000000000000002ce7a437ecb648bcab37bdb2138c9144afb4235f
Arg [3] : 00000000000000000000000041cec07afce8feb9c56164667cfd7fd027af68a3
Arg [4] : 000000000000000000000000719b04440f7403c1ebec51a4f2093eaa5cab6b40
Arg [5] : 000000000000000000000000d2444f1eacc911141d74e8fbed4397e3d9020fcc


Deployed Bytecode Sourcemap

35656:18119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12892:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42163:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42686:601;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44988:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35731:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11520:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45768:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13714:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35939:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43939:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11362:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14418:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39696:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35789:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45954:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43295:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53084:688;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36391:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36033:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11691:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3771:103;;;;;;;;;;;;;:::i;:::-;;43609:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40814:112;;;;;;;;;;;;;:::i;:::-;;44253:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35826:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36063:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40635:171;;;;;;;;;;;;;:::i;:::-;;3130:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10610:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15191:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12074:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41218:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36001:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44807:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35863:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41651:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36127:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45292:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44479:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36236:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12371:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41119:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36194:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39785:842;;;;;;;;;;;;;:::i;:::-;;4029:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36163:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10391:100;10445:13;10478:5;10471:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:100;:::o;12892:242::-;13011:4;13033:13;13049:12;:10;:12::i;:::-;13033:28;;13072:32;13081:5;13088:7;13097:6;13072:8;:32::i;:::-;13122:4;13115:11;;;12892:242;;;;:::o;42163:515::-;3016:13;:11;:13::i;:::-;42389:3:::1;42372:13;42354:15;42338:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;42316:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42485:13;42466:16;:32;;;;42530:15;42509:18;:36;;;;42575:13;42556:16;:32;;;;42654:16;;42633:18;;42614:16;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;42599:12;:71;;;;42163:515:::0;;;:::o;42686:601::-;3016:13;:11;:13::i;:::-;42913:3:::1;42896:13;42878:15;42862:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;42840:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;43010:13;42990:17;:33;;;;43056:15;43034:19;:37;;;;43102:13;43082:17;:33;;;;43223:17;;43188:19;;43155:17;;:52;;;;:::i;:::-;:85;;;;:::i;:::-;43126:13;:114;;;;43266:13;;43251:12;:28;;;;42686:601:::0;;;:::o;44988:296::-;3016:13;:11;:13::i;:::-;45114:9:::1;45109:168;45133:8;;:15;;45129:1;:19;45109:168;;;45205:5;45170:19;:32;45190:8;;45199:1;45190:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45170:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;45246:8;;45255:1;45246:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45230:35;;;45259:5;45230:35;;;;;;:::i;:::-;;;;;;;;45150:3;;;;;:::i;:::-;;;;45109:168;;;;44988:296:::0;;;:::o;35731:51::-;;;:::o;11520:108::-;11581:7;11608:12;;11601:19;;11520:108;:::o;45768:178::-;45871:4;45900:29;:38;45930:7;45900:38;;;;;;;;;;;;;;;;;;;;;;;;;45893:45;;45768:178;;;:::o;13714:295::-;13845:4;13862:15;13880:12;:10;:12::i;:::-;13862:30;;13903:38;13919:4;13925:7;13934:6;13903:15;:38::i;:::-;13952:27;13962:4;13968:2;13972:6;13952:9;:27::i;:::-;13997:4;13990:11;;;13714:295;;;;;:::o;35939:53::-;35985:6;35939:53;:::o;43939:306::-;3016:13;:11;:13::i;:::-;44057:1:::1;44029:30;;:16;:30;;::::0;44021:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44091:17;44111:15;;;;;;;;;;;44091:35;;44155:16;44137:15;;:34;;;;;;;;;;;;;;;;;;44227:9;44187:50;;44210:15;;;;;;;;;;;44187:50;;;;;;;;;;;;44010:235;43939:306:::0;:::o;11362:93::-;11420:5;11445:2;11438:9;;11362:93;:::o;14418:270::-;14533:4;14555:13;14571:12;:10;:12::i;:::-;14555:28;;14594:64;14603:5;14610:7;14647:10;14619:25;14629:5;14636:7;14619:9;:25::i;:::-;:38;;;;:::i;:::-;14594:8;:64::i;:::-;14676:4;14669:11;;;14418:270;;;;:::o;39696:81::-;39744:25;39750:10;39762:6;39744:5;:25::i;:::-;39696:81;:::o;35789:28::-;;;;;;;;;;;;;:::o;45954:126::-;46020:4;46044:19;:28;46064:7;46044:28;;;;;;;;;;;;;;;;;;;;;;;;;46037:35;;45954:126;;;:::o;43295:306::-;3016:13;:11;:13::i;:::-;43413:1:::1;43385:30;;:16;:30;;::::0;43377:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43447:17;43467:15;;;;;;;;;;;43447:35;;43511:16;43493:15;;:34;;;;;;;;;;;;;;;;;;43583:9;43543:50;;43566:15;;;;;;;;;;;43543:50;;;;;;;;;;;;43366:235;43295:306:::0;:::o;53084:688::-;3016:13;:11;:13::i;:::-;53222:4:::1;53202:9;;:16;;:24;;53194:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;53291:12;;:19;;53271:9;;:16;;:39;53263:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53347:20;53386:6:::0;53382:98:::1;53400:9;;:16;;53396:1;:20;53382:98;;;53453:12;;53466:1;53453:15;;;;;;;:::i;:::-;;;;;;;;53437:31;;;;;:::i;:::-;;;53418:3;;;;;:::i;:::-;;;;53382:98;;;;53523:12;53498:21;53508:10;53498:9;:21::i;:::-;:37;;53490:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53578:6;53574:125;53592:9;;:16;;53588:1;:20;53574:125;;;53629:58;53645:10;53657:9;;53667:1;53657:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53671;;53684:1;53671:15;;;;;;;:::i;:::-;;;;;;;;53629;:58::i;:::-;53610:3;;;;;:::i;:::-;;;;53574:125;;;;53716:48;53733:9;;:16;;53751:12;53716:48;;;;;;;:::i;:::-;;;;;;;;53183:589;53084:688:::0;;;;:::o;36391:28::-;;;;:::o;36033:23::-;;;;;;;;;;;;;:::o;11691:177::-;11810:7;11842:9;:18;11852:7;11842:18;;;;;;;;;;;;;;;;11835:25;;11691:177;;;:::o;3771:103::-;3016:13;:11;:13::i;:::-;3836:30:::1;3863:1;3836:18;:30::i;:::-;3771:103::o:0;43609:322::-;3016:13;:11;:13::i;:::-;43733:1:::1;43703:32;;:18;:32;;::::0;43695:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43767:17;43787;;;;;;;;;;;43767:37;;43835:18;43815:17;;:38;;;;;;;;;;;;;;;;;;43913:9;43869:54;;43894:17;;;;;;;;;;;43869:54;;;;;;;;;;;;43684:247;43609:322:::0;:::o;40814:112::-;3016:13;:11;:13::i;:::-;40877:5:::1;40867:7;;:15;;;;;;;;;;;;;;;;;;40905:13;:11;:13::i;:::-;40893:9;:25;;;;40814:112::o:0;44253:218::-;3016:13;:11;:13::i;:::-;44409:5:::1;44368:29;:38;44398:7;44368:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;44448:7;44430:33;;;44457:5;44430:33;;;;;;:::i;:::-;;;;;;;;44253:218:::0;;:::o;35826:30::-;;;;;;;;;;;;;:::o;36063:26::-;;;;;;;;;;;;;:::o;40635:171::-;3016:13;:11;:13::i;:::-;40697::::1;;;;;;;;;;;40696:14;40688:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40765:4;40749:13;;:20;;;;;;;;;;;;;;;;;;40794:4;40780:11;;:18;;;;;;;;;;;;;;;;;;40635:171::o:0;3130:87::-;3176:7;3203:6;;;;;;;;;;;3196:13;;3130:87;:::o;10610:104::-;10666:13;10699:7;10692:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10610:104;:::o;15191:505::-;15311:4;15333:13;15349:12;:10;:12::i;:::-;15333:28;;15372:24;15399:25;15409:5;15416:7;15399:9;:25::i;:::-;15372:52;;15477:15;15457:16;:35;;15435:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15593:60;15602:5;15609:7;15637:15;15618:16;:34;15593:8;:60::i;:::-;15684:4;15677:11;;;;15191:505;;;;:::o;12074:234::-;12189:4;12211:13;12227:12;:10;:12::i;:::-;12211:28;;12250;12260:5;12267:2;12271:6;12250:9;:28::i;:::-;12296:4;12289:11;;;12074:234;;;;:::o;41218:425::-;3016:13;:11;:13::i;:::-;41347:6:::1;41342:1;41326:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41325:28;;;;:::i;:::-;41315:6;:38;;41293:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;41506:4;41501:1;41485:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41484:26;;;;:::i;:::-;41474:6;:36;;41452:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;41629:6;41608:18;:27;;;;41218:425:::0;:::o;36001:25::-;;;;;;;;;;;;;:::o;44807:173::-;3016:13;:11;:13::i;:::-;44920:5:::1;44889:19;:28;44909:7;44889:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;44957:7;44941:31;;;44966:5;44941:31;;;;;;:::i;:::-;;;;;;;;44807:173:::0;;:::o;35863:32::-;;;;;;;;;;;;;:::o;41651:504::-;3016:13;:11;:13::i;:::-;41852:4:::1;41847:1;41831:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41830:26;;;;:::i;:::-;41810:15;:47;;41788:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;41995:4;41990:1;41974:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41973:26;;;;:::i;:::-;41958:10;:42;;41936:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;42099:15;42082:14;:32;;;;42137:10;42125:9;:22;;;;41651:504:::0;;:::o;36127:29::-;;;;:::o;45292:468::-;3016:13;:11;:13::i;:::-;45362:12:::1;45404:1:::0;45389:17:::1;;:3;:17;;::::0;45385:368:::1;;45443:10;45435:24;;45485:21;45435:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45421:104;;;;;45385:368;;;45603:1;45571:3;45564:21;;;45594:4;45564:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;45556:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45633:14;45657:3;45650:21;;;45680:4;45650:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45633:53;;45708:3;45701:20;;;45722:10;45734:6;45701:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45541:212;45385:368;45351:409;45292:468:::0;:::o;35902:30::-;;;;;;;;;;;;;:::o;44479:320::-;3016:13;:11;:13::i;:::-;44617:9:::1;44612:180;44636:8;;:15;;44632:1;:19;44612:180;;;44718:5;44673:29;:42;44703:8;;44712:1;44703:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44673:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;44761:8;;44770:1;44761:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44743:37;;;44774:5;44743:37;;;;;;:::i;:::-;;;;;;;;44653:3;;;;;:::i;:::-;;;;44612:180;;;;44479:320:::0;;;:::o;36236:27::-;;;;:::o;12371:201::-;12505:7;12537:11;:18;12549:5;12537:18;;;;;;;;;;;;;;;:27;12556:7;12537:27;;;;;;;;;;;;;;;;12530:34;;12371:201;;;;:::o;41119:91::-;3016:13;:11;:13::i;:::-;41197:5:::1;41183:11;;:19;;;;;;;;;;;;;;;;;;41119:91:::0;:::o;36194:33::-;;;;:::o;39785:842::-;3016:13;:11;:13::i;:::-;39846::::1;;;;;;;;;;;39845:14;39837:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39934:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39916:55;;;39994:4;40014:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39916:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39900:13;;:147;;;;;;;;;;;;;;;;;;40058:66;40075:4;40090:13;;;;;;;;;;;40106:17;40058:8;:66::i;:::-;40142:13;;;;;;;;;;;40135:29;;;40187:15;40218:17;40135:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40259:58;40296:13;;;;;;;;;;;40312:4;40259:28;:58::i;:::-;40328:55;40362:13;;;;;;;;;;;40378:4;40328:25;:55::i;:::-;40396:15;:31;;;40435:21;40480:4;40500:24;40518:4;40500:9;:24::i;:::-;40539:1;40555::::0;40571:7:::1;:5;:7::i;:::-;40593:15;40396:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39785:842::o:0;4029:238::-;3016:13;:11;:13::i;:::-;4152:1:::1;4132:22;;:8;:22;;::::0;4110:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4231:28;4250:8;4231:18;:28::i;:::-;4029:238:::0;:::o;36163:24::-;;;;:::o;1675:98::-;1728:7;1755:10;1748:17;;1675:98;:::o;19324:380::-;19477:1;19460:19;;:5;:19;;;19452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19558:1;19539:21;;:7;:21;;;19531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19642:6;19612:11;:18;19624:5;19612:18;;;;;;;;;;;;;;;:27;19631:7;19612:27;;;;;;;;;;;;;;;:36;;;;19680:7;19664:32;;19673:5;19664:32;;;19689:6;19664:32;;;;;;:::i;:::-;;;;;;;;19324:380;;;:::o;3295:132::-;3370:12;:10;:12::i;:::-;3359:23;;:7;:5;:7::i;:::-;:23;;;3351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3295:132::o;19995:502::-;20130:24;20157:25;20167:5;20174:7;20157:9;:25::i;:::-;20130:52;;20217:17;20197:16;:37;20193:297;;20297:6;20277:16;:26;;20251:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20412:51;20421:5;20428:7;20456:6;20437:16;:25;20412:8;:51::i;:::-;20193:297;20119:378;19995:502;;;:::o;46286:4062::-;46434:1;46418:18;;:4;:18;;;46410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46511:1;46497:16;;:2;:16;;;46489:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46580:1;46570:6;:11;46566:93;;46598:28;46614:4;46620:2;46624:1;46598:15;:28::i;:::-;46641:7;;46566:93;46697:7;:5;:7::i;:::-;46689:15;;:4;:15;;;;:45;;;;;46727:7;:5;:7::i;:::-;46721:13;;:2;:13;;;;46689:45;:78;;;;;46765:1;46751:16;;:2;:16;;;;46689:78;:112;;;;;35985:6;46784:17;;:2;:17;;;;46689:112;:139;;;;;46819:9;;;;;;;;;;;46818:10;46689:139;46671:1726;;;46860:13;;;;;;;;;;;46855:210;;46924:19;:25;46944:4;46924:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46953:19;:23;46973:2;46953:23;;;;;;;;;;;;;;;;;;;;;;;;;46924:52;46894:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;46855:210;47085:7;;;;;;;;;;;:41;;;;;47112:13;;;;;;;;;;;47096:30;;:4;:30;;;47085:41;47081:226;;;47203:9;;47193:6;47177:13;47187:2;47177:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;47169:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;47250:8;:14;47259:4;47250:14;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;47268:8;:12;47277:2;47268:12;;;;;;;;;;;;;;;;;;;;;;;;;47250:30;47242:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47081:226;47369:26;:32;47396:4;47369:32;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;47423:29;:33;47453:2;47423:33;;;;;;;;;;;;;;;;;;;;;;;;;47422:34;47369:87;47347:1039;;;47531:14;;47521:6;:24;;47491:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;47718:9;;47701:13;47711:2;47701:9;:13::i;:::-;47692:6;:22;;;;:::i;:::-;:35;;47662:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;47347:1039;;;47879:26;:30;47906:2;47879:30;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;47931:29;:35;47961:4;47931:35;;;;;;;;;;;;;;;;;;;;;;;;;47930:36;47879:87;47857:529;;;48041:14;;48031:6;:24;;48001:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;47857:529;;;48181:29;:33;48211:2;48181:33;;;;;;;;;;;;;;;;;;;;;;;;;48176:210;;48291:9;;48274:13;48284:2;48274:9;:13::i;:::-;48265:6;:22;;;;:::i;:::-;:35;;48235:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;48176:210;47857:529;47347:1039;46671:1726;48409:28;48440:24;48458:4;48440:9;:24::i;:::-;48409:55;;48477:12;48516:18;;48492:20;:42;;48477:57;;48565:7;:35;;;;;48589:11;;;;;;;;;;;48565:35;:62;;;;;48618:9;;;;;;;;;;;48617:10;48565:62;:112;;;;;48645:26;:32;48672:4;48645:32;;;;;;;;;;;;;;;;;;;;;;;;;48644:33;48565:112;:155;;;;;48695:19;:25;48715:4;48695:25;;;;;;;;;;;;;;;;;;;;;;;;;48694:26;48565:155;:196;;;;;48738:19;:23;48758:2;48738:23;;;;;;;;;;;;;;;;;;;;;;;;;48737:24;48565:196;48547:331;;;48800:4;48788:9;;:16;;;;;;;;;;;;;;;;;;48821:11;:9;:11::i;:::-;48861:5;48849:9;;:17;;;;;;;;;;;;;;;;;;48547:331;48890:12;48906:9;;;;;;;;;;;48905:10;48890:25;;48932:19;:25;48952:4;48932:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48961:19;:23;48981:2;48961:23;;;;;;;;;;;;;;;;;;;;;;;;;48932:52;48928:100;;;49011:5;49001:15;;48928:100;49040:12;49073:7;49069:1187;;;49125:26;:30;49152:2;49125:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;49175:1;49159:13;;:17;49125:51;49121:986;;;49204:36;49234:5;49204:25;49215:13;;49204:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;49197:43;;49353:13;;49311:17;;49304:4;:24;;;;:::i;:::-;49303:63;;;;:::i;:::-;49259:19;;:107;;;;;;;:::i;:::-;;;;;;;;49479:13;;49437:17;;49430:4;:24;;;;:::i;:::-;49429:63;;;;:::i;:::-;49385:19;;:107;;;;;;;:::i;:::-;;;;;;;;49609:13;;49565:19;;49558:4;:26;;;;:::i;:::-;49557:65;;;;:::i;:::-;49511:21;;:111;;;;;;;:::i;:::-;;;;;;;;49121:986;;;49684:26;:32;49711:4;49684:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;49735:1;49720:12;;:16;49684:52;49680:427;;;49764:35;49793:5;49764:24;49775:12;;49764:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;49757:42;;49869:12;;49849:16;;49842:4;:23;;;;:::i;:::-;49841:40;;;;:::i;:::-;49818:19;;:63;;;;;;;:::i;:::-;;;;;;;;49951:12;;49931:16;;49924:4;:23;;;;:::i;:::-;49923:40;;;;:::i;:::-;49900:19;;:63;;;;;;;:::i;:::-;;;;;;;;50079:12;;50036:18;;50029:4;:25;;;;:::i;:::-;50028:63;;;;:::i;:::-;49982:21;;:109;;;;;;;:::i;:::-;;;;;;;;49680:427;49121:986;50134:1;50127:4;:8;50123:91;;;50156:42;50172:4;50186;50193;50156:15;:42::i;:::-;50123:91;50240:4;50230:14;;;;;:::i;:::-;;;49069:1187;50268:33;50284:4;50290:2;50294:6;50268:15;:33::i;:::-;50328:12;;50312:13;:28;;;;46399:3949;;;;46286:4062;;;;:::o;18211:675::-;18314:1;18295:21;;:7;:21;;;18287:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18367:49;18388:7;18405:1;18409:6;18367:20;:49::i;:::-;18429:22;18454:9;:18;18464:7;18454:18;;;;;;;;;;;;;;;;18429:43;;18509:6;18491:14;:24;;18483:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18628:6;18611:14;:23;18590:9;:18;18600:7;18590:18;;;;;;;;;;;;;;;:44;;;;18745:6;18729:12;;:22;;;;;;;;;;;18806:1;18780:37;;18789:7;18780:37;;;18810:6;18780:37;;;;;;:::i;:::-;;;;;;;;18830:48;18850:7;18867:1;18871:6;18830:19;:48::i;:::-;18276:610;18211:675;;:::o;16166:877::-;16313:1;16297:18;;:4;:18;;;16289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16390:1;16376:16;;:2;:16;;;16368:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16445:38;16466:4;16472:2;16476:6;16445:20;:38::i;:::-;16496:19;16518:9;:15;16528:4;16518:15;;;;;;;;;;;;;;;;16496:37;;16581:6;16566:11;:21;;16544:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;16721:6;16707:11;:20;16689:9;:15;16699:4;16689:15;;;;;;;;;;;;;;;:38;;;;16924:6;16907:9;:13;16917:2;16907:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16974:2;16959:26;;16968:4;16959:26;;;16978:6;16959:26;;;;;;:::i;:::-;;;;;;;;16998:37;17018:4;17024:2;17028:6;16998:19;:37::i;:::-;16278:765;16166:877;;;:::o;4427:191::-;4501:16;4520:6;;;;;;;;;;;4501:25;;4546:8;4537:6;;:17;;;;;;;;;;;;;;;;;;4601:8;4570:40;;4591:8;4570:40;;;;;;;;;;;;4490:128;4427:191;:::o;46088:190::-;46207:5;46172:26;:32;46199:4;46172:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;46264:5;46230:40;;46258:4;46230:40;;;;;;;;;;;;46088:190;;:::o;51247:1829::-;51288:23;51314:24;51332:4;51314:9;:24::i;:::-;51288:50;;51349:25;51447:21;;51412:19;;51377;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;51349:119;;51479:12;51527:1;51508:15;:20;:46;;;;51553:1;51532:17;:22;51508:46;51504:85;;;51571:7;;;;;51504:85;51644:2;51623:18;;:23;;;;:::i;:::-;51605:15;:41;51601:115;;;51702:2;51681:18;;:23;;;;:::i;:::-;51663:41;;51601:115;51728:23;51842:1;51809:17;51773:19;;51755:15;:37;;;;:::i;:::-;51754:72;;;;:::i;:::-;:89;;;;:::i;:::-;51728:115;;51854:26;51883:36;51903:15;51883;:19;;:36;;;;:::i;:::-;51854:65;;51932:25;51960:21;51932:49;;51994:37;52012:18;51994:17;:37::i;:::-;52044:18;52065:44;52091:17;52065:21;:25;;:44;;;;:::i;:::-;52044:65;;52122:23;52148:82;52202:17;52148:35;52163:19;;52148:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;52122:108;;52243:25;52271:84;52327:17;52271:37;52286:21;;52271:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;52243:112;;52368:23;52451:17;52420:15;52394:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;52368:100;;52503:1;52481:19;:23;;;;52537:1;52515:19;:23;;;;52573:1;52549:21;:25;;;;52609:1;52591:15;:19;:42;;;;;52632:1;52614:15;:19;52591:42;52587:280;;;52650:47;52664:15;52681;52650:13;:47::i;:::-;52717:138;52750:18;52787:15;52821:19;;52717:138;;;;;;;;:::i;:::-;;;;;;;;52587:280;52901:17;;;;;;;;;;;52893:31;;52932:17;52893:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52879:75;;;;;52989:15;;;;;;;;;;;52981:29;;53032:21;52981:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52967:101;;;;;51277:1799;;;;;;;;;;51247:1829;:::o;25672:98::-;25730:7;25761:1;25757;:5;;;;:::i;:::-;25750:12;;25672:98;;;;:::o;26071:::-;26129:7;26160:1;26156;:5;;;;:::i;:::-;26149:12;;26071:98;;;;:::o;21097:125::-;;;;:::o;21826:124::-;;;;:::o;25315:98::-;25373:7;25404:1;25400;:5;;;;:::i;:::-;25393:12;;25315:98;;;;:::o;50356:503::-;50424:21;50462:1;50448:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50424:40;;50493:4;50475;50480:1;50475:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;50519:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50509:4;50514:1;50509:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;50554:62;50571:4;50586:15;50604:11;50554:8;:62::i;:::-;50655:15;:66;;;50736:11;50762:1;50778:4;50805;50825:15;50655:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50413:446;50356:503;:::o;50867:372::-;50950:62;50967:4;50982:15;51000:11;50950:8;:62::i;:::-;51025:15;:31;;;51064:9;51097:4;51117:11;51143:1;51159;51175:15;;;;;;;;;;;51205;51025:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50867:372;;:::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;1553:117;1662:1;1659;1652: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:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:117::-;4180:1;4177;4170:12;4194:117;4303:1;4300;4293:12;4317:117;4426:1;4423;4416:12;4457:568;4530:8;4540:6;4590:3;4583:4;4575:6;4571:17;4567:27;4557:122;;4598:79;;:::i;:::-;4557:122;4711:6;4698:20;4688:30;;4741:18;4733:6;4730:30;4727:117;;;4763:79;;:::i;:::-;4727:117;4877:4;4869:6;4865:17;4853:29;;4931:3;4923:4;4915:6;4911:17;4901:8;4897:32;4894:41;4891:128;;;4938:79;;:::i;:::-;4891:128;4457:568;;;;;:::o;5031:116::-;5101:21;5116:5;5101:21;:::i;:::-;5094:5;5091:32;5081:60;;5137:1;5134;5127:12;5081:60;5031:116;:::o;5153:133::-;5196:5;5234:6;5221:20;5212:29;;5250:30;5274:5;5250:30;:::i;:::-;5153:133;;;;:::o;5292:698::-;5384:6;5392;5400;5449:2;5437:9;5428:7;5424:23;5420:32;5417:119;;;5455:79;;:::i;:::-;5417:119;5603:1;5592:9;5588:17;5575:31;5633:18;5625:6;5622:30;5619:117;;;5655:79;;:::i;:::-;5619:117;5768:80;5840:7;5831:6;5820:9;5816:22;5768:80;:::i;:::-;5750:98;;;;5546:312;5897:2;5923:50;5965:7;5956:6;5945:9;5941:22;5923:50;:::i;:::-;5913:60;;5868:115;5292:698;;;;;:::o;5996:60::-;6024:3;6045:5;6038:12;;5996:60;;;:::o;6062:142::-;6112:9;6145:53;6163:34;6172:24;6190:5;6172:24;:::i;:::-;6163:34;:::i;:::-;6145:53;:::i;:::-;6132:66;;6062:142;;;:::o;6210:126::-;6260:9;6293:37;6324:5;6293:37;:::i;:::-;6280:50;;6210:126;;;:::o;6342:153::-;6419:9;6452:37;6483:5;6452:37;:::i;:::-;6439:50;;6342:153;;;:::o;6501:185::-;6615:64;6673:5;6615:64;:::i;:::-;6610:3;6603:77;6501:185;;:::o;6692:276::-;6812:4;6850:2;6839:9;6835:18;6827:26;;6863:98;6958:1;6947:9;6943:17;6934:6;6863:98;:::i;:::-;6692:276;;;;:::o;6974:118::-;7061:24;7079:5;7061:24;:::i;:::-;7056:3;7049:37;6974:118;;:::o;7098:222::-;7191:4;7229:2;7218:9;7214:18;7206:26;;7242:71;7310:1;7299:9;7295:17;7286:6;7242:71;:::i;:::-;7098:222;;;;:::o;7326:329::-;7385:6;7434:2;7422:9;7413:7;7409:23;7405:32;7402:119;;;7440:79;;:::i;:::-;7402:119;7560:1;7585:53;7630:7;7621:6;7610:9;7606:22;7585:53;:::i;:::-;7575:63;;7531:117;7326:329;;;;:::o;7661:619::-;7738:6;7746;7754;7803:2;7791:9;7782:7;7778:23;7774:32;7771:119;;;7809:79;;:::i;:::-;7771:119;7929:1;7954:53;7999:7;7990:6;7979:9;7975:22;7954:53;:::i;:::-;7944:63;;7900:117;8056:2;8082:53;8127:7;8118:6;8107:9;8103:22;8082:53;:::i;:::-;8072:63;;8027:118;8184:2;8210:53;8255:7;8246:6;8235:9;8231:22;8210:53;:::i;:::-;8200:63;;8155:118;7661:619;;;;;:::o;8286:118::-;8373:24;8391:5;8373:24;:::i;:::-;8368:3;8361:37;8286:118;;:::o;8410:222::-;8503:4;8541:2;8530:9;8526:18;8518:26;;8554:71;8622:1;8611:9;8607:17;8598:6;8554:71;:::i;:::-;8410:222;;;;:::o;8638:86::-;8673:7;8713:4;8706:5;8702:16;8691:27;;8638:86;;;:::o;8730:112::-;8813:22;8829:5;8813:22;:::i;:::-;8808:3;8801:35;8730:112;;:::o;8848:214::-;8937:4;8975:2;8964:9;8960:18;8952:26;;8988:67;9052:1;9041:9;9037:17;9028:6;8988:67;:::i;:::-;8848:214;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9420:568::-;9493:8;9503:6;9553:3;9546:4;9538:6;9534:17;9530:27;9520:122;;9561:79;;:::i;:::-;9520:122;9674:6;9661:20;9651:30;;9704:18;9696:6;9693:30;9690:117;;;9726:79;;:::i;:::-;9690:117;9840:4;9832:6;9828:17;9816:29;;9894:3;9886:4;9878:6;9874:17;9864:8;9860:32;9857:41;9854:128;;;9901:79;;:::i;:::-;9854:128;9420:568;;;;;:::o;9994:934::-;10116:6;10124;10132;10140;10189:2;10177:9;10168:7;10164:23;10160:32;10157:119;;;10195:79;;:::i;:::-;10157:119;10343:1;10332:9;10328:17;10315:31;10373:18;10365:6;10362:30;10359:117;;;10395:79;;:::i;:::-;10359:117;10508:80;10580:7;10571:6;10560:9;10556:22;10508:80;:::i;:::-;10490:98;;;;10286:312;10665:2;10654:9;10650:18;10637:32;10696:18;10688:6;10685:30;10682:117;;;10718:79;;:::i;:::-;10682:117;10831:80;10903:7;10894:6;10883:9;10879:22;10831:80;:::i;:::-;10813:98;;;;10608:313;9994:934;;;;;;;:::o;10934:468::-;10999:6;11007;11056:2;11044:9;11035:7;11031:23;11027:32;11024:119;;;11062:79;;:::i;:::-;11024:119;11182:1;11207:53;11252:7;11243:6;11232:9;11228:22;11207:53;:::i;:::-;11197:63;;11153:117;11309:2;11335:50;11377:7;11368:6;11357:9;11353:22;11335:50;:::i;:::-;11325:60;;11280:115;10934:468;;;;;:::o;11408:474::-;11476:6;11484;11533:2;11521:9;11512:7;11508:23;11504:32;11501:119;;;11539:79;;:::i;:::-;11501:119;11659:1;11684:53;11729:7;11720:6;11709:9;11705:22;11684:53;:::i;:::-;11674:63;;11630:117;11786:2;11812:53;11857:7;11848:6;11837:9;11833:22;11812:53;:::i;:::-;11802:63;;11757:118;11408:474;;;;;:::o;11888:::-;11956:6;11964;12013:2;12001:9;11992:7;11988:23;11984:32;11981:119;;;12019:79;;:::i;:::-;11981:119;12139:1;12164:53;12209:7;12200:6;12189:9;12185:22;12164:53;:::i;:::-;12154:63;;12110:117;12266:2;12292:53;12337:7;12328:6;12317:9;12313:22;12292:53;:::i;:::-;12282:63;;12237:118;11888:474;;;;;:::o;12368:323::-;12424:6;12473:2;12461:9;12452:7;12448:23;12444:32;12441:119;;;12479:79;;:::i;:::-;12441:119;12599:1;12624:50;12666:7;12657:6;12646:9;12642:22;12624:50;:::i;:::-;12614:60;;12570:114;12368:323;;;;:::o;12697:180::-;12745:77;12742:1;12735:88;12842:4;12839:1;12832:15;12866:4;12863:1;12856:15;12883:320;12927:6;12964:1;12958:4;12954:12;12944:22;;13011:1;13005:4;13001:12;13032:18;13022:81;;13088:4;13080:6;13076:17;13066:27;;13022:81;13150:2;13142:6;13139:14;13119:18;13116:38;13113:84;;13169:18;;:::i;:::-;13113:84;12934:269;12883:320;;;:::o;13209:180::-;13257:77;13254:1;13247:88;13354:4;13351:1;13344:15;13378:4;13375:1;13368:15;13395:191;13435:3;13454:20;13472:1;13454:20;:::i;:::-;13449:25;;13488:20;13506:1;13488:20;:::i;:::-;13483:25;;13531:1;13528;13524:9;13517:16;;13552:3;13549:1;13546:10;13543:36;;;13559:18;;:::i;:::-;13543:36;13395:191;;;;:::o;13592:222::-;13732:34;13728:1;13720:6;13716:14;13709:58;13801:5;13796:2;13788:6;13784:15;13777:30;13592:222;:::o;13820:366::-;13962:3;13983:67;14047:2;14042:3;13983:67;:::i;:::-;13976:74;;14059:93;14148:3;14059:93;:::i;:::-;14177:2;14172:3;14168:12;14161:19;;13820:366;;;:::o;14192:419::-;14358:4;14396:2;14385:9;14381:18;14373:26;;14445:9;14439:4;14435:20;14431:1;14420:9;14416:17;14409:47;14473:131;14599:4;14473:131;:::i;:::-;14465:139;;14192:419;;;:::o;14617:180::-;14665:77;14662:1;14655:88;14762:4;14759:1;14752:15;14786:4;14783:1;14776:15;14803:233;14842:3;14865:24;14883:5;14865:24;:::i;:::-;14856:33;;14911:66;14904:5;14901:77;14898:103;;14981:18;;:::i;:::-;14898:103;15028:1;15021:5;15017:13;15010:20;;14803:233;;;:::o;15042:166::-;15182:18;15178:1;15170:6;15166:14;15159:42;15042:166;:::o;15214:366::-;15356:3;15377:67;15441:2;15436:3;15377:67;:::i;:::-;15370:74;;15453:93;15542:3;15453:93;:::i;:::-;15571:2;15566:3;15562:12;15555:19;;15214:366;;;:::o;15586:419::-;15752:4;15790:2;15779:9;15775:18;15767:26;;15839:9;15833:4;15829:20;15825:1;15814:9;15810:17;15803:47;15867:131;15993:4;15867:131;:::i;:::-;15859:139;;15586:419;;;:::o;16011:172::-;16151:24;16147:1;16139:6;16135:14;16128:48;16011:172;:::o;16189:366::-;16331:3;16352:67;16416:2;16411:3;16352:67;:::i;:::-;16345:74;;16428:93;16517:3;16428:93;:::i;:::-;16546:2;16541:3;16537:12;16530:19;;16189:366;;;:::o;16561:419::-;16727:4;16765:2;16754:9;16750:18;16742:26;;16814:9;16808:4;16804:20;16800:1;16789:9;16785:17;16778:47;16842:131;16968:4;16842:131;:::i;:::-;16834:139;;16561:419;;;:::o;16986:170::-;17126:22;17122:1;17114:6;17110:14;17103:46;16986:170;:::o;17162:366::-;17304:3;17325:67;17389:2;17384:3;17325:67;:::i;:::-;17318:74;;17401:93;17490:3;17401:93;:::i;:::-;17519:2;17514:3;17510:12;17503:19;;17162:366;;;:::o;17534:419::-;17700:4;17738:2;17727:9;17723:18;17715:26;;17787:9;17781:4;17777:20;17773:1;17762:9;17758:17;17751:47;17815:131;17941:4;17815:131;:::i;:::-;17807:139;;17534:419;;;:::o;17959:171::-;18099:23;18095:1;18087:6;18083:14;18076:47;17959:171;:::o;18136:366::-;18278:3;18299:67;18363:2;18358:3;18299:67;:::i;:::-;18292:74;;18375:93;18464:3;18375:93;:::i;:::-;18493:2;18488:3;18484:12;18477:19;;18136:366;;;:::o;18508:419::-;18674:4;18712:2;18701:9;18697:18;18689:26;;18761:9;18755:4;18751:20;18747:1;18736:9;18732:17;18725:47;18789:131;18915:4;18789:131;:::i;:::-;18781:139;;18508:419;;;:::o;18933:332::-;19054:4;19092:2;19081:9;19077:18;19069:26;;19105:71;19173:1;19162:9;19158:17;19149:6;19105:71;:::i;:::-;19186:72;19254:2;19243:9;19239:18;19230:6;19186:72;:::i;:::-;18933:332;;;;;:::o;19271:173::-;19411:25;19407:1;19399:6;19395:14;19388:49;19271:173;:::o;19450:366::-;19592:3;19613:67;19677:2;19672:3;19613:67;:::i;:::-;19606:74;;19689:93;19778:3;19689:93;:::i;:::-;19807:2;19802:3;19798:12;19791:19;;19450:366;;;:::o;19822:419::-;19988:4;20026:2;20015:9;20011:18;20003:26;;20075:9;20069:4;20065:20;20061:1;20050:9;20046:17;20039:47;20103:131;20229:4;20103:131;:::i;:::-;20095:139;;19822:419;;;:::o;20247:224::-;20387:34;20383:1;20375:6;20371:14;20364:58;20456:7;20451:2;20443:6;20439:15;20432:32;20247:224;:::o;20477:366::-;20619:3;20640:67;20704:2;20699:3;20640:67;:::i;:::-;20633:74;;20716:93;20805:3;20716:93;:::i;:::-;20834:2;20829:3;20825:12;20818:19;;20477:366;;;:::o;20849:419::-;21015:4;21053:2;21042:9;21038:18;21030:26;;21102:9;21096:4;21092:20;21088:1;21077:9;21073:17;21066:47;21130:131;21256:4;21130:131;:::i;:::-;21122:139;;20849:419;;;:::o;21274:410::-;21314:7;21337:20;21355:1;21337:20;:::i;:::-;21332:25;;21371:20;21389:1;21371:20;:::i;:::-;21366:25;;21426:1;21423;21419:9;21448:30;21466:11;21448:30;:::i;:::-;21437:41;;21627:1;21618:7;21614:15;21611:1;21608:22;21588:1;21581:9;21561:83;21538:139;;21657:18;;:::i;:::-;21538:139;21322:362;21274:410;;;;:::o;21690:180::-;21738:77;21735:1;21728:88;21835:4;21832:1;21825:15;21859:4;21856:1;21849:15;21876:185;21916:1;21933:20;21951:1;21933:20;:::i;:::-;21928:25;;21967:20;21985:1;21967:20;:::i;:::-;21962:25;;22006:1;21996:35;;22011:18;;:::i;:::-;21996:35;22053:1;22050;22046:9;22041:14;;21876:185;;;;:::o;22067:247::-;22207:34;22203:1;22195:6;22191:14;22184:58;22276:30;22271:2;22263:6;22259:15;22252:55;22067:247;:::o;22320:366::-;22462:3;22483:67;22547:2;22542:3;22483:67;:::i;:::-;22476:74;;22559:93;22648:3;22559:93;:::i;:::-;22677:2;22672:3;22668:12;22661:19;;22320:366;;;:::o;22692:419::-;22858:4;22896:2;22885:9;22881:18;22873:26;;22945:9;22939:4;22935:20;22931:1;22920:9;22916:17;22909:47;22973:131;23099:4;22973:131;:::i;:::-;22965:139;;22692:419;;;:::o;23117:246::-;23257:34;23253:1;23245:6;23241:14;23234:58;23326:29;23321:2;23313:6;23309:15;23302:54;23117:246;:::o;23369:366::-;23511:3;23532:67;23596:2;23591:3;23532:67;:::i;:::-;23525:74;;23608:93;23697:3;23608:93;:::i;:::-;23726:2;23721:3;23717:12;23710:19;;23369:366;;;:::o;23741:419::-;23907:4;23945:2;23934:9;23930:18;23922:26;;23994:9;23988:4;23984:20;23980:1;23969:9;23965:17;23958:47;24022:131;24148:4;24022:131;:::i;:::-;24014:139;;23741:419;;;:::o;24166:227::-;24306:34;24302:1;24294:6;24290:14;24283:58;24375:10;24370:2;24362:6;24358:15;24351:35;24166:227;:::o;24399:366::-;24541:3;24562:67;24626:2;24621:3;24562:67;:::i;:::-;24555:74;;24638:93;24727:3;24638:93;:::i;:::-;24756:2;24751:3;24747:12;24740:19;;24399:366;;;:::o;24771:419::-;24937:4;24975:2;24964:9;24960:18;24952:26;;25024:9;25018:4;25014:20;25010:1;24999:9;24995:17;24988:47;25052:131;25178:4;25052:131;:::i;:::-;25044:139;;24771:419;;;:::o;25196:230::-;25336:34;25332:1;25324:6;25320:14;25313:58;25405:13;25400:2;25392:6;25388:15;25381:38;25196:230;:::o;25432:366::-;25574:3;25595:67;25659:2;25654:3;25595:67;:::i;:::-;25588:74;;25671:93;25760:3;25671:93;:::i;:::-;25789:2;25784:3;25780:12;25773:19;;25432:366;;;:::o;25804:419::-;25970:4;26008:2;25997:9;25993:18;25985:26;;26057:9;26051:4;26047:20;26043:1;26032:9;26028:17;26021:47;26085:131;26211:4;26085:131;:::i;:::-;26077:139;;25804:419;;;:::o;26229:147::-;26330:11;26367:3;26352:18;;26229:147;;;;:::o;26382:114::-;;:::o;26502:398::-;26661:3;26682:83;26763:1;26758:3;26682:83;:::i;:::-;26675:90;;26774:93;26863:3;26774:93;:::i;:::-;26892:1;26887:3;26883:11;26876:18;;26502:398;;;:::o;26906:379::-;27090:3;27112:147;27255:3;27112:147;:::i;:::-;27105:154;;27276:3;27269:10;;26906:379;;;:::o;27291:143::-;27348:5;27379:6;27373:13;27364:22;;27395:33;27422:5;27395:33;:::i;:::-;27291:143;;;;:::o;27440:351::-;27510:6;27559:2;27547:9;27538:7;27534:23;27530:32;27527:119;;;27565:79;;:::i;:::-;27527:119;27685:1;27710:64;27766:7;27757:6;27746:9;27742:22;27710:64;:::i;:::-;27700:74;;27656:128;27440:351;;;;:::o;27797:159::-;27937:11;27933:1;27925:6;27921:14;27914:35;27797:159;:::o;27962:365::-;28104:3;28125:66;28189:1;28184:3;28125:66;:::i;:::-;28118:73;;28200:93;28289:3;28200:93;:::i;:::-;28318:2;28313:3;28309:12;28302:19;;27962:365;;;:::o;28333:419::-;28499:4;28537:2;28526:9;28522:18;28514:26;;28586:9;28580:4;28576:20;28572:1;28561:9;28557:17;28550:47;28614:131;28740:4;28614:131;:::i;:::-;28606:139;;28333:419;;;:::o;28758:332::-;28879:4;28917:2;28906:9;28902:18;28894:26;;28930:71;28998:1;28987:9;28983:17;28974:6;28930:71;:::i;:::-;29011:72;29079:2;29068:9;29064:18;29055:6;29011:72;:::i;:::-;28758:332;;;;;:::o;29096:137::-;29150:5;29181:6;29175:13;29166:22;;29197:30;29221:5;29197:30;:::i;:::-;29096:137;;;;:::o;29239:345::-;29306:6;29355:2;29343:9;29334:7;29330:23;29326:32;29323:119;;;29361:79;;:::i;:::-;29323:119;29481:1;29506:61;29559:7;29550:6;29539:9;29535:22;29506:61;:::i;:::-;29496:71;;29452:125;29239:345;;;;:::o;29590:143::-;29647:5;29678:6;29672:13;29663:22;;29694:33;29721:5;29694:33;:::i;:::-;29590:143;;;;:::o;29739:351::-;29809:6;29858:2;29846:9;29837:7;29833:23;29829:32;29826:119;;;29864:79;;:::i;:::-;29826:119;29984:1;30009:64;30065:7;30056:6;30045:9;30041:22;30009:64;:::i;:::-;29999:74;;29955:128;29739:351;;;;:::o;30096:332::-;30217:4;30255:2;30244:9;30240:18;30232:26;;30268:71;30336:1;30325:9;30321:17;30312:6;30268:71;:::i;:::-;30349:72;30417:2;30406:9;30402:18;30393:6;30349:72;:::i;:::-;30096:332;;;;;:::o;30434:85::-;30479:7;30508:5;30497:16;;30434:85;;;:::o;30525:158::-;30583:9;30616:61;30634:42;30643:32;30669:5;30643:32;:::i;:::-;30634:42;:::i;:::-;30616:61;:::i;:::-;30603:74;;30525:158;;;:::o;30689:147::-;30784:45;30823:5;30784:45;:::i;:::-;30779:3;30772:58;30689:147;;:::o;30842:807::-;31091:4;31129:3;31118:9;31114:19;31106:27;;31143:71;31211:1;31200:9;31196:17;31187:6;31143:71;:::i;:::-;31224:72;31292:2;31281:9;31277:18;31268:6;31224:72;:::i;:::-;31306:80;31382:2;31371:9;31367:18;31358:6;31306:80;:::i;:::-;31396;31472:2;31461:9;31457:18;31448:6;31396:80;:::i;:::-;31486:73;31554:3;31543:9;31539:19;31530:6;31486:73;:::i;:::-;31569;31637:3;31626:9;31622:19;31613:6;31569:73;:::i;:::-;30842:807;;;;;;;;;:::o;31655:663::-;31743:6;31751;31759;31808:2;31796:9;31787:7;31783:23;31779:32;31776:119;;;31814:79;;:::i;:::-;31776:119;31934:1;31959:64;32015:7;32006:6;31995:9;31991:22;31959:64;:::i;:::-;31949:74;;31905:128;32072:2;32098:64;32154:7;32145:6;32134:9;32130:22;32098:64;:::i;:::-;32088:74;;32043:129;32211:2;32237:64;32293:7;32284:6;32273:9;32269:22;32237:64;:::i;:::-;32227:74;;32182:129;31655:663;;;;;:::o;32324:225::-;32464:34;32460:1;32452:6;32448:14;32441:58;32533:8;32528:2;32520:6;32516:15;32509:33;32324:225;:::o;32555:366::-;32697:3;32718:67;32782:2;32777:3;32718:67;:::i;:::-;32711:74;;32794:93;32883:3;32794:93;:::i;:::-;32912:2;32907:3;32903:12;32896:19;;32555:366;;;:::o;32927:419::-;33093:4;33131:2;33120:9;33116:18;33108:26;;33180:9;33174:4;33170:20;33166:1;33155:9;33151:17;33144:47;33208:131;33334:4;33208:131;:::i;:::-;33200:139;;32927:419;;;:::o;33352:223::-;33492:34;33488:1;33480:6;33476:14;33469:58;33561:6;33556:2;33548:6;33544:15;33537:31;33352:223;:::o;33581:366::-;33723:3;33744:67;33808:2;33803:3;33744:67;:::i;:::-;33737:74;;33820:93;33909:3;33820:93;:::i;:::-;33938:2;33933:3;33929:12;33922:19;;33581:366;;;:::o;33953:419::-;34119:4;34157:2;34146:9;34142:18;34134:26;;34206:9;34200:4;34196:20;34192:1;34181:9;34177:17;34170:47;34234:131;34360:4;34234:131;:::i;:::-;34226:139;;33953:419;;;:::o;34378:221::-;34518:34;34514:1;34506:6;34502:14;34495:58;34587:4;34582:2;34574:6;34570:15;34563:29;34378:221;:::o;34605:366::-;34747:3;34768:67;34832:2;34827:3;34768:67;:::i;:::-;34761:74;;34844:93;34933:3;34844:93;:::i;:::-;34962:2;34957:3;34953:12;34946:19;;34605:366;;;:::o;34977:419::-;35143:4;35181:2;35170:9;35166:18;35158:26;;35230:9;35224:4;35220:20;35216:1;35205:9;35201:17;35194:47;35258:131;35384:4;35258:131;:::i;:::-;35250:139;;34977:419;;;:::o;35402:182::-;35542:34;35538:1;35530:6;35526:14;35519:58;35402:182;:::o;35590:366::-;35732:3;35753:67;35817:2;35812:3;35753:67;:::i;:::-;35746:74;;35829:93;35918:3;35829:93;:::i;:::-;35947:2;35942:3;35938:12;35931:19;;35590:366;;;:::o;35962:419::-;36128:4;36166:2;36155:9;36151:18;36143:26;;36215:9;36209:4;36205:20;36201:1;36190:9;36186:17;36179:47;36243:131;36369:4;36243:131;:::i;:::-;36235:139;;35962:419;;;:::o;36387:179::-;36527:31;36523:1;36515:6;36511:14;36504:55;36387:179;:::o;36572:366::-;36714:3;36735:67;36799:2;36794:3;36735:67;:::i;:::-;36728:74;;36811:93;36900:3;36811:93;:::i;:::-;36929:2;36924:3;36920:12;36913:19;;36572:366;;;:::o;36944:419::-;37110:4;37148:2;37137:9;37133:18;37125:26;;37197:9;37191:4;37187:20;37183:1;37172:9;37168:17;37161:47;37225:131;37351:4;37225:131;:::i;:::-;37217:139;;36944:419;;;:::o;37369:224::-;37509:34;37505:1;37497:6;37493:14;37486:58;37578:7;37573:2;37565:6;37561:15;37554:32;37369:224;:::o;37599:366::-;37741:3;37762:67;37826:2;37821:3;37762:67;:::i;:::-;37755:74;;37838:93;37927:3;37838:93;:::i;:::-;37956:2;37951:3;37947:12;37940:19;;37599:366;;;:::o;37971:419::-;38137:4;38175:2;38164:9;38160:18;38152:26;;38224:9;38218:4;38214:20;38210:1;38199:9;38195:17;38188:47;38252:131;38378:4;38252:131;:::i;:::-;38244:139;;37971:419;;;:::o;38396:222::-;38536:34;38532:1;38524:6;38520:14;38513:58;38605:5;38600:2;38592:6;38588:15;38581:30;38396:222;:::o;38624:366::-;38766:3;38787:67;38851:2;38846:3;38787:67;:::i;:::-;38780:74;;38863:93;38952:3;38863:93;:::i;:::-;38981:2;38976:3;38972:12;38965:19;;38624:366;;;:::o;38996:419::-;39162:4;39200:2;39189:9;39185:18;39177:26;;39249:9;39243:4;39239:20;39235:1;39224:9;39220:17;39213:47;39277:131;39403:4;39277:131;:::i;:::-;39269:139;;38996:419;;;:::o;39421:179::-;39561:31;39557:1;39549:6;39545:14;39538:55;39421:179;:::o;39606:366::-;39748:3;39769:67;39833:2;39828:3;39769:67;:::i;:::-;39762:74;;39845:93;39934:3;39845:93;:::i;:::-;39963:2;39958:3;39954:12;39947:19;;39606:366;;;:::o;39978:419::-;40144:4;40182:2;40171:9;40167:18;40159:26;;40231:9;40225:4;40221:20;40217:1;40206:9;40202:17;40195:47;40259:131;40385:4;40259:131;:::i;:::-;40251:139;;39978:419;;;:::o;40403:156::-;40543:8;40539:1;40531:6;40527:14;40520:32;40403:156;:::o;40565:365::-;40707:3;40728:66;40792:1;40787:3;40728:66;:::i;:::-;40721:73;;40803:93;40892:3;40803:93;:::i;:::-;40921:2;40916:3;40912:12;40905:19;;40565:365;;;:::o;40936:419::-;41102:4;41140:2;41129:9;41125:18;41117:26;;41189:9;41183:4;41179:20;41175:1;41164:9;41160:17;41153:47;41217:131;41343:4;41217:131;:::i;:::-;41209:139;;40936:419;;;:::o;41361:241::-;41501:34;41497:1;41489:6;41485:14;41478:58;41570:24;41565:2;41557:6;41553:15;41546:49;41361:241;:::o;41608:366::-;41750:3;41771:67;41835:2;41830:3;41771:67;:::i;:::-;41764:74;;41847:93;41936:3;41847:93;:::i;:::-;41965:2;41960:3;41956:12;41949:19;;41608:366;;;:::o;41980:419::-;42146:4;42184:2;42173:9;42169:18;42161:26;;42233:9;42227:4;42223:20;42219:1;42208:9;42204:17;42197:47;42261:131;42387:4;42261:131;:::i;:::-;42253:139;;41980:419;;;:::o;42405:176::-;42545:28;42541:1;42533:6;42529:14;42522:52;42405:176;:::o;42587:366::-;42729:3;42750:67;42814:2;42809:3;42750:67;:::i;:::-;42743:74;;42826:93;42915:3;42826:93;:::i;:::-;42944:2;42939:3;42935:12;42928:19;;42587:366;;;:::o;42959:419::-;43125:4;43163:2;43152:9;43148:18;43140:26;;43212:9;43206:4;43202:20;43198:1;43187:9;43183:17;43176:47;43240:131;43366:4;43240:131;:::i;:::-;43232:139;;42959:419;;;:::o;43384:242::-;43524:34;43520:1;43512:6;43508:14;43501:58;43593:25;43588:2;43580:6;43576:15;43569:50;43384:242;:::o;43632:366::-;43774:3;43795:67;43859:2;43854:3;43795:67;:::i;:::-;43788:74;;43871:93;43960:3;43871:93;:::i;:::-;43989:2;43984:3;43980:12;43973:19;;43632:366;;;:::o;44004:419::-;44170:4;44208:2;44197:9;44193:18;44185:26;;44257:9;44251:4;44247:20;44243:1;44232:9;44228:17;44221:47;44285:131;44411:4;44285:131;:::i;:::-;44277:139;;44004:419;;;:::o;44429:194::-;44469:4;44489:20;44507:1;44489:20;:::i;:::-;44484:25;;44523:20;44541:1;44523:20;:::i;:::-;44518:25;;44567:1;44564;44560:9;44552:17;;44591:1;44585:4;44582:11;44579:37;;;44596:18;;:::i;:::-;44579:37;44429:194;;;;:::o;44629:220::-;44769:34;44765:1;44757:6;44753:14;44746:58;44838:3;44833:2;44825:6;44821:15;44814:28;44629:220;:::o;44855:366::-;44997:3;45018:67;45082:2;45077:3;45018:67;:::i;:::-;45011:74;;45094:93;45183:3;45094:93;:::i;:::-;45212:2;45207:3;45203:12;45196:19;;44855:366;;;:::o;45227:419::-;45393:4;45431:2;45420:9;45416:18;45408:26;;45480:9;45474:4;45470:20;45466:1;45455:9;45451:17;45444:47;45508:131;45634:4;45508:131;:::i;:::-;45500:139;;45227:419;;;:::o;45652:221::-;45792:34;45788:1;45780:6;45776:14;45769:58;45861:4;45856:2;45848:6;45844:15;45837:29;45652:221;:::o;45879:366::-;46021:3;46042:67;46106:2;46101:3;46042:67;:::i;:::-;46035:74;;46118:93;46207:3;46118:93;:::i;:::-;46236:2;46231:3;46227:12;46220:19;;45879:366;;;:::o;46251:419::-;46417:4;46455:2;46444:9;46440:18;46432:26;;46504:9;46498:4;46494:20;46490:1;46479:9;46475:17;46468:47;46532:131;46658:4;46532:131;:::i;:::-;46524:139;;46251:419;;;:::o;46676:225::-;46816:34;46812:1;46804:6;46800:14;46793:58;46885:8;46880:2;46872:6;46868:15;46861:33;46676:225;:::o;46907:366::-;47049:3;47070:67;47134:2;47129:3;47070:67;:::i;:::-;47063:74;;47146:93;47235:3;47146:93;:::i;:::-;47264:2;47259:3;47255:12;47248:19;;46907:366;;;:::o;47279:419::-;47445:4;47483:2;47472:9;47468:18;47460:26;;47532:9;47526:4;47522:20;47518:1;47507:9;47503:17;47496:47;47560:131;47686:4;47560:131;:::i;:::-;47552:139;;47279:419;;;:::o;47704:442::-;47853:4;47891:2;47880:9;47876:18;47868:26;;47904:71;47972:1;47961:9;47957:17;47948:6;47904:71;:::i;:::-;47985:72;48053:2;48042:9;48038:18;48029:6;47985:72;:::i;:::-;48067;48135:2;48124:9;48120:18;48111:6;48067:72;:::i;:::-;47704:442;;;;;;:::o;48152:180::-;48200:77;48197:1;48190:88;48297:4;48294:1;48287:15;48321:4;48318:1;48311:15;48338:114;48405:6;48439:5;48433:12;48423:22;;48338:114;;;:::o;48458:184::-;48557:11;48591:6;48586:3;48579:19;48631:4;48626:3;48622:14;48607:29;;48458:184;;;;:::o;48648:132::-;48715:4;48738:3;48730:11;;48768:4;48763:3;48759:14;48751:22;;48648:132;;;:::o;48786:108::-;48863:24;48881:5;48863:24;:::i;:::-;48858:3;48851:37;48786:108;;:::o;48900:179::-;48969:10;48990:46;49032:3;49024:6;48990:46;:::i;:::-;49068:4;49063:3;49059:14;49045:28;;48900:179;;;;:::o;49085:113::-;49155:4;49187;49182:3;49178:14;49170:22;;49085:113;;;:::o;49234:732::-;49353:3;49382:54;49430:5;49382:54;:::i;:::-;49452:86;49531:6;49526:3;49452:86;:::i;:::-;49445:93;;49562:56;49612:5;49562:56;:::i;:::-;49641:7;49672:1;49657:284;49682:6;49679:1;49676:13;49657:284;;;49758:6;49752:13;49785:63;49844:3;49829:13;49785:63;:::i;:::-;49778:70;;49871:60;49924:6;49871:60;:::i;:::-;49861:70;;49717:224;49704:1;49701;49697:9;49692:14;;49657:284;;;49661:14;49957:3;49950:10;;49358:608;;;49234:732;;;;:::o;49972:831::-;50235:4;50273:3;50262:9;50258:19;50250:27;;50287:71;50355:1;50344:9;50340:17;50331:6;50287:71;:::i;:::-;50368:80;50444:2;50433:9;50429:18;50420:6;50368:80;:::i;:::-;50495:9;50489:4;50485:20;50480:2;50469:9;50465:18;50458:48;50523:108;50626:4;50617:6;50523:108;:::i;:::-;50515:116;;50641:72;50709:2;50698:9;50694:18;50685:6;50641:72;:::i;:::-;50723:73;50791:3;50780:9;50776:19;50767:6;50723:73;:::i;:::-;49972:831;;;;;;;;:::o

Swarm Source

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