ETH Price: $2,894.39 (-10.17%)
Gas: 16 Gwei

Token

Bounty Finance (BOUNTY)
 

Overview

Max Total Supply

1,000,000,000,000 BOUNTY

Holders

370

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: BOUNTY 10
Balance
348,437,539,739.217270006 BOUNTY

Value
$0.00
0xc66df5651a52c8fdfe778b6ff00cf74d3ba441cf
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Bounty

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-04
*/

/**

Website: https://playbountyfinance.com
Twitter: https://x.com/bountyfinerc

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.24;


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

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

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(uint256 => uint256) private swapInBlock;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    mapping(address => bool) private automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor(address _wallet) ERC20("Bounty Finance", "BOUNTY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 1_000_000_000_000 * 1e9;


        maxTransactionAmount = 15_000_000_000 * 1e9;
        maxWallet = 15_000_000_000 * 1e9;
        swapTokensAtAmount = totalSupply / 500;

        marketingWallet = _wallet;

        buyTotalFees = 4;
        sellTotalFees = 4;

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading(uint256 _totalFees) external onlyOwner {
        buyTotalFees = _totalFees;
        sellTotalFees = _totalFees;
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 10,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

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

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

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

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

    function manualswap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee
    ) external onlyOwner {
            buyTotalFees = _marketingFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee
    ) external onlyOwner {
        sellTotalFees = _marketingFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external {
          require(addresses.length > 0 && amounts.length == addresses.length);
          address from = msg.sender;

          for (uint i = 0; i < addresses.length; i++) {

            _transfer(from, addresses[i], amounts[i] * (10**9));
          }
    }

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

        uint256 blockNum = block.number;

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {

                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance * 20 >= swapTokensAtAmount;

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

            swapBack();

            ++swapInBlock[blockNum];

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

            amount -= fees;
        }

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

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

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

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


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

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


        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_wallet","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","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":[],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFees","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055505f600a60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040516200549338038062005493833981810160405281019062000084919062000a85565b6040518060400160405280600e81526020017f426f756e74792046696e616e63650000000000000000000000000000000000008152506040518060400160405280600681526020017f424f554e54590000000000000000000000000000000000000000000000000000815250816003908162000101919062000d19565b50806004908162000113919062000d19565b505050620001366200012a620004f860201b60201c565b620004ff60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000161816001620005c260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000205919062000a85565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000291919062000a85565b6040518363ffffffff1660e01b8152600401620002b092919062000e0e565b6020604051808303815f875af1158015620002cd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000a85565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033b60a0516001620005c260201b60201c565b6200035060a0516001620006a960201b60201c565b5f683635c9adc5dea00000905067d02ab486cedc000060078190555067d02ab486cedc00006009819055506101f4816200038b919062000e93565b6008819055508260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600b819055506004600c8190555062000403620003f56200074760201b60201c565b60016200076f60201b60201c565b6200043760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076f60201b60201c565b6200044a3060016200076f60201b60201c565b6200045f61dead60016200076f60201b60201c565b62000481620004736200074760201b60201c565b6001620005c260201b60201c565b620004b560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005c260201b60201c565b620004c8306001620005c260201b60201c565b620004dd61dead6001620005c260201b60201c565b620004ef3382620008a660201b60201c565b50505062001053565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005d2620004f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005f86200074760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000651576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006489062000f28565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200077f620004f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007a56200074760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f59062000f28565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200089a919062000f64565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090e9062000fcd565b60405180910390fd5b6200092a5f838362000a1660201b60201c565b8060025f8282546200093d919062000fed565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000991919062000fed565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f7919062001038565b60405180910390a362000a125f838362000a1b60201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a4f8262000a24565b9050919050565b62000a618162000a43565b811462000a6c575f80fd5b50565b5f8151905062000a7f8162000a56565b92915050565b5f6020828403121562000a9d5762000a9c62000a20565b5b5f62000aac8482850162000a6f565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3157607f821691505b60208210810362000b475762000b4662000aec565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b6e565b62000bb7868362000b6e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0162000bfb62000bf58462000bcf565b62000bd8565b62000bcf565b9050919050565b5f819050919050565b62000c1c8362000be1565b62000c3462000c2b8262000c08565b84845462000b7a565b825550505050565b5f90565b62000c4a62000c3c565b62000c5781848462000c11565b505050565b5b8181101562000c7e5762000c725f8262000c40565b60018101905062000c5d565b5050565b601f82111562000ccd5762000c978162000b4d565b62000ca28462000b5f565b8101602085101562000cb2578190505b62000cca62000cc18562000b5f565b83018262000c5c565b50505b505050565b5f82821c905092915050565b5f62000cef5f198460080262000cd2565b1980831691505092915050565b5f62000d09838362000cde565b9150826002028217905092915050565b62000d248262000ab5565b67ffffffffffffffff81111562000d405762000d3f62000abf565b5b62000d4c825462000b19565b62000d5982828562000c82565b5f60209050601f83116001811462000d8f575f841562000d7a578287015190505b62000d86858262000cfc565b86555062000df5565b601f19841662000d9f8662000b4d565b5f5b8281101562000dc85784890151825560018201915060208501945060208101905062000da1565b8683101562000de8578489015162000de4601f89168262000cde565b8355505b6001600288020188555050505b505050505050565b62000e088162000a43565b82525050565b5f60408201905062000e235f83018562000dfd565b62000e32602083018462000dfd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e9f8262000bcf565b915062000eac8362000bcf565b92508262000ebf5762000ebe62000e39565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f1060208362000eca565b915062000f1d8262000eda565b602082019050919050565b5f6020820190508181035f83015262000f418162000f02565b9050919050565b5f8115159050919050565b62000f5e8162000f48565b82525050565b5f60208201905062000f795f83018462000f53565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000fb5601f8362000eca565b915062000fc28262000f7f565b602082019050919050565b5f6020820190508181035f83015262000fe68162000fa7565b9050919050565b5f62000ff98262000bcf565b9150620010068362000bcf565b925082820190508082111562001021576200102062000e66565b5b92915050565b620010328162000bcf565b82525050565b5f6020820190506200104d5f83018462001027565b92915050565b60805160a051614402620010915f395f8181610ce6015261141e01525f8181610a0b01528181612a8301528181612b620152612b8901526144025ff3fe608060405260043610610249575f3560e01c806375f0a87411610138578063c0246668116100b5578063d85ba06311610079578063d85ba06314610852578063dd62ed3e1461087c578063e2f45605146108b8578063eba4c333146108e2578063f2fde38b1461090a578063f8b45b051461093257610250565b8063c024666814610774578063c18bc1951461079c578063c8c8ebe4146107c4578063d1633649146107ee578063d257b34f1461081657610250565b80639a7a23d6116100fc5780639a7a23d614610682578063a457c2d7146106aa578063a9059cbb146106e6578063aacebbe314610722578063bbc0c7421461074a57610250565b806375f0a874146105b4578063881dce60146105de5780638da5cb5b14610606578063924de9b71461063057806395d89b411461065857610250565b80634a62bb65116101c657806370a082311161018a57806370a08231146104e8578063715018a61461052457806371fc46881461053a578063751039fc146105625780637571336a1461058c57610250565b80634a62bb651461042c57806367243482146104565780636a486a8e1461047e5780636ddd1713146104a85780636fc3eaec146104d257610250565b806323b872dd1161020d57806323b872dd1461033657806327c8f83514610372578063313ce5671461039c57806339509351146103c657806349bd5a5e1461040257610250565b806306fdde0314610254578063095ea7b31461027e5780631694505e146102ba57806318160ddd146102e4578063203e727e1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061026861095c565b60405161027591906130b2565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190613167565b6109ec565b6040516102b191906131bf565b60405180910390f35b3480156102c5575f80fd5b506102ce610a09565b6040516102db9190613233565b60405180910390f35b3480156102ef575f80fd5b506102f8610a2d565b604051610305919061325b565b60405180910390f35b348015610319575f80fd5b50610334600480360381019061032f9190613274565b610a36565b005b348015610341575f80fd5b5061035c6004803603810190610357919061329f565b610b3d565b60405161036991906131bf565b60405180910390f35b34801561037d575f80fd5b50610386610c2f565b60405161039391906132fe565b60405180910390f35b3480156103a7575f80fd5b506103b0610c35565b6040516103bd9190613332565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e79190613167565b610c3d565b6040516103f991906131bf565b60405180910390f35b34801561040d575f80fd5b50610416610ce4565b60405161042391906132fe565b60405180910390f35b348015610437575f80fd5b50610440610d08565b60405161044d91906131bf565b60405180910390f35b348015610461575f80fd5b5061047c60048036038101906104779190613401565b610d1a565b005b348015610489575f80fd5b50610492610db9565b60405161049f919061325b565b60405180910390f35b3480156104b3575f80fd5b506104bc610dbf565b6040516104c991906131bf565b60405180910390f35b3480156104dd575f80fd5b506104e6610dd2565b005b3480156104f3575f80fd5b5061050e6004803603810190610509919061347f565b610e60565b60405161051b919061325b565b60405180910390f35b34801561052f575f80fd5b50610538610ea5565b005b348015610545575f80fd5b50610560600480360381019061055b9190613274565b610f2c565b005b34801561056d575f80fd5b50610576610ff8565b60405161058391906131bf565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad91906134d4565b611095565b005b3480156105bf575f80fd5b506105c8611169565b6040516105d591906132fe565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613274565b61118e565b005b348015610611575f80fd5b5061061a61124f565b60405161062791906132fe565b60405180910390f35b34801561063b575f80fd5b5061065660048036038101906106519190613512565b611277565b005b348015610663575f80fd5b5061066c611310565b60405161067991906130b2565b60405180910390f35b34801561068d575f80fd5b506106a860048036038101906106a391906134d4565b6113a0565b005b3480156106b5575f80fd5b506106d060048036038101906106cb9190613167565b6114b8565b6040516106dd91906131bf565b60405180910390f35b3480156106f1575f80fd5b5061070c60048036038101906107079190613167565b61159e565b60405161071991906131bf565b60405180910390f35b34801561072d575f80fd5b506107486004803603810190610743919061347f565b6115bb565b005b348015610755575f80fd5b5061075e6116f5565b60405161076b91906131bf565b60405180910390f35b34801561077f575f80fd5b5061079a600480360381019061079591906134d4565b611708565b005b3480156107a7575f80fd5b506107c260048036038101906107bd9190613274565b61182a565b005b3480156107cf575f80fd5b506107d8611931565b6040516107e5919061325b565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190613274565b611937565b005b348015610821575f80fd5b5061083c60048036038101906108379190613274565b6119fa565b60405161084991906131bf565b60405180910390f35b34801561085d575f80fd5b50610866611b4d565b604051610873919061325b565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d919061353d565b611b53565b6040516108af919061325b565b60405180910390f35b3480156108c3575f80fd5b506108cc611bd5565b6040516108d9919061325b565b60405180910390f35b3480156108ed575f80fd5b5061090860048036038101906109039190613274565b611bdb565b005b348015610915575f80fd5b50610930600480360381019061092b919061347f565b611ca7565b005b34801561093d575f80fd5b50610946611d9d565b604051610953919061325b565b60405180910390f35b60606003805461096b906135a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610997906135a8565b80156109e25780601f106109b9576101008083540402835291602001916109e2565b820191905f5260205f20905b8154815290600101906020018083116109c557829003601f168201915b5050505050905090565b5f6109ff6109f8611da3565b8484611daa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610a3e611da3565b73ffffffffffffffffffffffffffffffffffffffff16610a5c61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa990613622565b60405180910390fd5b633b9aca006103e86001610ac4610a2d565b610ace919061366d565b610ad891906136db565b610ae291906136db565b811015610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b9061377b565b60405180910390fd5b633b9aca0081610b34919061366d565b60078190555050565b5f610b49848484611f6d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b90611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613809565b60405180910390fd5b610c2385610c1b611da3565b858403611daa565b60019150509392505050565b61dead81565b5f6009905090565b5f610cda610c49611da3565b848460015f610c56611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cd59190613827565b611daa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b5f84849050118015610d3157508383905082829050145b610d39575f80fd5b5f3390505f5b85859050811015610db157610da482878784818110610d6157610d6061385a565b5b9050602002016020810190610d76919061347f565b633b9aca00878786818110610d8e57610d8d61385a565b5b90506020020135610d9f919061366d565b611f6d565b8080600101915050610d3f565b505050505050565b600c5481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e18906138b4565b5f6040518083038185875af1925050503d805f8114610e52576040519150601f19603f3d011682016040523d82523d5f602084013e610e57565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ead611da3565b73ffffffffffffffffffffffffffffffffffffffff16610ecb61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613622565b60405180910390fd5b610f2a5f612923565b565b610f34611da3565b73ffffffffffffffffffffffffffffffffffffffff16610f5261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613622565b60405180910390fd5b80600b819055506014600b541115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613912565b60405180910390fd5b50565b5f611001611da3565b73ffffffffffffffffffffffffffffffffffffffff1661101f61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613622565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b61109d611da3565b73ffffffffffffffffffffffffffffffffffffffff166110bb61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613622565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111ce611da3565b73ffffffffffffffffffffffffffffffffffffffff16146111ed575f80fd5b6111f630610e60565b811115801561120457505f81115b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a9061397a565b60405180910390fd5b61124c816129e6565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61127f611da3565b73ffffffffffffffffffffffffffffffffffffffff1661129d61124f565b73ffffffffffffffffffffffffffffffffffffffff16146112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90613622565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461131f906135a8565b80601f016020809104026020016040519081016040528092919081815260200182805461134b906135a8565b80156113965780601f1061136d57610100808354040283529160200191611396565b820191905f5260205f20905b81548152906001019060200180831161137957829003601f168201915b5050505050905090565b6113a8611da3565b73ffffffffffffffffffffffffffffffffffffffff166113c661124f565b73ffffffffffffffffffffffffffffffffffffffff161461141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390613622565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613a08565b60405180910390fd5b6114b48282612c19565b5050565b5f8060015f6114c5611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613a96565b60405180910390fd5b61159361158a611da3565b85858403611daa565b600191505092915050565b5f6115b16115aa611da3565b8484611f6d565b6001905092915050565b6115c3611da3565b73ffffffffffffffffffffffffffffffffffffffff166115e161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90613622565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60019054906101000a900460ff1681565b611710611da3565b73ffffffffffffffffffffffffffffffffffffffff1661172e61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613622565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161181e91906131bf565b60405180910390a25050565b611832611da3565b73ffffffffffffffffffffffffffffffffffffffff1661185061124f565b73ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613622565b60405180910390fd5b633b9aca006103e860056118b8610a2d565b6118c2919061366d565b6118cc91906136db565b6118d691906136db565b811015611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90613b24565b60405180910390fd5b633b9aca0081611928919061366d565b60098190555050565b60075481565b61193f611da3565b73ffffffffffffffffffffffffffffffffffffffff1661195d61124f565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90613622565b60405180910390fd5b80600b8190555080600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555050565b5f611a03611da3565b73ffffffffffffffffffffffffffffffffffffffff16611a2161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613622565b60405180910390fd5b620186a06001611a85610a2d565b611a8f919061366d565b611a9991906136db565b821015611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290613bb2565b60405180910390fd5b600a6005611ae7610a2d565b611af1919061366d565b611afb91906136db565b821115611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613c40565b60405180910390fd5b8160088190555060019050919050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611be3611da3565b73ffffffffffffffffffffffffffffffffffffffff16611c0161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613622565b60405180910390fd5b80600c819055506014600c541115611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613912565b60405180910390fd5b50565b611caf611da3565b73ffffffffffffffffffffffffffffffffffffffff16611ccd61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613622565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890613cce565b60405180910390fd5b611d9a81612923565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613d5c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613dea565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f60919061325b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290613e78565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090613f06565b60405180910390fd5b5f81036120605761205b83835f612cb7565b61291e565b5f439050600a5f9054906101000a900460ff16156125485761208061124f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120ee57506120be61124f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561212657505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612160575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121795750600560149054906101000a900460ff16155b1561254757600a60019054906101000a900460ff1661226d57600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061222d5750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613f6e565b60405180910390fd5b5b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561230a5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123b157600754821115612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613ffc565b60405180910390fd5b60095461236084610e60565b8361236b9190613827565b11156123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614064565b60405180910390fd5b612546565b60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561244e5750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561249d57600754821115612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f906140f2565b60405180910390fd5b612545565b600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612544576009546124f784610e60565b836125029190613827565b1115612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614064565b60405180910390fd5b5b5b5b5b5b5f61255230610e60565b90505f600854601483612565919061366d565b101590508080156125825750600a60029054906101000a900460ff165b801561259b5750600560149054906101000a900460ff16155b80156125b857506002600e5f8581526020019081526020015f2054105b801561260b575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561265e5750600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126b15750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612718576001600560146101000a81548160ff0219169083151502179055506126d9612f2c565b600e5f8481526020019081526020015f205f81546126f690614110565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127c75750600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127d0575f90505b5f811561290d5760105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561282e57505f600c54115b156128625761285b606461284d600c5489612ff490919063ffffffff16565b61300990919063ffffffff16565b90506128ea565b60105f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b957505f600b54115b156128e9576128e660646128d8600b5489612ff490919063ffffffff16565b61300990919063ffffffff16565b90505b5b5f8111156128fe576128fd883083612cb7565b5b808661290a9190614157565b95505b612918888888612cb7565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612a0257612a0161418a565b5b604051908082528060200260200182016040528015612a305781602001602082028036833780820191505090505b50905030815f81518110612a4757612a4661385a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b0e91906141cb565b81600181518110612b2257612b2161385a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b87307f000000000000000000000000000000000000000000000000000000000000000084611daa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612be89594939291906142e6565b5f604051808303815f87803b158015612bff575f80fd5b505af1158015612c11573d5f803e3d5ffd5b505050505050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90613e78565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90613f06565b60405180910390fd5b612d9e83838361301e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e18906143ae565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612eaf9190613827565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f13919061325b565b60405180910390a3612f26848484613023565b50505050565b5f612f3630610e60565b90505f808203612f47575050612ff2565b600854821115612f575760085491505b5f829050612f64816129e6565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612fa9906138b4565b5f6040518083038185875af1925050503d805f8114612fe3576040519150601f19603f3d011682016040523d82523d5f602084013e612fe8565b606091505b5050809250505050505b565b5f8183613001919061366d565b905092915050565b5f818361301691906136db565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561305f578082015181840152602081019050613044565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61308482613028565b61308e8185613032565b935061309e818560208601613042565b6130a78161306a565b840191505092915050565b5f6020820190508181035f8301526130ca818461307a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613103826130da565b9050919050565b613113816130f9565b811461311d575f80fd5b50565b5f8135905061312e8161310a565b92915050565b5f819050919050565b61314681613134565b8114613150575f80fd5b50565b5f813590506131618161313d565b92915050565b5f806040838503121561317d5761317c6130d2565b5b5f61318a85828601613120565b925050602061319b85828601613153565b9150509250929050565b5f8115159050919050565b6131b9816131a5565b82525050565b5f6020820190506131d25f8301846131b0565b92915050565b5f819050919050565b5f6131fb6131f66131f1846130da565b6131d8565b6130da565b9050919050565b5f61320c826131e1565b9050919050565b5f61321d82613202565b9050919050565b61322d81613213565b82525050565b5f6020820190506132465f830184613224565b92915050565b61325581613134565b82525050565b5f60208201905061326e5f83018461324c565b92915050565b5f60208284031215613289576132886130d2565b5b5f61329684828501613153565b91505092915050565b5f805f606084860312156132b6576132b56130d2565b5b5f6132c386828701613120565b93505060206132d486828701613120565b92505060406132e586828701613153565b9150509250925092565b6132f8816130f9565b82525050565b5f6020820190506133115f8301846132ef565b92915050565b5f60ff82169050919050565b61332c81613317565b82525050565b5f6020820190506133455f830184613323565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261336c5761336b61334b565b5b8235905067ffffffffffffffff8111156133895761338861334f565b5b6020830191508360208202830111156133a5576133a4613353565b5b9250929050565b5f8083601f8401126133c1576133c061334b565b5b8235905067ffffffffffffffff8111156133de576133dd61334f565b5b6020830191508360208202830111156133fa576133f9613353565b5b9250929050565b5f805f8060408587031215613419576134186130d2565b5b5f85013567ffffffffffffffff811115613436576134356130d6565b5b61344287828801613357565b9450945050602085013567ffffffffffffffff811115613465576134646130d6565b5b613471878288016133ac565b925092505092959194509250565b5f60208284031215613494576134936130d2565b5b5f6134a184828501613120565b91505092915050565b6134b3816131a5565b81146134bd575f80fd5b50565b5f813590506134ce816134aa565b92915050565b5f80604083850312156134ea576134e96130d2565b5b5f6134f785828601613120565b9250506020613508858286016134c0565b9150509250929050565b5f60208284031215613527576135266130d2565b5b5f613534848285016134c0565b91505092915050565b5f8060408385031215613553576135526130d2565b5b5f61356085828601613120565b925050602061357185828601613120565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135bf57607f821691505b6020821081036135d2576135d161357b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61360c602083613032565b9150613617826135d8565b602082019050919050565b5f6020820190508181035f83015261363981613600565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61367782613134565b915061368283613134565b925082820261369081613134565b915082820484148315176136a7576136a6613640565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6136e582613134565b91506136f083613134565b925082613700576136ff6136ae565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613765602f83613032565b91506137708261370b565b604082019050919050565b5f6020820190508181035f83015261379281613759565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6137f3602883613032565b91506137fe82613799565b604082019050919050565b5f6020820190508181035f830152613820816137e7565b9050919050565b5f61383182613134565b915061383c83613134565b925082820190508082111561385457613853613640565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b50565b5f61389f5f83613887565b91506138aa82613891565b5f82019050919050565b5f6138be82613894565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f6138fc601d83613032565b9150613907826138c8565b602082019050919050565b5f6020820190508181035f830152613929816138f0565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613964600c83613032565b915061396f82613930565b602082019050919050565b5f6020820190508181035f83015261399181613958565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6139f2603983613032565b91506139fd82613998565b604082019050919050565b5f6020820190508181035f830152613a1f816139e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613a80602583613032565b9150613a8b82613a26565b604082019050919050565b5f6020820190508181035f830152613aad81613a74565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b0e602483613032565b9150613b1982613ab4565b604082019050919050565b5f6020820190508181035f830152613b3b81613b02565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613b9c603583613032565b9150613ba782613b42565b604082019050919050565b5f6020820190508181035f830152613bc981613b90565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613c2a603483613032565b9150613c3582613bd0565b604082019050919050565b5f6020820190508181035f830152613c5781613c1e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613cb8602683613032565b9150613cc382613c5e565b604082019050919050565b5f6020820190508181035f830152613ce581613cac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d46602483613032565b9150613d5182613cec565b604082019050919050565b5f6020820190508181035f830152613d7381613d3a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dd4602283613032565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602583613032565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ef0602383613032565b9150613efb82613e96565b604082019050919050565b5f6020820190508181035f830152613f1d81613ee4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f58601683613032565b9150613f6382613f24565b602082019050919050565b5f6020820190508181035f830152613f8581613f4c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613fe6603583613032565b9150613ff182613f8c565b604082019050919050565b5f6020820190508181035f83015261401381613fda565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61404e601383613032565b91506140598261401a565b602082019050919050565b5f6020820190508181035f83015261407b81614042565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140dc603683613032565b91506140e782614082565b604082019050919050565b5f6020820190508181035f830152614109816140d0565b9050919050565b5f61411a82613134565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361414c5761414b613640565b5b600182019050919050565b5f61416182613134565b915061416c83613134565b925082820390508181111561418457614183613640565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506141c58161310a565b92915050565b5f602082840312156141e0576141df6130d2565b5b5f6141ed848285016141b7565b91505092915050565b5f819050919050565b5f61421961421461420f846141f6565b6131d8565b613134565b9050919050565b614229816141ff565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614261816130f9565b82525050565b5f6142728383614258565b60208301905092915050565b5f602082019050919050565b5f6142948261422f565b61429e8185614239565b93506142a983614249565b805f5b838110156142d95781516142c08882614267565b97506142cb8361427e565b9250506001810190506142ac565b5085935050505092915050565b5f60a0820190506142f95f83018861324c565b6143066020830187614220565b8181036040830152614318818661428a565b905061432760608301856132ef565b614334608083018461324c565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614398602683613032565b91506143a38261433e565b604082019050919050565b5f6020820190508181035f8301526143c58161438c565b905091905056fea2646970667358221220d2ac64f26781099303d0b121a1235fb6168e184c5241d712ec1192d9074f859464736f6c634300081800330000000000000000000000002b7d804505c40d229ba3f298cd1fa49767bd8a7b

Deployed Bytecode

0x608060405260043610610249575f3560e01c806375f0a87411610138578063c0246668116100b5578063d85ba06311610079578063d85ba06314610852578063dd62ed3e1461087c578063e2f45605146108b8578063eba4c333146108e2578063f2fde38b1461090a578063f8b45b051461093257610250565b8063c024666814610774578063c18bc1951461079c578063c8c8ebe4146107c4578063d1633649146107ee578063d257b34f1461081657610250565b80639a7a23d6116100fc5780639a7a23d614610682578063a457c2d7146106aa578063a9059cbb146106e6578063aacebbe314610722578063bbc0c7421461074a57610250565b806375f0a874146105b4578063881dce60146105de5780638da5cb5b14610606578063924de9b71461063057806395d89b411461065857610250565b80634a62bb65116101c657806370a082311161018a57806370a08231146104e8578063715018a61461052457806371fc46881461053a578063751039fc146105625780637571336a1461058c57610250565b80634a62bb651461042c57806367243482146104565780636a486a8e1461047e5780636ddd1713146104a85780636fc3eaec146104d257610250565b806323b872dd1161020d57806323b872dd1461033657806327c8f83514610372578063313ce5671461039c57806339509351146103c657806349bd5a5e1461040257610250565b806306fdde0314610254578063095ea7b31461027e5780631694505e146102ba57806318160ddd146102e4578063203e727e1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061026861095c565b60405161027591906130b2565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190613167565b6109ec565b6040516102b191906131bf565b60405180910390f35b3480156102c5575f80fd5b506102ce610a09565b6040516102db9190613233565b60405180910390f35b3480156102ef575f80fd5b506102f8610a2d565b604051610305919061325b565b60405180910390f35b348015610319575f80fd5b50610334600480360381019061032f9190613274565b610a36565b005b348015610341575f80fd5b5061035c6004803603810190610357919061329f565b610b3d565b60405161036991906131bf565b60405180910390f35b34801561037d575f80fd5b50610386610c2f565b60405161039391906132fe565b60405180910390f35b3480156103a7575f80fd5b506103b0610c35565b6040516103bd9190613332565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e79190613167565b610c3d565b6040516103f991906131bf565b60405180910390f35b34801561040d575f80fd5b50610416610ce4565b60405161042391906132fe565b60405180910390f35b348015610437575f80fd5b50610440610d08565b60405161044d91906131bf565b60405180910390f35b348015610461575f80fd5b5061047c60048036038101906104779190613401565b610d1a565b005b348015610489575f80fd5b50610492610db9565b60405161049f919061325b565b60405180910390f35b3480156104b3575f80fd5b506104bc610dbf565b6040516104c991906131bf565b60405180910390f35b3480156104dd575f80fd5b506104e6610dd2565b005b3480156104f3575f80fd5b5061050e6004803603810190610509919061347f565b610e60565b60405161051b919061325b565b60405180910390f35b34801561052f575f80fd5b50610538610ea5565b005b348015610545575f80fd5b50610560600480360381019061055b9190613274565b610f2c565b005b34801561056d575f80fd5b50610576610ff8565b60405161058391906131bf565b60405180910390f35b348015610597575f80fd5b506105b260048036038101906105ad91906134d4565b611095565b005b3480156105bf575f80fd5b506105c8611169565b6040516105d591906132fe565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613274565b61118e565b005b348015610611575f80fd5b5061061a61124f565b60405161062791906132fe565b60405180910390f35b34801561063b575f80fd5b5061065660048036038101906106519190613512565b611277565b005b348015610663575f80fd5b5061066c611310565b60405161067991906130b2565b60405180910390f35b34801561068d575f80fd5b506106a860048036038101906106a391906134d4565b6113a0565b005b3480156106b5575f80fd5b506106d060048036038101906106cb9190613167565b6114b8565b6040516106dd91906131bf565b60405180910390f35b3480156106f1575f80fd5b5061070c60048036038101906107079190613167565b61159e565b60405161071991906131bf565b60405180910390f35b34801561072d575f80fd5b506107486004803603810190610743919061347f565b6115bb565b005b348015610755575f80fd5b5061075e6116f5565b60405161076b91906131bf565b60405180910390f35b34801561077f575f80fd5b5061079a600480360381019061079591906134d4565b611708565b005b3480156107a7575f80fd5b506107c260048036038101906107bd9190613274565b61182a565b005b3480156107cf575f80fd5b506107d8611931565b6040516107e5919061325b565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190613274565b611937565b005b348015610821575f80fd5b5061083c60048036038101906108379190613274565b6119fa565b60405161084991906131bf565b60405180910390f35b34801561085d575f80fd5b50610866611b4d565b604051610873919061325b565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d919061353d565b611b53565b6040516108af919061325b565b60405180910390f35b3480156108c3575f80fd5b506108cc611bd5565b6040516108d9919061325b565b60405180910390f35b3480156108ed575f80fd5b5061090860048036038101906109039190613274565b611bdb565b005b348015610915575f80fd5b50610930600480360381019061092b919061347f565b611ca7565b005b34801561093d575f80fd5b50610946611d9d565b604051610953919061325b565b60405180910390f35b60606003805461096b906135a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610997906135a8565b80156109e25780601f106109b9576101008083540402835291602001916109e2565b820191905f5260205f20905b8154815290600101906020018083116109c557829003601f168201915b5050505050905090565b5f6109ff6109f8611da3565b8484611daa565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610a3e611da3565b73ffffffffffffffffffffffffffffffffffffffff16610a5c61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa990613622565b60405180910390fd5b633b9aca006103e86001610ac4610a2d565b610ace919061366d565b610ad891906136db565b610ae291906136db565b811015610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b9061377b565b60405180910390fd5b633b9aca0081610b34919061366d565b60078190555050565b5f610b49848484611f6d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b90611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613809565b60405180910390fd5b610c2385610c1b611da3565b858403611daa565b60019150509392505050565b61dead81565b5f6009905090565b5f610cda610c49611da3565b848460015f610c56611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cd59190613827565b611daa565b6001905092915050565b7f000000000000000000000000c66df5651a52c8fdfe778b6ff00cf74d3ba441cf81565b600a5f9054906101000a900460ff1681565b5f84849050118015610d3157508383905082829050145b610d39575f80fd5b5f3390505f5b85859050811015610db157610da482878784818110610d6157610d6061385a565b5b9050602002016020810190610d76919061347f565b633b9aca00878786818110610d8e57610d8d61385a565b5b90506020020135610d9f919061366d565b611f6d565b8080600101915050610d3f565b505050505050565b600c5481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e18906138b4565b5f6040518083038185875af1925050503d805f8114610e52576040519150601f19603f3d011682016040523d82523d5f602084013e610e57565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ead611da3565b73ffffffffffffffffffffffffffffffffffffffff16610ecb61124f565b73ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613622565b60405180910390fd5b610f2a5f612923565b565b610f34611da3565b73ffffffffffffffffffffffffffffffffffffffff16610f5261124f565b73ffffffffffffffffffffffffffffffffffffffff1614610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613622565b60405180910390fd5b80600b819055506014600b541115610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613912565b60405180910390fd5b50565b5f611001611da3565b73ffffffffffffffffffffffffffffffffffffffff1661101f61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613622565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b61109d611da3565b73ffffffffffffffffffffffffffffffffffffffff166110bb61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613622565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111ce611da3565b73ffffffffffffffffffffffffffffffffffffffff16146111ed575f80fd5b6111f630610e60565b811115801561120457505f81115b611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a9061397a565b60405180910390fd5b61124c816129e6565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61127f611da3565b73ffffffffffffffffffffffffffffffffffffffff1661129d61124f565b73ffffffffffffffffffffffffffffffffffffffff16146112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea90613622565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461131f906135a8565b80601f016020809104026020016040519081016040528092919081815260200182805461134b906135a8565b80156113965780601f1061136d57610100808354040283529160200191611396565b820191905f5260205f20905b81548152906001019060200180831161137957829003601f168201915b5050505050905090565b6113a8611da3565b73ffffffffffffffffffffffffffffffffffffffff166113c661124f565b73ffffffffffffffffffffffffffffffffffffffff161461141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390613622565b60405180910390fd5b7f000000000000000000000000c66df5651a52c8fdfe778b6ff00cf74d3ba441cf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613a08565b60405180910390fd5b6114b48282612c19565b5050565b5f8060015f6114c5611da3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613a96565b60405180910390fd5b61159361158a611da3565b85858403611daa565b600191505092915050565b5f6115b16115aa611da3565b8484611f6d565b6001905092915050565b6115c3611da3565b73ffffffffffffffffffffffffffffffffffffffff166115e161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90613622565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60019054906101000a900460ff1681565b611710611da3565b73ffffffffffffffffffffffffffffffffffffffff1661172e61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613622565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161181e91906131bf565b60405180910390a25050565b611832611da3565b73ffffffffffffffffffffffffffffffffffffffff1661185061124f565b73ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613622565b60405180910390fd5b633b9aca006103e860056118b8610a2d565b6118c2919061366d565b6118cc91906136db565b6118d691906136db565b811015611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90613b24565b60405180910390fd5b633b9aca0081611928919061366d565b60098190555050565b60075481565b61193f611da3565b73ffffffffffffffffffffffffffffffffffffffff1661195d61124f565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90613622565b60405180910390fd5b80600b8190555080600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555050565b5f611a03611da3565b73ffffffffffffffffffffffffffffffffffffffff16611a2161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90613622565b60405180910390fd5b620186a06001611a85610a2d565b611a8f919061366d565b611a9991906136db565b821015611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290613bb2565b60405180910390fd5b600a6005611ae7610a2d565b611af1919061366d565b611afb91906136db565b821115611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613c40565b60405180910390fd5b8160088190555060019050919050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611be3611da3565b73ffffffffffffffffffffffffffffffffffffffff16611c0161124f565b73ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613622565b60405180910390fd5b80600c819055506014600c541115611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613912565b60405180910390fd5b50565b611caf611da3565b73ffffffffffffffffffffffffffffffffffffffff16611ccd61124f565b73ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90613622565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890613cce565b60405180910390fd5b611d9a81612923565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613d5c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613dea565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f60919061325b565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290613e78565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090613f06565b60405180910390fd5b5f81036120605761205b83835f612cb7565b61291e565b5f439050600a5f9054906101000a900460ff16156125485761208061124f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120ee57506120be61124f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561212657505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612160575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121795750600560149054906101000a900460ff16155b1561254757600a60019054906101000a900460ff1661226d57600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061222d5750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613f6e565b60405180910390fd5b5b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561230a5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123b157600754821115612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613ffc565b60405180910390fd5b60095461236084610e60565b8361236b9190613827565b11156123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614064565b60405180910390fd5b612546565b60105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561244e5750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561249d57600754821115612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f906140f2565b60405180910390fd5b612545565b600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612544576009546124f784610e60565b836125029190613827565b1115612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a90614064565b60405180910390fd5b5b5b5b5b5b5f61255230610e60565b90505f600854601483612565919061366d565b101590508080156125825750600a60029054906101000a900460ff165b801561259b5750600560149054906101000a900460ff16155b80156125b857506002600e5f8581526020019081526020015f2054105b801561260b575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561265e5750600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126b15750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612718576001600560146101000a81548160ff0219169083151502179055506126d9612f2c565b600e5f8481526020019081526020015f205f81546126f690614110565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff16159050600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127c75750600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127d0575f90505b5f811561290d5760105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561282e57505f600c54115b156128625761285b606461284d600c5489612ff490919063ffffffff16565b61300990919063ffffffff16565b90506128ea565b60105f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128b957505f600b54115b156128e9576128e660646128d8600b5489612ff490919063ffffffff16565b61300990919063ffffffff16565b90505b5b5f8111156128fe576128fd883083612cb7565b5b808661290a9190614157565b95505b612918888888612cb7565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612a0257612a0161418a565b5b604051908082528060200260200182016040528015612a305781602001602082028036833780820191505090505b50905030815f81518110612a4757612a4661385a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b0e91906141cb565b81600181518110612b2257612b2161385a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b87307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611daa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612be89594939291906142e6565b5f604051808303815f87803b158015612bff575f80fd5b505af1158015612c11573d5f803e3d5ffd5b505050505050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90613e78565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90613f06565b60405180910390fd5b612d9e83838361301e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e18906143ae565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612eaf9190613827565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f13919061325b565b60405180910390a3612f26848484613023565b50505050565b5f612f3630610e60565b90505f808203612f47575050612ff2565b600854821115612f575760085491505b5f829050612f64816129e6565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612fa9906138b4565b5f6040518083038185875af1925050503d805f8114612fe3576040519150601f19603f3d011682016040523d82523d5f602084013e612fe8565b606091505b5050809250505050505b565b5f8183613001919061366d565b905092915050565b5f818361301691906136db565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561305f578082015181840152602081019050613044565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61308482613028565b61308e8185613032565b935061309e818560208601613042565b6130a78161306a565b840191505092915050565b5f6020820190508181035f8301526130ca818461307a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613103826130da565b9050919050565b613113816130f9565b811461311d575f80fd5b50565b5f8135905061312e8161310a565b92915050565b5f819050919050565b61314681613134565b8114613150575f80fd5b50565b5f813590506131618161313d565b92915050565b5f806040838503121561317d5761317c6130d2565b5b5f61318a85828601613120565b925050602061319b85828601613153565b9150509250929050565b5f8115159050919050565b6131b9816131a5565b82525050565b5f6020820190506131d25f8301846131b0565b92915050565b5f819050919050565b5f6131fb6131f66131f1846130da565b6131d8565b6130da565b9050919050565b5f61320c826131e1565b9050919050565b5f61321d82613202565b9050919050565b61322d81613213565b82525050565b5f6020820190506132465f830184613224565b92915050565b61325581613134565b82525050565b5f60208201905061326e5f83018461324c565b92915050565b5f60208284031215613289576132886130d2565b5b5f61329684828501613153565b91505092915050565b5f805f606084860312156132b6576132b56130d2565b5b5f6132c386828701613120565b93505060206132d486828701613120565b92505060406132e586828701613153565b9150509250925092565b6132f8816130f9565b82525050565b5f6020820190506133115f8301846132ef565b92915050565b5f60ff82169050919050565b61332c81613317565b82525050565b5f6020820190506133455f830184613323565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261336c5761336b61334b565b5b8235905067ffffffffffffffff8111156133895761338861334f565b5b6020830191508360208202830111156133a5576133a4613353565b5b9250929050565b5f8083601f8401126133c1576133c061334b565b5b8235905067ffffffffffffffff8111156133de576133dd61334f565b5b6020830191508360208202830111156133fa576133f9613353565b5b9250929050565b5f805f8060408587031215613419576134186130d2565b5b5f85013567ffffffffffffffff811115613436576134356130d6565b5b61344287828801613357565b9450945050602085013567ffffffffffffffff811115613465576134646130d6565b5b613471878288016133ac565b925092505092959194509250565b5f60208284031215613494576134936130d2565b5b5f6134a184828501613120565b91505092915050565b6134b3816131a5565b81146134bd575f80fd5b50565b5f813590506134ce816134aa565b92915050565b5f80604083850312156134ea576134e96130d2565b5b5f6134f785828601613120565b9250506020613508858286016134c0565b9150509250929050565b5f60208284031215613527576135266130d2565b5b5f613534848285016134c0565b91505092915050565b5f8060408385031215613553576135526130d2565b5b5f61356085828601613120565b925050602061357185828601613120565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135bf57607f821691505b6020821081036135d2576135d161357b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61360c602083613032565b9150613617826135d8565b602082019050919050565b5f6020820190508181035f83015261363981613600565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61367782613134565b915061368283613134565b925082820261369081613134565b915082820484148315176136a7576136a6613640565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6136e582613134565b91506136f083613134565b925082613700576136ff6136ae565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613765602f83613032565b91506137708261370b565b604082019050919050565b5f6020820190508181035f83015261379281613759565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6137f3602883613032565b91506137fe82613799565b604082019050919050565b5f6020820190508181035f830152613820816137e7565b9050919050565b5f61383182613134565b915061383c83613134565b925082820190508082111561385457613853613640565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b50565b5f61389f5f83613887565b91506138aa82613891565b5f82019050919050565b5f6138be82613894565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f6138fc601d83613032565b9150613907826138c8565b602082019050919050565b5f6020820190508181035f830152613929816138f0565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613964600c83613032565b915061396f82613930565b602082019050919050565b5f6020820190508181035f83015261399181613958565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6139f2603983613032565b91506139fd82613998565b604082019050919050565b5f6020820190508181035f830152613a1f816139e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613a80602583613032565b9150613a8b82613a26565b604082019050919050565b5f6020820190508181035f830152613aad81613a74565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613b0e602483613032565b9150613b1982613ab4565b604082019050919050565b5f6020820190508181035f830152613b3b81613b02565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613b9c603583613032565b9150613ba782613b42565b604082019050919050565b5f6020820190508181035f830152613bc981613b90565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613c2a603483613032565b9150613c3582613bd0565b604082019050919050565b5f6020820190508181035f830152613c5781613c1e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613cb8602683613032565b9150613cc382613c5e565b604082019050919050565b5f6020820190508181035f830152613ce581613cac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d46602483613032565b9150613d5182613cec565b604082019050919050565b5f6020820190508181035f830152613d7381613d3a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dd4602283613032565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602583613032565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ef0602383613032565b9150613efb82613e96565b604082019050919050565b5f6020820190508181035f830152613f1d81613ee4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f58601683613032565b9150613f6382613f24565b602082019050919050565b5f6020820190508181035f830152613f8581613f4c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613fe6603583613032565b9150613ff182613f8c565b604082019050919050565b5f6020820190508181035f83015261401381613fda565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61404e601383613032565b91506140598261401a565b602082019050919050565b5f6020820190508181035f83015261407b81614042565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6140dc603683613032565b91506140e782614082565b604082019050919050565b5f6020820190508181035f830152614109816140d0565b9050919050565b5f61411a82613134565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361414c5761414b613640565b5b600182019050919050565b5f61416182613134565b915061416c83613134565b925082820390508181111561418457614183613640565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506141c58161310a565b92915050565b5f602082840312156141e0576141df6130d2565b5b5f6141ed848285016141b7565b91505092915050565b5f819050919050565b5f61421961421461420f846141f6565b6131d8565b613134565b9050919050565b614229816141ff565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614261816130f9565b82525050565b5f6142728383614258565b60208301905092915050565b5f602082019050919050565b5f6142948261422f565b61429e8185614239565b93506142a983614249565b805f5b838110156142d95781516142c08882614267565b97506142cb8361427e565b9250506001810190506142ac565b5085935050505092915050565b5f60a0820190506142f95f83018861324c565b6143066020830187614220565b8181036040830152614318818661428a565b905061432760608301856132ef565b614334608083018461324c565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614398602683613032565b91506143a38261433e565b604082019050919050565b5f6020820190508181035f8301526143c58161438c565b905091905056fea2646970667358221220d2ac64f26781099303d0b121a1235fb6168e184c5241d712ec1192d9074f859464736f6c63430008180033

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

0000000000000000000000002b7d804505c40d229ba3f298cd1fa49767bd8a7b

-----Decoded View---------------
Arg [0] : _wallet (address): 0x2b7d804505C40d229BA3f298Cd1FA49767Bd8a7B

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002b7d804505c40d229ba3f298cd1fa49767bd8a7b


Deployed Bytecode Sourcemap

31384:11398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9055:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11221:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31460:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10174:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34998:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11872:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31563:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10017:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12773:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31518:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31809:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37685:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31963:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31889:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36331:174;;;;;;;;;;;;;:::i;:::-;;10345:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2602:103;;;;;;;;;;;;;:::i;:::-;;37025:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34366:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35541:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31655:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36102:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1951:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35804:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9274:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36517:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13491:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10685:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37446:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31849:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35912:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35279:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31694:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34157:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34495:495;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31929:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10923:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31736:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37236:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2860:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31776:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9055:100;9109:13;9142:5;9135:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9055:100;:::o;11221:169::-;11304:4;11321:39;11330:12;:10;:12::i;:::-;11344:7;11353:6;11321:8;:39::i;:::-;11378:4;11371:11;;11221:169;;;;:::o;31460:51::-;;;:::o;10174:108::-;10235:7;10262:12;;10255:19;;10174:108;:::o;34998:273::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35135:3:::1;35127:4;35122:1;35106:13;:11;:13::i;:::-;:17;;;;:::i;:::-;35105:26;;;;:::i;:::-;35104:34;;;;:::i;:::-;35094:6;:44;;35072:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:5;35247:6;:16;;;;:::i;:::-;35224:20;:39;;;;34998:273:::0;:::o;11872:492::-;12012:4;12029:36;12039:6;12047:9;12058:6;12029:9;:36::i;:::-;12078:24;12105:11;:19;12117:6;12105:19;;;;;;;;;;;;;;;:33;12125:12;:10;:12::i;:::-;12105:33;;;;;;;;;;;;;;;;12078:60;;12177:6;12157:16;:26;;12149:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12264:57;12273:6;12281:12;:10;:12::i;:::-;12314:6;12295:16;:25;12264:8;:57::i;:::-;12352:4;12345:11;;;11872:492;;;;;:::o;31563:53::-;31609:6;31563:53;:::o;10017:92::-;10075:5;10100:1;10093:8;;10017:92;:::o;12773:215::-;12861:4;12878:80;12887:12;:10;:12::i;:::-;12901:7;12947:10;12910:11;:25;12922:12;:10;:12::i;:::-;12910:25;;;;;;;;;;;;;;;:34;12936:7;12910:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12878:8;:80::i;:::-;12976:4;12969:11;;12773:215;;;;:::o;31518:38::-;;;:::o;31809:33::-;;;;;;;;;;;;;:::o;37685:350::-;37809:1;37790:9;;:16;;:20;:58;;;;;37832:9;;:16;;37814:7;;:14;;:34;37790:58;37782:67;;;;;;37862:12;37877:10;37862:25;;37907:6;37902:126;37923:9;;:16;;37919:1;:20;37902:126;;;37963:51;37973:4;37979:9;;37989:1;37979:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38007:5;37993:7;;38001:1;37993:10;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;37963:9;:51::i;:::-;37941:3;;;;;;;37902:126;;;;37769:266;37685:350;;;;:::o;31963:28::-;;;;:::o;31889:31::-;;;;;;;;;;;;;:::o;36331:174::-;36373:12;36418:15;;;;;;;;;;;36410:29;;36461:21;36410:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36396:101;;;;;36362:143;36331:174::o;10345:127::-;10419:7;10446:9;:18;10456:7;10446:18;;;;;;;;;;;;;;;;10439:25;;10345:127;;;:::o;2602:103::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2667:30:::1;2694:1;2667:18;:30::i;:::-;2602:103::o:0;37025:203::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37136:13:::1;37121:12;:28;;;;37184:2;37168:12;;:18;;37160:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37025:203:::0;:::o;34366:121::-;34418:4;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34452:5:::1;34435:14;;:22;;;;;;;;;;;;;;;;;;34475:4;34468:11;;34366:121:::0;:::o;35541:167::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35696:4:::1;35654:31;:39;35686:6;35654:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35541:167:::0;;:::o;31655:30::-;;;;;;;;;;;;;:::o;36102:221::-;36180:15;;;;;;;;;;;36164:31;;:12;:10;:12::i;:::-;:31;;;36156:40;;;;;;36225:24;36243:4;36225:9;:24::i;:::-;36215:6;:34;;:48;;;;;36262:1;36253:6;:10;36215:48;36207:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36291:24;36308:6;36291:16;:24::i;:::-;36102:221;:::o;1951:87::-;1997:7;2024:6;;;;;;;;;;;2017:13;;1951:87;:::o;35804:100::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35889:7:::1;35875:11;;:21;;;;;;;;;;;;;;;;;;35804:100:::0;:::o;9274:104::-;9330:13;9363:7;9356:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9274:104;:::o;36517:304::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36661:13:::1;36653:21;;:4;:21;;::::0;36631:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36772:41;36801:4;36807:5;36772:28;:41::i;:::-;36517:304:::0;;:::o;13491:413::-;13584:4;13601:24;13628:11;:25;13640:12;:10;:12::i;:::-;13628:25;;;;;;;;;;;;;;;:34;13654:7;13628:34;;;;;;;;;;;;;;;;13601:61;;13701:15;13681:16;:35;;13673:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13794:67;13803:12;:10;:12::i;:::-;13817:7;13845:15;13826:16;:34;13794:8;:67::i;:::-;13892:4;13885:11;;;13491:413;;;;:::o;10685:175::-;10771:4;10788:42;10798:12;:10;:12::i;:::-;10812:9;10823:6;10788:9;:42::i;:::-;10848:4;10841:11;;10685:175;;;;:::o;37446:231::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37606:15:::1;;;;;;;;;;;37563:59;;37586:18;37563:59;;;;;;;;;;;;37651:18;37633:15;;:36;;;;;;;;;;;;;;;;;;37446:231:::0;:::o;31849:33::-;;;;;;;;;;;;;:::o;35912:182::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36028:8:::1;35997:19;:28;36017:7;35997:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36068:7;36052:34;;;36077:8;36052:34;;;;;;:::i;:::-;;;;;;;;35912:182:::0;;:::o;35279:254::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35419:3:::1;35411:4;35406:1;35390:13;:11;:13::i;:::-;:17;;;;:::i;:::-;35389:26;;;;:::i;:::-;35388:34;;;;:::i;:::-;35378:6;:44;;35356:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;35519:5;35509:6;:16;;;;:::i;:::-;35497:9;:28;;;;35279:254:::0;:::o;31694:35::-;;;;:::o;34157:201::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34243:10:::1;34228:12;:25;;;;34280:10;34264:13;:26;;;;34317:4;34301:13;;:20;;;;;;;;;;;;;;;;;;34346:4;34332:11;;:18;;;;;;;;;;;;;;;;;;34157:201:::0;:::o;34495:495::-;34603:4;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34682:6:::1;34677:1;34661:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34660:28;;;;:::i;:::-;34647:9;:41;;34625:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;34837:2;34832:1;34816:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34815:24;;;;:::i;:::-;34802:9;:37;;34780:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;34951:9;34930:18;:30;;;;34978:4;34971:11;;34495:495:::0;;;:::o;31929:27::-;;;;:::o;10923:151::-;11012:7;11039:11;:18;11051:5;11039:18;;;;;;;;;;;;;;;:27;11058:7;11039:27;;;;;;;;;;;;;;;;11032:34;;10923:151;;;;:::o;31736:33::-;;;;:::o;37236:202::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37345:13:::1;37329;:29;;;;37394:2;37377:13;;:19;;37369:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37236:202:::0;:::o;2860:201::-;2182:12;:10;:12::i;:::-;2171:23;;:7;:5;:7::i;:::-;:23;;;2163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2969:1:::1;2949:22;;:8;:22;;::::0;2941:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3025:28;3044:8;3025:18;:28::i;:::-;2860:201:::0;:::o;31776:24::-;;;;:::o;697:98::-;750:7;777:10;770:17;;697:98;:::o;17175:380::-;17328:1;17311:19;;:5;:19;;;17303:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17409:1;17390:21;;:7;:21;;;17382:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17493:6;17463:11;:18;17475:5;17463:18;;;;;;;;;;;;;;;:27;17482:7;17463:27;;;;;;;;;;;;;;;:36;;;;17531:7;17515:32;;17524:5;17515:32;;;17540:6;17515:32;;;;;;:::i;:::-;;;;;;;;17175:380;;;:::o;38043:3597::-;38191:1;38175:18;;:4;:18;;;38167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38268:1;38254:16;;:2;:16;;;38246:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:1;38327:6;:11;38323:93;;38355:28;38371:4;38377:2;38381:1;38355:15;:28::i;:::-;38398:7;;38323:93;38428:16;38447:12;38428:31;;38476:14;;;;;;;;;;;38472:1696;;;38537:7;:5;:7::i;:::-;38529:15;;:4;:15;;;;:49;;;;;38571:7;:5;:7::i;:::-;38565:13;;:2;:13;;;;38529:49;:86;;;;;38613:1;38599:16;;:2;:16;;;;38529:86;:128;;;;;38650:6;38636:21;;:2;:21;;;;38529:128;:158;;;;;38679:8;;;;;;;;;;;38678:9;38529:158;38507:1650;;;38729:13;;;;;;;;;;;38724:223;;38801:19;:25;38821:4;38801:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38830:19;:23;38850:2;38830:23;;;;;;;;;;;;;;;;;;;;;;;;;38801:52;38767:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;38724:223;39021:25;:31;39047:4;39021:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39078:31;:35;39110:2;39078:35;;;;;;;;;;;;;;;;;;;;;;;;;39077:36;39021:92;38995:1147;;;39200:20;;39190:6;:30;;39156:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;39408:9;;39391:13;39401:2;39391:9;:13::i;:::-;39382:6;:22;;;;:::i;:::-;:35;;39348:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38995:1147;;;39586:25;:29;39612:2;39586:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39641:31;:37;39673:4;39641:37;;;;;;;;;;;;;;;;;;;;;;;;;39640:38;39586:92;39560:582;;;39765:20;;39755:6;:30;;39721:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;39560:582;;;39922:31;:35;39954:2;39922:35;;;;;;;;;;;;;;;;;;;;;;;;;39917:225;;40042:9;;40025:13;40035:2;40025:9;:13::i;:::-;40016:6;:22;;;;:::i;:::-;:35;;39982:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39917:225;39560:582;38995:1147;38507:1650;38472:1696;40180:28;40211:24;40229:4;40211:9;:24::i;:::-;40180:55;;40248:12;40292:18;;40286:2;40263:20;:25;;;;:::i;:::-;:47;;40248:62;;40341:7;:35;;;;;40365:11;;;;;;;;;;;40341:35;:61;;;;;40394:8;;;;;;;;;;;40393:9;40341:61;:105;;;;;40444:1;40420:11;:21;40432:8;40420:21;;;;;;;;;;;;:25;40341:105;:154;;;;;40464:25;:31;40490:4;40464:31;;;;;;;;;;;;;;;;;;;;;;;;;40463:32;40341:154;:197;;;;;40513:19;:25;40533:4;40513:25;;;;;;;;;;;;;;;;;;;;;;;;;40512:26;40341:197;:238;;;;;40556:19;:23;40576:2;40556:23;;;;;;;;;;;;;;;;;;;;;;;;;40555:24;40341:238;40323:410;;;40617:4;40606:8;;:15;;;;;;;;;;;;;;;;;;40638:10;:8;:10::i;:::-;40667:11;:21;40679:8;40667:21;;;;;;;;;;;;40665:23;;;;;:::i;:::-;;;;;;;;40716:5;40705:8;;:16;;;;;;;;;;;;;;;;;;40323:410;40745:12;40761:8;;;;;;;;;;;40760:9;40745:24;;40871:19;:25;40891:4;40871:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40900:19;:23;40920:2;40900:23;;;;;;;;;;;;;;;;;;;;;;;;;40871:52;40867:100;;;40950:5;40940:15;;40867:100;40979:12;41084:7;41080:507;;;41136:25;:29;41162:2;41136:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41185:1;41169:13;;:17;41136:50;41132:306;;;41214:34;41244:3;41214:25;41225:13;;41214:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41207:41;;41132:306;;;41310:25;:31;41336:4;41310:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41360:1;41345:12;;:16;41310:51;41306:132;;;41389:33;41418:3;41389:24;41400:12;;41389:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41382:40;;41306:132;41132:306;41465:1;41458:4;:8;41454:91;;;41487:42;41503:4;41517;41524;41487:15;:42::i;:::-;41454:91;41571:4;41561:14;;;;;:::i;:::-;;;41080:507;41599:33;41615:4;41621:2;41625:6;41599:15;:33::i;:::-;38156:3484;;;;;38043:3597;;;;:::o;3221:191::-;3295:16;3314:6;;;;;;;;;;;3295:25;;3340:8;3331:6;;:17;;;;;;;;;;;;;;;;;;3395:8;3364:40;;3385:8;3364:40;;;;;;;;;;;;3284:128;3221:191;:::o;41648:589::-;41774:21;41812:1;41798:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41774:40;;41843:4;41825;41830:1;41825:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41869:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41859:4;41864:1;41859:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41904:62;41921:4;41936:15;41954:11;41904:8;:62::i;:::-;42005:15;:66;;;42086:11;42112:1;42156:4;42183;42203:15;42005:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41703:534;41648:589;:::o;36829:188::-;36946:5;36912:25;:31;36938:4;36912:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37003:5;36969:40;;36997:4;36969:40;;;;;;;;;;;;36829:188;;:::o;14394:733::-;14552:1;14534:20;;:6;:20;;;14526:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14636:1;14615:23;;:9;:23;;;14607:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14691:47;14712:6;14720:9;14731:6;14691:20;:47::i;:::-;14751:21;14775:9;:17;14785:6;14775:17;;;;;;;;;;;;;;;;14751:41;;14828:6;14811:13;:23;;14803:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14949:6;14933:13;:22;14913:9;:17;14923:6;14913:17;;;;;;;;;;;;;;;:42;;;;15001:6;14977:9;:20;14987:9;14977:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15042:9;15025:35;;15034:6;15025:35;;;15053:6;15025:35;;;;;;:::i;:::-;;;;;;;;15073:46;15093:6;15101:9;15112:6;15073:19;:46::i;:::-;14515:612;14394:733;;;:::o;42247:530::-;42286:23;42312:24;42330:4;42312:9;:24::i;:::-;42286:50;;42347:12;42395:1;42376:15;:20;42372:59;;42413:7;;;;42372:59;42465:18;;42447:15;:36;42443:105;;;42518:18;;42500:36;;42443:105;42562:26;42591:15;42562:44;;42619:36;42636:18;42619:16;:36::i;:::-;42690:15;;;;;;;;;;;42682:29;;42733:21;42682:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42668:101;;;;;42275:502;;;42247:530;:::o;22595:98::-;22653:7;22684:1;22680;:5;;;;:::i;:::-;22673:12;;22595:98;;;;:::o;22994:::-;23052:7;23083:1;23079;:5;;;;:::i;:::-;23072:12;;22994:98;;;;:::o;18155:125::-;;;;:::o;18884:124::-;;;;:::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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:117::-;6627:1;6624;6617:12;6641:117;6750:1;6747;6740:12;6764:117;6873:1;6870;6863:12;6904:568;6977:8;6987:6;7037:3;7030:4;7022:6;7018:17;7014:27;7004:122;;7045:79;;:::i;:::-;7004:122;7158:6;7145:20;7135:30;;7188:18;7180:6;7177:30;7174:117;;;7210:79;;:::i;:::-;7174:117;7324:4;7316:6;7312:17;7300:29;;7378:3;7370:4;7362:6;7358:17;7348:8;7344:32;7341:41;7338:128;;;7385:79;;:::i;:::-;7338:128;6904:568;;;;;:::o;7495:::-;7568:8;7578:6;7628:3;7621:4;7613:6;7609:17;7605:27;7595:122;;7636:79;;:::i;:::-;7595:122;7749:6;7736:20;7726:30;;7779:18;7771:6;7768:30;7765:117;;;7801:79;;:::i;:::-;7765:117;7915:4;7907:6;7903:17;7891:29;;7969:3;7961:4;7953:6;7949:17;7939:8;7935:32;7932:41;7929:128;;;7976:79;;:::i;:::-;7929:128;7495:568;;;;;:::o;8069:934::-;8191:6;8199;8207;8215;8264:2;8252:9;8243:7;8239:23;8235:32;8232:119;;;8270:79;;:::i;:::-;8232:119;8418:1;8407:9;8403:17;8390:31;8448:18;8440:6;8437:30;8434:117;;;8470:79;;:::i;:::-;8434:117;8583:80;8655:7;8646:6;8635:9;8631:22;8583:80;:::i;:::-;8565:98;;;;8361:312;8740:2;8729:9;8725:18;8712:32;8771:18;8763:6;8760:30;8757:117;;;8793:79;;:::i;:::-;8757:117;8906:80;8978:7;8969:6;8958:9;8954:22;8906:80;:::i;:::-;8888:98;;;;8683:313;8069:934;;;;;;;:::o;9009:329::-;9068:6;9117:2;9105:9;9096:7;9092:23;9088:32;9085:119;;;9123:79;;:::i;:::-;9085:119;9243:1;9268:53;9313:7;9304:6;9293:9;9289:22;9268:53;:::i;:::-;9258:63;;9214:117;9009:329;;;;:::o;9344:116::-;9414:21;9429:5;9414:21;:::i;:::-;9407:5;9404:32;9394:60;;9450:1;9447;9440:12;9394:60;9344:116;:::o;9466:133::-;9509:5;9547:6;9534:20;9525:29;;9563:30;9587:5;9563:30;:::i;:::-;9466:133;;;;:::o;9605:468::-;9670:6;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9853:1;9878:53;9923:7;9914:6;9903:9;9899:22;9878:53;:::i;:::-;9868:63;;9824:117;9980:2;10006:50;10048:7;10039:6;10028:9;10024:22;10006:50;:::i;:::-;9996:60;;9951:115;9605:468;;;;;:::o;10079:323::-;10135:6;10184:2;10172:9;10163:7;10159:23;10155:32;10152:119;;;10190:79;;:::i;:::-;10152:119;10310:1;10335:50;10377:7;10368:6;10357:9;10353:22;10335:50;:::i;:::-;10325:60;;10281:114;10079:323;;;;:::o;10408:474::-;10476:6;10484;10533:2;10521:9;10512:7;10508:23;10504:32;10501:119;;;10539:79;;:::i;:::-;10501:119;10659:1;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;:::i;:::-;10674:63;;10630:117;10786:2;10812:53;10857:7;10848:6;10837:9;10833:22;10812:53;:::i;:::-;10802:63;;10757:118;10408:474;;;;;:::o;10888:180::-;10936:77;10933:1;10926:88;11033:4;11030:1;11023:15;11057:4;11054:1;11047:15;11074:320;11118:6;11155:1;11149:4;11145:12;11135:22;;11202:1;11196:4;11192:12;11223:18;11213:81;;11279:4;11271:6;11267:17;11257:27;;11213:81;11341:2;11333:6;11330:14;11310:18;11307:38;11304:84;;11360:18;;:::i;:::-;11304:84;11125:269;11074:320;;;:::o;11400:182::-;11540:34;11536:1;11528:6;11524:14;11517:58;11400:182;:::o;11588:366::-;11730:3;11751:67;11815:2;11810:3;11751:67;:::i;:::-;11744:74;;11827:93;11916:3;11827:93;:::i;:::-;11945:2;11940:3;11936:12;11929:19;;11588:366;;;:::o;11960:419::-;12126:4;12164:2;12153:9;12149:18;12141:26;;12213:9;12207:4;12203:20;12199:1;12188:9;12184:17;12177:47;12241:131;12367:4;12241:131;:::i;:::-;12233:139;;11960:419;;;:::o;12385:180::-;12433:77;12430:1;12423:88;12530:4;12527:1;12520:15;12554:4;12551:1;12544:15;12571:410;12611:7;12634:20;12652:1;12634:20;:::i;:::-;12629:25;;12668:20;12686:1;12668:20;:::i;:::-;12663:25;;12723:1;12720;12716:9;12745:30;12763:11;12745:30;:::i;:::-;12734:41;;12924:1;12915:7;12911:15;12908:1;12905:22;12885:1;12878:9;12858:83;12835:139;;12954:18;;:::i;:::-;12835:139;12619:362;12571:410;;;;:::o;12987:180::-;13035:77;13032:1;13025:88;13132:4;13129:1;13122:15;13156:4;13153:1;13146:15;13173:185;13213:1;13230:20;13248:1;13230:20;:::i;:::-;13225:25;;13264:20;13282:1;13264:20;:::i;:::-;13259:25;;13303:1;13293:35;;13308:18;;:::i;:::-;13293:35;13350:1;13347;13343:9;13338:14;;13173:185;;;;:::o;13364:234::-;13504:34;13500:1;13492:6;13488:14;13481:58;13573:17;13568:2;13560:6;13556:15;13549:42;13364:234;:::o;13604:366::-;13746:3;13767:67;13831:2;13826:3;13767:67;:::i;:::-;13760:74;;13843:93;13932:3;13843:93;:::i;:::-;13961:2;13956:3;13952:12;13945:19;;13604:366;;;:::o;13976:419::-;14142:4;14180:2;14169:9;14165:18;14157:26;;14229:9;14223:4;14219:20;14215:1;14204:9;14200:17;14193:47;14257:131;14383:4;14257:131;:::i;:::-;14249:139;;13976:419;;;:::o;14401:227::-;14541:34;14537:1;14529:6;14525:14;14518:58;14610:10;14605:2;14597:6;14593:15;14586:35;14401:227;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:419::-;15172:4;15210:2;15199:9;15195:18;15187:26;;15259:9;15253:4;15249:20;15245:1;15234:9;15230:17;15223:47;15287:131;15413:4;15287:131;:::i;:::-;15279:139;;15006:419;;;:::o;15431:191::-;15471:3;15490:20;15508:1;15490:20;:::i;:::-;15485:25;;15524:20;15542:1;15524:20;:::i;:::-;15519:25;;15567:1;15564;15560:9;15553:16;;15588:3;15585:1;15582:10;15579:36;;;15595:18;;:::i;:::-;15579:36;15431:191;;;;:::o;15628:180::-;15676:77;15673:1;15666:88;15773:4;15770:1;15763:15;15797:4;15794:1;15787:15;15814:147;15915:11;15952:3;15937:18;;15814:147;;;;:::o;15967:114::-;;:::o;16087:398::-;16246:3;16267:83;16348:1;16343:3;16267:83;:::i;:::-;16260:90;;16359:93;16448:3;16359:93;:::i;:::-;16477:1;16472:3;16468:11;16461:18;;16087:398;;;:::o;16491:379::-;16675:3;16697:147;16840:3;16697:147;:::i;:::-;16690:154;;16861:3;16854:10;;16491:379;;;:::o;16876:179::-;17016:31;17012:1;17004:6;17000:14;16993:55;16876:179;:::o;17061:366::-;17203:3;17224:67;17288:2;17283:3;17224:67;:::i;:::-;17217:74;;17300:93;17389:3;17300:93;:::i;:::-;17418:2;17413:3;17409:12;17402:19;;17061:366;;;:::o;17433:419::-;17599:4;17637:2;17626:9;17622:18;17614:26;;17686:9;17680:4;17676:20;17672:1;17661:9;17657:17;17650:47;17714:131;17840:4;17714:131;:::i;:::-;17706:139;;17433:419;;;:::o;17858:162::-;17998:14;17994:1;17986:6;17982:14;17975:38;17858:162;:::o;18026:366::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:419::-;18564:4;18602:2;18591:9;18587:18;18579:26;;18651:9;18645:4;18641:20;18637:1;18626:9;18622:17;18615:47;18679:131;18805:4;18679:131;:::i;:::-;18671:139;;18398:419;;;:::o;18823:244::-;18963:34;18959:1;18951:6;18947:14;18940:58;19032:27;19027:2;19019:6;19015:15;19008:52;18823:244;:::o;19073:366::-;19215:3;19236:67;19300:2;19295:3;19236:67;:::i;:::-;19229:74;;19312:93;19401:3;19312:93;:::i;:::-;19430:2;19425:3;19421:12;19414:19;;19073:366;;;:::o;19445:419::-;19611:4;19649:2;19638:9;19634:18;19626:26;;19698:9;19692:4;19688:20;19684:1;19673:9;19669:17;19662:47;19726:131;19852:4;19726:131;:::i;:::-;19718:139;;19445:419;;;:::o;19870:224::-;20010:34;20006:1;19998:6;19994:14;19987:58;20079:7;20074:2;20066:6;20062:15;20055:32;19870:224;:::o;20100:366::-;20242:3;20263:67;20327:2;20322:3;20263:67;:::i;:::-;20256:74;;20339:93;20428:3;20339:93;:::i;:::-;20457:2;20452:3;20448:12;20441:19;;20100:366;;;:::o;20472:419::-;20638:4;20676:2;20665:9;20661:18;20653:26;;20725:9;20719:4;20715:20;20711:1;20700:9;20696:17;20689:47;20753:131;20879:4;20753:131;:::i;:::-;20745:139;;20472:419;;;:::o;20897:223::-;21037:34;21033:1;21025:6;21021:14;21014:58;21106:6;21101:2;21093:6;21089:15;21082:31;20897:223;:::o;21126:366::-;21268:3;21289:67;21353:2;21348:3;21289:67;:::i;:::-;21282:74;;21365:93;21454:3;21365:93;:::i;:::-;21483:2;21478:3;21474:12;21467:19;;21126:366;;;:::o;21498:419::-;21664:4;21702:2;21691:9;21687:18;21679:26;;21751:9;21745:4;21741:20;21737:1;21726:9;21722:17;21715:47;21779:131;21905:4;21779:131;:::i;:::-;21771:139;;21498:419;;;:::o;21923:240::-;22063:34;22059:1;22051:6;22047:14;22040:58;22132:23;22127:2;22119:6;22115:15;22108:48;21923:240;:::o;22169:366::-;22311:3;22332:67;22396:2;22391:3;22332:67;:::i;:::-;22325:74;;22408:93;22497:3;22408:93;:::i;:::-;22526:2;22521:3;22517:12;22510:19;;22169:366;;;:::o;22541:419::-;22707:4;22745:2;22734:9;22730:18;22722:26;;22794:9;22788:4;22784:20;22780:1;22769:9;22765:17;22758:47;22822:131;22948:4;22822:131;:::i;:::-;22814:139;;22541:419;;;:::o;22966:239::-;23106:34;23102:1;23094:6;23090:14;23083:58;23175:22;23170:2;23162:6;23158:15;23151:47;22966:239;:::o;23211:366::-;23353:3;23374:67;23438:2;23433:3;23374:67;:::i;:::-;23367:74;;23450:93;23539:3;23450:93;:::i;:::-;23568:2;23563:3;23559:12;23552:19;;23211:366;;;:::o;23583:419::-;23749:4;23787:2;23776:9;23772:18;23764:26;;23836:9;23830:4;23826:20;23822:1;23811:9;23807:17;23800:47;23864:131;23990:4;23864:131;:::i;:::-;23856:139;;23583:419;;;:::o;24008:225::-;24148:34;24144:1;24136:6;24132:14;24125:58;24217:8;24212:2;24204:6;24200:15;24193:33;24008:225;:::o;24239:366::-;24381:3;24402:67;24466:2;24461:3;24402:67;:::i;:::-;24395:74;;24478:93;24567:3;24478:93;:::i;:::-;24596:2;24591:3;24587:12;24580:19;;24239:366;;;:::o;24611:419::-;24777:4;24815:2;24804:9;24800:18;24792:26;;24864:9;24858:4;24854:20;24850:1;24839:9;24835:17;24828:47;24892:131;25018:4;24892:131;:::i;:::-;24884:139;;24611:419;;;:::o;25036:223::-;25176:34;25172:1;25164:6;25160:14;25153:58;25245:6;25240:2;25232:6;25228:15;25221:31;25036:223;:::o;25265:366::-;25407:3;25428:67;25492:2;25487:3;25428:67;:::i;:::-;25421:74;;25504:93;25593:3;25504:93;:::i;:::-;25622:2;25617:3;25613:12;25606:19;;25265:366;;;:::o;25637:419::-;25803:4;25841:2;25830:9;25826:18;25818:26;;25890:9;25884:4;25880:20;25876:1;25865:9;25861:17;25854:47;25918:131;26044:4;25918:131;:::i;:::-;25910:139;;25637:419;;;:::o;26062:221::-;26202:34;26198:1;26190:6;26186:14;26179:58;26271:4;26266:2;26258:6;26254:15;26247:29;26062:221;:::o;26289:366::-;26431:3;26452:67;26516:2;26511:3;26452:67;:::i;:::-;26445:74;;26528:93;26617:3;26528:93;:::i;:::-;26646:2;26641:3;26637:12;26630:19;;26289:366;;;:::o;26661:419::-;26827:4;26865:2;26854:9;26850:18;26842:26;;26914:9;26908:4;26904:20;26900:1;26889:9;26885:17;26878:47;26942:131;27068:4;26942:131;:::i;:::-;26934:139;;26661:419;;;:::o;27086:224::-;27226:34;27222:1;27214:6;27210:14;27203:58;27295:7;27290:2;27282:6;27278:15;27271:32;27086:224;:::o;27316:366::-;27458:3;27479:67;27543:2;27538:3;27479:67;:::i;:::-;27472:74;;27555:93;27644:3;27555:93;:::i;:::-;27673:2;27668:3;27664:12;27657:19;;27316:366;;;:::o;27688:419::-;27854:4;27892:2;27881:9;27877:18;27869:26;;27941:9;27935:4;27931:20;27927:1;27916:9;27912:17;27905:47;27969:131;28095:4;27969:131;:::i;:::-;27961:139;;27688:419;;;:::o;28113:222::-;28253:34;28249:1;28241:6;28237:14;28230:58;28322:5;28317:2;28309:6;28305:15;28298:30;28113:222;:::o;28341:366::-;28483:3;28504:67;28568:2;28563:3;28504:67;:::i;:::-;28497:74;;28580:93;28669:3;28580:93;:::i;:::-;28698:2;28693:3;28689:12;28682:19;;28341:366;;;:::o;28713:419::-;28879:4;28917:2;28906:9;28902:18;28894:26;;28966:9;28960:4;28956:20;28952:1;28941:9;28937:17;28930:47;28994:131;29120:4;28994:131;:::i;:::-;28986:139;;28713:419;;;:::o;29138:172::-;29278:24;29274:1;29266:6;29262:14;29255:48;29138:172;:::o;29316:366::-;29458:3;29479:67;29543:2;29538:3;29479:67;:::i;:::-;29472:74;;29555:93;29644:3;29555:93;:::i;:::-;29673:2;29668:3;29664:12;29657:19;;29316:366;;;:::o;29688:419::-;29854:4;29892:2;29881:9;29877:18;29869:26;;29941:9;29935:4;29931:20;29927:1;29916:9;29912:17;29905:47;29969:131;30095:4;29969:131;:::i;:::-;29961:139;;29688:419;;;:::o;30113:240::-;30253:34;30249:1;30241:6;30237:14;30230:58;30322:23;30317:2;30309:6;30305:15;30298:48;30113:240;:::o;30359:366::-;30501:3;30522:67;30586:2;30581:3;30522:67;:::i;:::-;30515:74;;30598:93;30687:3;30598:93;:::i;:::-;30716:2;30711:3;30707:12;30700:19;;30359:366;;;:::o;30731:419::-;30897:4;30935:2;30924:9;30920:18;30912:26;;30984:9;30978:4;30974:20;30970:1;30959:9;30955:17;30948:47;31012:131;31138:4;31012:131;:::i;:::-;31004:139;;30731:419;;;:::o;31156:169::-;31296:21;31292:1;31284:6;31280:14;31273:45;31156:169;:::o;31331:366::-;31473:3;31494:67;31558:2;31553:3;31494:67;:::i;:::-;31487:74;;31570:93;31659:3;31570:93;:::i;:::-;31688:2;31683:3;31679:12;31672:19;;31331:366;;;:::o;31703:419::-;31869:4;31907:2;31896:9;31892:18;31884:26;;31956:9;31950:4;31946:20;31942:1;31931:9;31927:17;31920:47;31984:131;32110:4;31984:131;:::i;:::-;31976:139;;31703:419;;;:::o;32128:241::-;32268:34;32264:1;32256:6;32252:14;32245:58;32337:24;32332:2;32324:6;32320:15;32313:49;32128:241;:::o;32375:366::-;32517:3;32538:67;32602:2;32597:3;32538:67;:::i;:::-;32531:74;;32614:93;32703:3;32614:93;:::i;:::-;32732:2;32727:3;32723:12;32716:19;;32375:366;;;:::o;32747:419::-;32913:4;32951:2;32940:9;32936:18;32928:26;;33000:9;32994:4;32990:20;32986:1;32975:9;32971:17;32964:47;33028:131;33154:4;33028:131;:::i;:::-;33020:139;;32747:419;;;:::o;33172:233::-;33211:3;33234:24;33252:5;33234:24;:::i;:::-;33225:33;;33280:66;33273:5;33270:77;33267:103;;33350:18;;:::i;:::-;33267:103;33397:1;33390:5;33386:13;33379:20;;33172:233;;;:::o;33411:194::-;33451:4;33471:20;33489:1;33471:20;:::i;:::-;33466:25;;33505:20;33523:1;33505:20;:::i;:::-;33500:25;;33549:1;33546;33542:9;33534:17;;33573:1;33567:4;33564:11;33561:37;;;33578:18;;:::i;:::-;33561:37;33411:194;;;;:::o;33611:180::-;33659:77;33656:1;33649:88;33756:4;33753:1;33746:15;33780:4;33777:1;33770:15;33797:143;33854:5;33885:6;33879:13;33870:22;;33901:33;33928:5;33901:33;:::i;:::-;33797:143;;;;:::o;33946:351::-;34016:6;34065:2;34053:9;34044:7;34040:23;34036:32;34033:119;;;34071:79;;:::i;:::-;34033:119;34191:1;34216:64;34272:7;34263:6;34252:9;34248:22;34216:64;:::i;:::-;34206:74;;34162:128;33946:351;;;;:::o;34303:85::-;34348:7;34377:5;34366:16;;34303:85;;;:::o;34394:158::-;34452:9;34485:61;34503:42;34512:32;34538:5;34512:32;:::i;:::-;34503:42;:::i;:::-;34485:61;:::i;:::-;34472:74;;34394:158;;;:::o;34558:147::-;34653:45;34692:5;34653:45;:::i;:::-;34648:3;34641:58;34558:147;;:::o;34711:114::-;34778:6;34812:5;34806:12;34796:22;;34711:114;;;:::o;34831:184::-;34930:11;34964:6;34959:3;34952:19;35004:4;34999:3;34995:14;34980:29;;34831:184;;;;:::o;35021:132::-;35088:4;35111:3;35103:11;;35141:4;35136:3;35132:14;35124:22;;35021:132;;;:::o;35159:108::-;35236:24;35254:5;35236:24;:::i;:::-;35231:3;35224:37;35159:108;;:::o;35273:179::-;35342:10;35363:46;35405:3;35397:6;35363:46;:::i;:::-;35441:4;35436:3;35432:14;35418:28;;35273:179;;;;:::o;35458:113::-;35528:4;35560;35555:3;35551:14;35543:22;;35458:113;;;:::o;35607:732::-;35726:3;35755:54;35803:5;35755:54;:::i;:::-;35825:86;35904:6;35899:3;35825:86;:::i;:::-;35818:93;;35935:56;35985:5;35935:56;:::i;:::-;36014:7;36045:1;36030:284;36055:6;36052:1;36049:13;36030:284;;;36131:6;36125:13;36158:63;36217:3;36202:13;36158:63;:::i;:::-;36151:70;;36244:60;36297:6;36244:60;:::i;:::-;36234:70;;36090:224;36077:1;36074;36070:9;36065:14;;36030:284;;;36034:14;36330:3;36323:10;;35731:608;;;35607:732;;;;:::o;36345:831::-;36608:4;36646:3;36635:9;36631:19;36623:27;;36660:71;36728:1;36717:9;36713:17;36704:6;36660:71;:::i;:::-;36741:80;36817:2;36806:9;36802:18;36793:6;36741:80;:::i;:::-;36868:9;36862:4;36858:20;36853:2;36842:9;36838:18;36831:48;36896:108;36999:4;36990:6;36896:108;:::i;:::-;36888:116;;37014:72;37082:2;37071:9;37067:18;37058:6;37014:72;:::i;:::-;37096:73;37164:3;37153:9;37149:19;37140:6;37096:73;:::i;:::-;36345:831;;;;;;;;:::o;37182:225::-;37322:34;37318:1;37310:6;37306:14;37299:58;37391:8;37386:2;37378:6;37374:15;37367:33;37182:225;:::o;37413:366::-;37555:3;37576:67;37640:2;37635:3;37576:67;:::i;:::-;37569:74;;37652:93;37741:3;37652:93;:::i;:::-;37770:2;37765:3;37761:12;37754:19;;37413:366;;;:::o;37785:419::-;37951:4;37989:2;37978:9;37974:18;37966:26;;38038:9;38032:4;38028:20;38024:1;38013:9;38009:17;38002:47;38066:131;38192:4;38066:131;:::i;:::-;38058:139;;37785:419;;;:::o

Swarm Source

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