ETH Price: $2,267.09 (+2.64%)

Token

Smoke Protocol Token ($SMOKE)
 

Overview

Max Total Supply

100,000,000 $SMOKE

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
250,000 $SMOKE

Value
$0.00
0x675e11a29dfb3c99a83d3700cb3f255e88ec48a0
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:
SmokeToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license
File 1 of 10 : SmokeToken.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";

import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";


contract SmokeToken is Ownable, IERC20Metadata {
    using SafeMath for uint256; // this safemath relies on solidity's built in overflow checks

    uint8 constant _decimals = 18;

    uint256 _totalSupply = 100000000 * (10**_decimals); // 100 mill
    uint256 public _maxTxAmount = (_totalSupply * 2) / 100; // 2 mill default

    uint256 public _walletMax = (_totalSupply * 2) / 100;

    address DEAD_WALLET = 0x000000000000000000000000000000000000dEaD;
    address ZERO_WALLET = 0x0000000000000000000000000000000000000000;

    address routerAddress; // uniswap v2 router

    string constant _name = "Smoke Protocol Token";
    string constant _symbol = "$SMOKE";

    bool public restrictWhales = true;

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

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;

    uint256 public liquidityFee = 30; // 0.3% in bips
    uint256 public sessionsFee = 167; //  1.67% default sessions wallet fee
    uint256 public devFee = 333; //3.33% default developer wallet fee

    uint256 public totalFee = 500;
    uint256 public totalFeeIfSelling = 1000;  //10% in bips

    address private autoLiquidityReceiver;
    address private sessionsWallet;
    address private devWallet;

    IUniswapV2Router02 public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = true;
    bool public blacklistMode = true;
    mapping(address => bool) public isBlacklisted;
    mapping(address => bool) public isInternal;
    mapping(address => bool) internal authorizations;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool checkOn = false;

    // wallet threshold limit, changeable
    uint256 public swapThreshold = _totalSupply / 5000; //20k default

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(
        address _routerAddress,
        address _devWallet,
        address _sessionsWallet
    ) {
        routerAddress = _routerAddress;
        devWallet = _devWallet;
        sessionsWallet = _sessionsWallet;
        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;
        _allowances[address(this)][address(pair)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[DEAD_WALLET] = true;

        authorizations[owner()] = true;
        isInternal[address(this)] = true;
        isInternal[msg.sender] = true;
        isInternal[address(pair)] = true;
        isInternal[address(router)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD_WALLET] = true;

        autoLiquidityReceiver = address(0);

        isFeeExempt[sessionsWallet] = true;
        isFeeExempt[devWallet] = true;
        totalFee = liquidityFee.add(sessionsFee).add(devFee);
        totalFeeIfSelling = totalFeeIfSelling.add(liquidityFee);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

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

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

    function allowance(address holder, address spender) external view override returns (uint256) {
        return _allowances[holder][spender];
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD_WALLET)).sub(balanceOf(ZERO_WALLET));
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount; // approve from holder(msg.sender) to spender to spend this amount
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

    function setBridge(address bridge) public onlyOwner {
        authorizations[bridge] = true;
        isFeeExempt[bridge] = true;
        isTxLimitExempt[bridge] = true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(
                amount,
                "Insufficient Allowance"
            );
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }
        if (!authorizations[sender] && !authorizations[recipient]) {
            require(tradingOpen, "Trading not open yet");
        }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
        if (
            msg.sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            marketingAndLiquidity();
        }
        if (!launched() && recipient == pair) {
            require(_balances[sender] > 0, "Zero balance violated!");
            launch();
        }

        if (checkOn) {
            checkBot(sender, recipient);
        }

        // Blacklist
        if (blacklistMode) {
            require(!isBlacklisted[sender], "Blacklisted");
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        if (!isTxLimitExempt[recipient] && restrictWhales) {
            require(_balances[recipient].add(amount) <= _walletMax, "Max wallet violated!");
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? extractFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }

    function extractFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(10_000); //fee in bips so divide by 10k

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function marketingAndLiquidity() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];

        uint256 sessionF = 3330;
        uint256 devF = 6660;
        uint256 feeEmbersement = sessionF + devF + liquidityFee; // 33.4% + 66.6% + 0.3%

        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(feeEmbersement).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = feeEmbersement.sub(liquidityFee.div(2)); // also half LP fee in ETH 0.15%

        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHSessions = amountETH.mul(sessionF).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devF).div(totalETHFee);
        //gas 30000
        (bool tmpSuccess1, ) = payable(sessionsWallet).call{value: amountETHSessions}("");
        tmpSuccess1 = false;

        (bool tmpSuccess2, ) = payable(devWallet).call{value: amountETHDev}("");
        tmpSuccess2 = false;

        // burning LP tokens to remove a proportional share of the underlying reserves.
        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function checkBot(address sender, address recipient) internal {
        if (
            (isCont(recipient) && !isInternal[recipient] && !isFeeExempt[recipient] && checkOn) ||
            (sender == pair && !isInternal[sender] && msg.sender != tx.origin && checkOn)
        ) {
            isBlacklisted[recipient] = true;
        }
    }

    function isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    // CONTRACT OWNER FUNCTIONS
    function setisInternal(bool _bool, address _address) external onlyOwner {
        isInternal[_address] = _bool;
    }

    function setMode(bool _bool) external onlyOwner {
        checkOn = _bool;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax = newLimit;
    }

    function setTransactionLimit(uint256 newLimit) external onlyOwner {
        _maxTxAmount = newLimit;
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setIsAuthorized(address _address, bool isAuth) external onlyOwner {
        authorizations[_address] = isAuth;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    /**
     * @dev fees should be set in bips aka basis points 1% == 100 bips
     * @param newLiqFee = default 0.3% set as 30
     * @param newsessionsFee = default 1.67% as 167
     * @param newDevFee = default 3.33% set as 333
     * @param extraSellFee = default 5% extra, total 10% in sell
     */
    function setFees(
        uint256 newLiqFee,
        uint256 newsessionsFee,
        uint256 newDevFee,
        uint256 extraSellFee
    ) external onlyOwner {
        liquidityFee = newLiqFee;
        sessionsFee = newsessionsFee;
        devFee = newDevFee;

        totalFee = liquidityFee.add(sessionsFee).add(devFee);
        totalFeeIfSelling = totalFee + extraSellFee;
    }

    function setSwapThreshold(uint256 _newSwapThreshold) public onlyOwner {
        swapThreshold = _newSwapThreshold;
    }

    function enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }

    function rescueToken(address tokenAddress, uint256 tokens)
        public
        onlyOwner
        returns (bool success)
    {
        return IERC20Metadata(tokenAddress).transfer(msg.sender, tokens);
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    /** Getters */

    /** Setters */

    // change the developer wallet that receives developer tax benifits
    function setDeveloperWallet(address _newDevWallet) public onlyOwner {
        devWallet = _newDevWallet;
    }

    // change the marketing wallet that receives marketing tax benifits
    function setSessionsWallet(address _newSessionsWallet) public onlyOwner {
        sessionsWallet = _newSessionsWallet;
    }
}

File 2 of 10 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 3 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

File 4 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 5 of 10 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 6 of 10 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

File 7 of 10 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 10 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 9 of 10 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 10 of 10 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_sessionsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isInternal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sessionsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDevWallet","type":"address"}],"name":"setDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newsessionsFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"},{"internalType":"uint256","name":"extraSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isAuth","type":"bool"}],"name":"setIsAuthorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSessionsWallet","type":"address"}],"name":"setSessionsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062001056565b6305f5e100620000259190620010a7565b600155606460026001546200003b9190620010a7565b62000047919062001137565b600255606460026001546200005d9190620010a7565b62000069919062001137565b60035561dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660146101000a81548160ff021916908315150217905550601e600b5560a7600c5561014d600d556101f4600e556103e8600f556001601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff0219169083151502179055506001601a60016101000a81548160ff0219169083151502179055506000601a60026101000a81548160ff0219169083151502179055506000601a60036101000a81548160ff021916908315150217905550611388600154620001c1919062001137565b601b55348015620001d157600080fd5b5060405162005170380380620051708339818101604052810190620001f79190620011d9565b620002176200020b62000daf60201b60201c565b62000db760201b60201c565b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a657600080fd5b505afa158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062001235565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046557600080fd5b505afa1580156200047a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a0919062001235565b306040518363ffffffff1660e01b8152600401620004c092919062001278565b602060405180830381600087803b158015620004db57600080fd5b505af1158015620004f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000516919062001235565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200081c62000e7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000ccc600d5462000cb8600c54600b5462000ea460201b620019ed1790919060201c565b62000ea460201b620019ed1790919060201c565b600e8190555062000cf0600b54600f5462000ea460201b620019ed1790919060201c565b600f81905550600154600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60015460405162000d9e9190620012b6565b60405180910390a350505062001330565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000818362000eb49190620012d3565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f4a5780860481111562000f225762000f2162000ebc565b5b600185161562000f325780820291505b808102905062000f428562000eeb565b945062000f02565b94509492505050565b60008262000f65576001905062001038565b8162000f75576000905062001038565b816001811462000f8e576002811462000f995762000fcf565b600191505062001038565b60ff84111562000fae5762000fad62000ebc565b5b8360020a91508482111562000fc85762000fc762000ebc565b5b5062001038565b5060208310610133831016604e8410600b8410161715620010095782820a90508381111562001003576200100262000ebc565b5b62001038565b62001018848484600162000ef8565b9250905081840481111562001032576200103162000ebc565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062001063826200103f565b9150620010708362001049565b92506200109f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f53565b905092915050565b6000620010b4826200103f565b9150620010c1836200103f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010fd57620010fc62000ebc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001144826200103f565b915062001151836200103f565b92508262001164576200116362001108565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011a18262001174565b9050919050565b620011b38162001194565b8114620011bf57600080fd5b50565b600081519050620011d381620011a8565b92915050565b600080600060608486031215620011f557620011f46200116f565b5b60006200120586828701620011c2565b93505060206200121886828701620011c2565b92505060406200122b86828701620011c2565b9150509250925092565b6000602082840312156200124e576200124d6200116f565b5b60006200125e84828501620011c2565b91505092915050565b620012728162001194565b82525050565b60006040820190506200128f600083018562001267565b6200129e602083018462001267565b9392505050565b620012b0816200103f565b82525050565b6000602082019050620012cd6000830184620012a5565b92915050565b6000620012e0826200103f565b9150620012ed836200103f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001325576200132462000ebc565b5b828201905092915050565b613e3080620013406000396000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063dd62ed3e11610095578063f84ba65d1161006f578063f84ba65d14610b9d578063f887ea4014610bc6578063fe575a8714610bf1578063ffb54a9914610c2e5761030a565b8063dd62ed3e14610b0e578063f1d5f51714610b4b578063f2fde38b14610b745761030a565b8063a8aa1b31146109fc578063a9059cbb14610a27578063bf56b37114610a64578063c49b9a8014610a8f578063ca987b0e14610ab8578063da00097d14610ae35761030a565b80638da5cb5b116101495780638f16c41c116101235780638f16c41c1461094057806395d89b411461097d57806398118cb4146109a85780639d0014b1146109d35761030a565b80638da5cb5b146108c35780638dd14802146108ee5780638e2eee84146109175761030a565b8063715018a6146107c55780637d1db4a5146107dc578063807c2d9c14610807578063896648c1146108325780638b42507f1461085d5780638c33c9e41461089a5761030a565b806344de2e4c1161024f57806364bfa54611610208578063684858d4116101e2578063684858d41461070d5780636cd56878146107365780636fcba3771461075f57806370a08231146107885761030a565b806364bfa54614610690578063658d4b7f146106b95780636827e764146106e25761030a565b806344de2e4c146105825780634a74bb02146105ad578063571ac8b0146105d85780635d23273f146106155780635def85e41461063e5780635e562f3b146106675761030a565b80631df4ccfc116102bc578063313ce56711610296578063313ce567146104b257806333f3d628146104dd5780633c9d84191461051a5780633f4218e0146105455761030a565b80631df4ccfc1461041f57806323b872dd1461044a5780632b112e49146104875761030a565b80630445b6671461030f57806306fdde031461033a578063095ea7b3146103655780630d295980146103a257806318160ddd146103cb5780631da1db5e146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c59565b6040516103319190612fe1565b60405180910390f35b34801561034657600080fd5b5061034f610c5f565b60405161035c9190613095565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061314b565b610c9c565b60405161039991906131a6565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906131ed565b610d8e565b005b3480156103d757600080fd5b506103e0610db3565b6040516103ed9190612fe1565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061321a565b610dbd565b005b34801561042b57600080fd5b50610434610e2c565b6040516104419190612fe1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613247565b610e32565b60405161047e91906131a6565b60405180910390f35b34801561049357600080fd5b5061049c611032565b6040516104a99190612fe1565b60405180910390f35b3480156104be57600080fd5b506104c76110b4565b6040516104d491906132b6565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061314b565b6110bd565b60405161051191906131a6565b60405180910390f35b34801561052657600080fd5b5061052f61115c565b60405161053c9190612fe1565b60405180910390f35b34801561055157600080fd5b5061056c600480360381019061056791906132d1565b611162565b60405161057991906131a6565b60405180910390f35b34801561058e57600080fd5b50610597611182565b6040516105a491906131a6565b60405180910390f35b3480156105b957600080fd5b506105c2611195565b6040516105cf91906131a6565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906132d1565b6111a8565b60405161060c91906131a6565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906132fe565b6111db565b005b34801561064a57600080fd5b506106656004803603810190610660919061333e565b61123e565b005b34801561067357600080fd5b5061068e600480360381019061068991906131ed565b6112a1565b005b34801561069c57600080fd5b506106b760048036038101906106b2919061321a565b6112c6565b005b3480156106c557600080fd5b506106e060048036038101906106db91906132fe565b6112d8565b005b3480156106ee57600080fd5b506106f761133b565b6040516107049190612fe1565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906132d1565b611341565b005b34801561074257600080fd5b5061075d600480360381019061075891906132d1565b61138d565b005b34801561076b57600080fd5b506107866004803603810190610781919061337e565b6113d9565b005b34801561079457600080fd5b506107af60048036038101906107aa91906132d1565b611441565b6040516107bc9190612fe1565b60405180910390f35b3480156107d157600080fd5b506107da61148a565b005b3480156107e857600080fd5b506107f161149e565b6040516107fe9190612fe1565b60405180910390f35b34801561081357600080fd5b5061081c6114a4565b6040516108299190612fe1565b60405180910390f35b34801561083e57600080fd5b506108476114aa565b60405161085491906131a6565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f91906132d1565b6114bd565b60405161089191906131a6565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906131ed565b6114dd565b005b3480156108cf57600080fd5b506108d8611502565b6040516108e591906133f4565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906132d1565b61152b565b005b34801561092357600080fd5b5061093e60048036038101906109399190613474565b61163e565b005b34801561094c57600080fd5b50610967600480360381019061096291906132d1565b6116e9565b60405161097491906131a6565b60405180910390f35b34801561098957600080fd5b50610992611709565b60405161099f9190613095565b60405180910390f35b3480156109b457600080fd5b506109bd611746565b6040516109ca9190612fe1565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f5919061321a565b61174c565b005b348015610a0857600080fd5b50610a1161175e565b604051610a1e91906133f4565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a49919061314b565b611784565b604051610a5b91906131a6565b60405180910390f35b348015610a7057600080fd5b50610a79611799565b604051610a869190612fe1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab191906131ed565b61179f565b005b348015610ac457600080fd5b50610acd6117fb565b604051610ada9190612fe1565b60405180910390f35b348015610aef57600080fd5b50610af8611801565b604051610b0591906131a6565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b3091906134d4565b611814565b604051610b429190612fe1565b60405180910390f35b348015610b5757600080fd5b50610b726004803603810190610b6d919061321a565b61189b565b005b348015610b8057600080fd5b50610b9b6004803603810190610b9691906132d1565b6118ad565b005b348015610ba957600080fd5b50610bc46004803603810190610bbf91906132fe565b611931565b005b348015610bd257600080fd5b50610bdb611994565b604051610be89190613573565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c1391906132d1565b6119ba565b604051610c2591906131a6565b60405180910390f35b348015610c3a57600080fd5b50610c436119da565b604051610c5091906131a6565b60405180910390f35b601b5481565b60606040518060400160405280601481526020017f536d6f6b652050726f746f636f6c20546f6b656e000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d7c9190612fe1565b60405180910390a36001905092915050565b610d96611a03565b80601660006101000a81548160ff02191690831515021790555050565b6000600154905090565b610dc5611a03565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610df291906135bd565b610dfc9190613646565b9081150290604051600060405180830381858888f19350505050158015610e27573d6000803e3d6000fd5b505050565b600e5481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461101e57610f9d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611029848484611ad6565b90509392505050565b60006110af611062600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611441565b6110a1611090600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611441565b6001546122b790919063ffffffff16565b6122b790919063ffffffff16565b905090565b60006012905090565b60006110c7611a03565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611102929190613677565b602060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906136b5565b905092915050565b600c5481565b60096020528060005260406000206000915054906101000a900460ff1681565b600660149054906101000a900460ff1681565b601a60019054906101000a900460ff1681565b60006111d4827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c9c565b9050919050565b6111e3611a03565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611246611a03565b81601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112a9611a03565b80601660016101000a81548160ff02191690831515021790555050565b6112ce611a03565b8060028190555050565b6112e0611a03565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b611349611a03565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611395611a03565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e1611a03565b83600b8190555082600c8190555081600d81905550611421600d54611413600c54600b546119ed90919063ffffffff16565b6119ed90919063ffffffff16565b600e8190555080600e5461143591906136e2565b600f8190555050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611492611a03565b61149c60006122cd565b565b60025481565b60035481565b601660019054906101000a900460ff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b6114e5611a03565b80601a60036101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611533611a03565b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611646611a03565b60005b838390508110156116e357816017600086868581811061166c5761166b613738565b5b905060200201602081019061168191906132d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806116dc90613767565b9050611649565b50505050565b60186020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600681526020017f24534d4f4b450000000000000000000000000000000000000000000000000000815250905090565b600b5481565b611754611a03565b80601b8190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611791338484611ad6565b905092915050565b60155481565b6117a7611a03565b80601a60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117f091906131a6565b60405180910390a150565b600f5481565b601a60029054906101000a900460ff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118a3611a03565b8060038190555050565b6118b5611a03565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613822565b60405180910390fd5b61192e816122cd565b50565b611939611a03565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b601660009054906101000a900460ff1681565b600081836119fb91906136e2565b905092915050565b611a0b612391565b73ffffffffffffffffffffffffffffffffffffffff16611a29611502565b73ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a769061388e565b60405180910390fd5b565b6000838311158290611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac09190613095565b60405180910390fd5b5082840390509392505050565b6000601a60009054906101000a900460ff1615611aff57611af8848484612399565b90506122b0565b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba35750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf857601660009054906101000a900460ff16611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906138fa565b60405180910390fd5b5b60025482111580611c525750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613966565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cfc5750601a60009054906101000a900460ff16155b8015611d145750601a60019054906101000a900460ff165b8015611d615750601b54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15611d6f57611d6e61256c565b5b611d77612b9d565b158015611dd15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611e61576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906139d2565b60405180910390fd5b611e60612baa565b5b601a60039054906101000a900460ff1615611e8157611e808484612bb3565b5b601660019054906101000a900460ff1615611f2457601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613a3e565b60405180910390fd5b5b611fad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120565750600660149054906101000a900460ff165b156120f2576003546120b083600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b11156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890613aaa565b60405180910390fd5b5b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121985750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121a257826121ae565b6121ad858585612de0565b5b905061220281600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122a29190612fe1565b60405180910390a360019150505b9392505050565b600081836122c59190613aca565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612424826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124b982600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125599190612fe1565b60405180910390a3600190509392505050565b6001601a60006101000a81548160ff0219169083151502179055506000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000610d0290506000611a0490506000600b5482846125ea91906136e2565b6125f491906136e2565b90506000612632600261262484612616600b548a612f8990919063ffffffff16565b612f9f90919063ffffffff16565b612f9f90919063ffffffff16565b9050600061264982876122b790919063ffffffff16565b90506000600267ffffffffffffffff81111561266857612667613afe565b5b6040519080825280602002602001820160405280156126965781602001602082028036833780820191505090505b50905030816000815181106126ae576126ad613738565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561275057600080fd5b505afa158015612764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127889190613b42565b8160018151811061279c5761279b613738565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161283a959493929190613c68565b600060405180830381600087803b15801561285457600080fd5b505af1158015612868573d6000803e3d6000fd5b505050506000479050600061289b61288c6002600b54612f9f90919063ffffffff16565b876122b790919063ffffffff16565b905060006128d960026128cb846128bd600b5488612f8990919063ffffffff16565b612f9f90919063ffffffff16565b612f9f90919063ffffffff16565b90506000612902836128f48c87612f8990919063ffffffff16565b612f9f90919063ffffffff16565b9050600061292b8461291d8c88612f8990919063ffffffff16565b612f9f90919063ffffffff16565b90506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161297590613cf3565b60006040518083038185875af1925050503d80600081146129b2576040519150601f19603f3d011682016040523d82523d6000602084013e6129b7565b606091505b50509050600090506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612a0790613cf3565b60006040518083038185875af1925050503d8060008114612a44576040519150601f19603f3d011682016040523d82523d6000602084013e612a49565b606091505b505090506000905060008a1115612b7257601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308d600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612ae396959493929190613d08565b6060604051808303818588803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b359190613d7e565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858b604051612b69929190613dd1565b60405180910390a15b50505050505050505050505050506000601a60006101000a81548160ff021916908315150217905550565b6000806015541415905090565b43601581905550565b612bbc81612fb5565b8015612c125750601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c685750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c805750601a60039054906101000a900460ff165b80612d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612d2d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d6557503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7d5750601a60039054906101000a900460ff165b5b15612ddc576001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e4057600e54612e44565b600f545b90506000612e6f612710612e618487612f8990919063ffffffff16565b612f9f90919063ffffffff16565b9050612ec381600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f639190612fe1565b60405180910390a3612f7e81856122b790919063ffffffff16565b925050509392505050565b60008183612f9791906135bd565b905092915050565b60008183612fad9190613646565b905092915050565b600080823b905060008111915050919050565b6000819050919050565b612fdb81612fc8565b82525050565b6000602082019050612ff66000830184612fd2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561303657808201518184015260208101905061301b565b83811115613045576000848401525b50505050565b6000601f19601f8301169050919050565b600061306782612ffc565b6130718185613007565b9350613081818560208601613018565b61308a8161304b565b840191505092915050565b600060208201905081810360008301526130af818461305c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ec826130c1565b9050919050565b6130fc816130e1565b811461310757600080fd5b50565b600081359050613119816130f3565b92915050565b61312881612fc8565b811461313357600080fd5b50565b6000813590506131458161311f565b92915050565b60008060408385031215613162576131616130b7565b5b60006131708582860161310a565b925050602061318185828601613136565b9150509250929050565b60008115159050919050565b6131a08161318b565b82525050565b60006020820190506131bb6000830184613197565b92915050565b6131ca8161318b565b81146131d557600080fd5b50565b6000813590506131e7816131c1565b92915050565b600060208284031215613203576132026130b7565b5b6000613211848285016131d8565b91505092915050565b6000602082840312156132305761322f6130b7565b5b600061323e84828501613136565b91505092915050565b6000806000606084860312156132605761325f6130b7565b5b600061326e8682870161310a565b935050602061327f8682870161310a565b925050604061329086828701613136565b9150509250925092565b600060ff82169050919050565b6132b08161329a565b82525050565b60006020820190506132cb60008301846132a7565b92915050565b6000602082840312156132e7576132e66130b7565b5b60006132f58482850161310a565b91505092915050565b60008060408385031215613315576133146130b7565b5b60006133238582860161310a565b9250506020613334858286016131d8565b9150509250929050565b60008060408385031215613355576133546130b7565b5b6000613363858286016131d8565b92505060206133748582860161310a565b9150509250929050565b60008060008060808587031215613398576133976130b7565b5b60006133a687828801613136565b94505060206133b787828801613136565b93505060406133c887828801613136565b92505060606133d987828801613136565b91505092959194509250565b6133ee816130e1565b82525050565b600060208201905061340960008301846133e5565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134345761343361340f565b5b8235905067ffffffffffffffff81111561345157613450613414565b5b60208301915083602082028301111561346d5761346c613419565b5b9250929050565b60008060006040848603121561348d5761348c6130b7565b5b600084013567ffffffffffffffff8111156134ab576134aa6130bc565b5b6134b78682870161341e565b935093505060206134ca868287016131d8565b9150509250925092565b600080604083850312156134eb576134ea6130b7565b5b60006134f98582860161310a565b925050602061350a8582860161310a565b9150509250929050565b6000819050919050565b600061353961353461352f846130c1565b613514565b6130c1565b9050919050565b600061354b8261351e565b9050919050565b600061355d82613540565b9050919050565b61356d81613552565b82525050565b60006020820190506135886000830184613564565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135c882612fc8565b91506135d383612fc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360c5761360b61358e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061365182612fc8565b915061365c83612fc8565b92508261366c5761366b613617565b5b828204905092915050565b600060408201905061368c60008301856133e5565b6136996020830184612fd2565b9392505050565b6000815190506136af816131c1565b92915050565b6000602082840312156136cb576136ca6130b7565b5b60006136d9848285016136a0565b91505092915050565b60006136ed82612fc8565b91506136f883612fc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372d5761372c61358e565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061377282612fc8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137a5576137a461358e565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061380c602683613007565b9150613817826137b0565b604082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613878602083613007565b915061388382613842565b602082019050919050565b600060208201905081810360008301526138a78161386b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006138e4601483613007565b91506138ef826138ae565b602082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613950601183613007565b915061395b8261391a565b602082019050919050565b6000602082019050818103600083015261397f81613943565b9050919050565b7f5a65726f2062616c616e63652076696f6c617465642100000000000000000000600082015250565b60006139bc601683613007565b91506139c782613986565b602082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000613a28600b83613007565b9150613a33826139f2565b602082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f4d61782077616c6c65742076696f6c6174656421000000000000000000000000600082015250565b6000613a94601483613007565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b6000613ad582612fc8565b9150613ae083612fc8565b925082821015613af357613af261358e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613b3c816130f3565b92915050565b600060208284031215613b5857613b576130b7565b5b6000613b6684828501613b2d565b91505092915050565b6000819050919050565b6000613b94613b8f613b8a84613b6f565b613514565b612fc8565b9050919050565b613ba481613b79565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bdf816130e1565b82525050565b6000613bf18383613bd6565b60208301905092915050565b6000602082019050919050565b6000613c1582613baa565b613c1f8185613bb5565b9350613c2a83613bc6565b8060005b83811015613c5b578151613c428882613be5565b9750613c4d83613bfd565b925050600181019050613c2e565b5085935050505092915050565b600060a082019050613c7d6000830188612fd2565b613c8a6020830187613b9b565b8181036040830152613c9c8186613c0a565b9050613cab60608301856133e5565b613cb86080830184612fd2565b9695505050505050565b600081905092915050565b50565b6000613cdd600083613cc2565b9150613ce882613ccd565b600082019050919050565b6000613cfe82613cd0565b9150819050919050565b600060c082019050613d1d60008301896133e5565b613d2a6020830188612fd2565b613d376040830187613b9b565b613d446060830186613b9b565b613d5160808301856133e5565b613d5e60a0830184612fd2565b979650505050505050565b600081519050613d788161311f565b92915050565b600080600060608486031215613d9757613d966130b7565b5b6000613da586828701613d69565b9350506020613db686828701613d69565b9250506040613dc786828701613d69565b9150509250925092565b6000604082019050613de66000830185612fd2565b613df36020830184612fd2565b939250505056fea2646970667358221220b3012675d02c5d1e428e9499cad6d5aa78c3300d4d8cfebf84461923f5622fc764736f6c634300080900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000d77d5df74cf9e0cd5731459efdd5a37cd9f0f30600000000000000000000000068456a48a22961576897a798c7904c34e810b289

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063dd62ed3e11610095578063f84ba65d1161006f578063f84ba65d14610b9d578063f887ea4014610bc6578063fe575a8714610bf1578063ffb54a9914610c2e5761030a565b8063dd62ed3e14610b0e578063f1d5f51714610b4b578063f2fde38b14610b745761030a565b8063a8aa1b31146109fc578063a9059cbb14610a27578063bf56b37114610a64578063c49b9a8014610a8f578063ca987b0e14610ab8578063da00097d14610ae35761030a565b80638da5cb5b116101495780638f16c41c116101235780638f16c41c1461094057806395d89b411461097d57806398118cb4146109a85780639d0014b1146109d35761030a565b80638da5cb5b146108c35780638dd14802146108ee5780638e2eee84146109175761030a565b8063715018a6146107c55780637d1db4a5146107dc578063807c2d9c14610807578063896648c1146108325780638b42507f1461085d5780638c33c9e41461089a5761030a565b806344de2e4c1161024f57806364bfa54611610208578063684858d4116101e2578063684858d41461070d5780636cd56878146107365780636fcba3771461075f57806370a08231146107885761030a565b806364bfa54614610690578063658d4b7f146106b95780636827e764146106e25761030a565b806344de2e4c146105825780634a74bb02146105ad578063571ac8b0146105d85780635d23273f146106155780635def85e41461063e5780635e562f3b146106675761030a565b80631df4ccfc116102bc578063313ce56711610296578063313ce567146104b257806333f3d628146104dd5780633c9d84191461051a5780633f4218e0146105455761030a565b80631df4ccfc1461041f57806323b872dd1461044a5780632b112e49146104875761030a565b80630445b6671461030f57806306fdde031461033a578063095ea7b3146103655780630d295980146103a257806318160ddd146103cb5780631da1db5e146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c59565b6040516103319190612fe1565b60405180910390f35b34801561034657600080fd5b5061034f610c5f565b60405161035c9190613095565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061314b565b610c9c565b60405161039991906131a6565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906131ed565b610d8e565b005b3480156103d757600080fd5b506103e0610db3565b6040516103ed9190612fe1565b60405180910390f35b34801561040257600080fd5b5061041d6004803603810190610418919061321a565b610dbd565b005b34801561042b57600080fd5b50610434610e2c565b6040516104419190612fe1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613247565b610e32565b60405161047e91906131a6565b60405180910390f35b34801561049357600080fd5b5061049c611032565b6040516104a99190612fe1565b60405180910390f35b3480156104be57600080fd5b506104c76110b4565b6040516104d491906132b6565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061314b565b6110bd565b60405161051191906131a6565b60405180910390f35b34801561052657600080fd5b5061052f61115c565b60405161053c9190612fe1565b60405180910390f35b34801561055157600080fd5b5061056c600480360381019061056791906132d1565b611162565b60405161057991906131a6565b60405180910390f35b34801561058e57600080fd5b50610597611182565b6040516105a491906131a6565b60405180910390f35b3480156105b957600080fd5b506105c2611195565b6040516105cf91906131a6565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906132d1565b6111a8565b60405161060c91906131a6565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906132fe565b6111db565b005b34801561064a57600080fd5b506106656004803603810190610660919061333e565b61123e565b005b34801561067357600080fd5b5061068e600480360381019061068991906131ed565b6112a1565b005b34801561069c57600080fd5b506106b760048036038101906106b2919061321a565b6112c6565b005b3480156106c557600080fd5b506106e060048036038101906106db91906132fe565b6112d8565b005b3480156106ee57600080fd5b506106f761133b565b6040516107049190612fe1565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906132d1565b611341565b005b34801561074257600080fd5b5061075d600480360381019061075891906132d1565b61138d565b005b34801561076b57600080fd5b506107866004803603810190610781919061337e565b6113d9565b005b34801561079457600080fd5b506107af60048036038101906107aa91906132d1565b611441565b6040516107bc9190612fe1565b60405180910390f35b3480156107d157600080fd5b506107da61148a565b005b3480156107e857600080fd5b506107f161149e565b6040516107fe9190612fe1565b60405180910390f35b34801561081357600080fd5b5061081c6114a4565b6040516108299190612fe1565b60405180910390f35b34801561083e57600080fd5b506108476114aa565b60405161085491906131a6565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f91906132d1565b6114bd565b60405161089191906131a6565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906131ed565b6114dd565b005b3480156108cf57600080fd5b506108d8611502565b6040516108e591906133f4565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906132d1565b61152b565b005b34801561092357600080fd5b5061093e60048036038101906109399190613474565b61163e565b005b34801561094c57600080fd5b50610967600480360381019061096291906132d1565b6116e9565b60405161097491906131a6565b60405180910390f35b34801561098957600080fd5b50610992611709565b60405161099f9190613095565b60405180910390f35b3480156109b457600080fd5b506109bd611746565b6040516109ca9190612fe1565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f5919061321a565b61174c565b005b348015610a0857600080fd5b50610a1161175e565b604051610a1e91906133f4565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a49919061314b565b611784565b604051610a5b91906131a6565b60405180910390f35b348015610a7057600080fd5b50610a79611799565b604051610a869190612fe1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab191906131ed565b61179f565b005b348015610ac457600080fd5b50610acd6117fb565b604051610ada9190612fe1565b60405180910390f35b348015610aef57600080fd5b50610af8611801565b604051610b0591906131a6565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b3091906134d4565b611814565b604051610b429190612fe1565b60405180910390f35b348015610b5757600080fd5b50610b726004803603810190610b6d919061321a565b61189b565b005b348015610b8057600080fd5b50610b9b6004803603810190610b9691906132d1565b6118ad565b005b348015610ba957600080fd5b50610bc46004803603810190610bbf91906132fe565b611931565b005b348015610bd257600080fd5b50610bdb611994565b604051610be89190613573565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c1391906132d1565b6119ba565b604051610c2591906131a6565b60405180910390f35b348015610c3a57600080fd5b50610c436119da565b604051610c5091906131a6565b60405180910390f35b601b5481565b60606040518060400160405280601481526020017f536d6f6b652050726f746f636f6c20546f6b656e000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d7c9190612fe1565b60405180910390a36001905092915050565b610d96611a03565b80601660006101000a81548160ff02191690831515021790555050565b6000600154905090565b610dc5611a03565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610df291906135bd565b610dfc9190613646565b9081150290604051600060405180830381858888f19350505050158015610e27573d6000803e3d6000fd5b505050565b600e5481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461101e57610f9d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611029848484611ad6565b90509392505050565b60006110af611062600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611441565b6110a1611090600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611441565b6001546122b790919063ffffffff16565b6122b790919063ffffffff16565b905090565b60006012905090565b60006110c7611a03565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611102929190613677565b602060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906136b5565b905092915050565b600c5481565b60096020528060005260406000206000915054906101000a900460ff1681565b600660149054906101000a900460ff1681565b601a60019054906101000a900460ff1681565b60006111d4827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c9c565b9050919050565b6111e3611a03565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611246611a03565b81601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112a9611a03565b80601660016101000a81548160ff02191690831515021790555050565b6112ce611a03565b8060028190555050565b6112e0611a03565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b611349611a03565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611395611a03565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e1611a03565b83600b8190555082600c8190555081600d81905550611421600d54611413600c54600b546119ed90919063ffffffff16565b6119ed90919063ffffffff16565b600e8190555080600e5461143591906136e2565b600f8190555050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611492611a03565b61149c60006122cd565b565b60025481565b60035481565b601660019054906101000a900460ff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b6114e5611a03565b80601a60036101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611533611a03565b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611646611a03565b60005b838390508110156116e357816017600086868581811061166c5761166b613738565b5b905060200201602081019061168191906132d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806116dc90613767565b9050611649565b50505050565b60186020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600681526020017f24534d4f4b450000000000000000000000000000000000000000000000000000815250905090565b600b5481565b611754611a03565b80601b8190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611791338484611ad6565b905092915050565b60155481565b6117a7611a03565b80601a60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516117f091906131a6565b60405180910390a150565b600f5481565b601a60029054906101000a900460ff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118a3611a03565b8060038190555050565b6118b5611a03565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613822565b60405180910390fd5b61192e816122cd565b50565b611939611a03565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b601660009054906101000a900460ff1681565b600081836119fb91906136e2565b905092915050565b611a0b612391565b73ffffffffffffffffffffffffffffffffffffffff16611a29611502565b73ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a769061388e565b60405180910390fd5b565b6000838311158290611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac09190613095565b60405180910390fd5b5082840390509392505050565b6000601a60009054906101000a900460ff1615611aff57611af8848484612399565b90506122b0565b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ba35750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf857601660009054906101000a900460ff16611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906138fa565b60405180910390fd5b5b60025482111580611c525750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890613966565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cfc5750601a60009054906101000a900460ff16155b8015611d145750601a60019054906101000a900460ff165b8015611d615750601b54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15611d6f57611d6e61256c565b5b611d77612b9d565b158015611dd15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611e61576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f906139d2565b60405180910390fd5b611e60612baa565b5b601a60039054906101000a900460ff1615611e8157611e808484612bb3565b5b601660019054906101000a900460ff1615611f2457601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613a3e565b60405180910390fd5b5b611fad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120565750600660149054906101000a900460ff165b156120f2576003546120b083600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b11156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890613aaa565b60405180910390fd5b5b6000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121985750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121a257826121ae565b6121ad858585612de0565b5b905061220281600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122a29190612fe1565b60405180910390a360019150505b9392505050565b600081836122c59190613aca565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000612424826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a819092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124b982600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125599190612fe1565b60405180910390a3600190509392505050565b6001601a60006101000a81548160ff0219169083151502179055506000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000610d0290506000611a0490506000600b5482846125ea91906136e2565b6125f491906136e2565b90506000612632600261262484612616600b548a612f8990919063ffffffff16565b612f9f90919063ffffffff16565b612f9f90919063ffffffff16565b9050600061264982876122b790919063ffffffff16565b90506000600267ffffffffffffffff81111561266857612667613afe565b5b6040519080825280602002602001820160405280156126965781602001602082028036833780820191505090505b50905030816000815181106126ae576126ad613738565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561275057600080fd5b505afa158015612764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127889190613b42565b8160018151811061279c5761279b613738565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161283a959493929190613c68565b600060405180830381600087803b15801561285457600080fd5b505af1158015612868573d6000803e3d6000fd5b505050506000479050600061289b61288c6002600b54612f9f90919063ffffffff16565b876122b790919063ffffffff16565b905060006128d960026128cb846128bd600b5488612f8990919063ffffffff16565b612f9f90919063ffffffff16565b612f9f90919063ffffffff16565b90506000612902836128f48c87612f8990919063ffffffff16565b612f9f90919063ffffffff16565b9050600061292b8461291d8c88612f8990919063ffffffff16565b612f9f90919063ffffffff16565b90506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161297590613cf3565b60006040518083038185875af1925050503d80600081146129b2576040519150601f19603f3d011682016040523d82523d6000602084013e6129b7565b606091505b50509050600090506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612a0790613cf3565b60006040518083038185875af1925050503d8060008114612a44576040519150601f19603f3d011682016040523d82523d6000602084013e612a49565b606091505b505090506000905060008a1115612b7257601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308d600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612ae396959493929190613d08565b6060604051808303818588803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b359190613d7e565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858b604051612b69929190613dd1565b60405180910390a15b50505050505050505050505050506000601a60006101000a81548160ff021916908315150217905550565b6000806015541415905090565b43601581905550565b612bbc81612fb5565b8015612c125750601860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c685750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c805750601a60039054906101000a900460ff165b80612d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612d2d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d6557503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b8015612d7d5750601a60039054906101000a900460ff165b5b15612ddc576001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e4057600e54612e44565b600f545b90506000612e6f612710612e618487612f8990919063ffffffff16565b612f9f90919063ffffffff16565b9050612ec381600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ed90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f639190612fe1565b60405180910390a3612f7e81856122b790919063ffffffff16565b925050509392505050565b60008183612f9791906135bd565b905092915050565b60008183612fad9190613646565b905092915050565b600080823b905060008111915050919050565b6000819050919050565b612fdb81612fc8565b82525050565b6000602082019050612ff66000830184612fd2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561303657808201518184015260208101905061301b565b83811115613045576000848401525b50505050565b6000601f19601f8301169050919050565b600061306782612ffc565b6130718185613007565b9350613081818560208601613018565b61308a8161304b565b840191505092915050565b600060208201905081810360008301526130af818461305c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ec826130c1565b9050919050565b6130fc816130e1565b811461310757600080fd5b50565b600081359050613119816130f3565b92915050565b61312881612fc8565b811461313357600080fd5b50565b6000813590506131458161311f565b92915050565b60008060408385031215613162576131616130b7565b5b60006131708582860161310a565b925050602061318185828601613136565b9150509250929050565b60008115159050919050565b6131a08161318b565b82525050565b60006020820190506131bb6000830184613197565b92915050565b6131ca8161318b565b81146131d557600080fd5b50565b6000813590506131e7816131c1565b92915050565b600060208284031215613203576132026130b7565b5b6000613211848285016131d8565b91505092915050565b6000602082840312156132305761322f6130b7565b5b600061323e84828501613136565b91505092915050565b6000806000606084860312156132605761325f6130b7565b5b600061326e8682870161310a565b935050602061327f8682870161310a565b925050604061329086828701613136565b9150509250925092565b600060ff82169050919050565b6132b08161329a565b82525050565b60006020820190506132cb60008301846132a7565b92915050565b6000602082840312156132e7576132e66130b7565b5b60006132f58482850161310a565b91505092915050565b60008060408385031215613315576133146130b7565b5b60006133238582860161310a565b9250506020613334858286016131d8565b9150509250929050565b60008060408385031215613355576133546130b7565b5b6000613363858286016131d8565b92505060206133748582860161310a565b9150509250929050565b60008060008060808587031215613398576133976130b7565b5b60006133a687828801613136565b94505060206133b787828801613136565b93505060406133c887828801613136565b92505060606133d987828801613136565b91505092959194509250565b6133ee816130e1565b82525050565b600060208201905061340960008301846133e5565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134345761343361340f565b5b8235905067ffffffffffffffff81111561345157613450613414565b5b60208301915083602082028301111561346d5761346c613419565b5b9250929050565b60008060006040848603121561348d5761348c6130b7565b5b600084013567ffffffffffffffff8111156134ab576134aa6130bc565b5b6134b78682870161341e565b935093505060206134ca868287016131d8565b9150509250925092565b600080604083850312156134eb576134ea6130b7565b5b60006134f98582860161310a565b925050602061350a8582860161310a565b9150509250929050565b6000819050919050565b600061353961353461352f846130c1565b613514565b6130c1565b9050919050565b600061354b8261351e565b9050919050565b600061355d82613540565b9050919050565b61356d81613552565b82525050565b60006020820190506135886000830184613564565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135c882612fc8565b91506135d383612fc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360c5761360b61358e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061365182612fc8565b915061365c83612fc8565b92508261366c5761366b613617565b5b828204905092915050565b600060408201905061368c60008301856133e5565b6136996020830184612fd2565b9392505050565b6000815190506136af816131c1565b92915050565b6000602082840312156136cb576136ca6130b7565b5b60006136d9848285016136a0565b91505092915050565b60006136ed82612fc8565b91506136f883612fc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561372d5761372c61358e565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061377282612fc8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137a5576137a461358e565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061380c602683613007565b9150613817826137b0565b604082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613878602083613007565b915061388382613842565b602082019050919050565b600060208201905081810360008301526138a78161386b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006138e4601483613007565b91506138ef826138ae565b602082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613950601183613007565b915061395b8261391a565b602082019050919050565b6000602082019050818103600083015261397f81613943565b9050919050565b7f5a65726f2062616c616e63652076696f6c617465642100000000000000000000600082015250565b60006139bc601683613007565b91506139c782613986565b602082019050919050565b600060208201905081810360008301526139eb816139af565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000613a28600b83613007565b9150613a33826139f2565b602082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f4d61782077616c6c65742076696f6c6174656421000000000000000000000000600082015250565b6000613a94601483613007565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b6000613ad582612fc8565b9150613ae083612fc8565b925082821015613af357613af261358e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613b3c816130f3565b92915050565b600060208284031215613b5857613b576130b7565b5b6000613b6684828501613b2d565b91505092915050565b6000819050919050565b6000613b94613b8f613b8a84613b6f565b613514565b612fc8565b9050919050565b613ba481613b79565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bdf816130e1565b82525050565b6000613bf18383613bd6565b60208301905092915050565b6000602082019050919050565b6000613c1582613baa565b613c1f8185613bb5565b9350613c2a83613bc6565b8060005b83811015613c5b578151613c428882613be5565b9750613c4d83613bfd565b925050600181019050613c2e565b5085935050505092915050565b600060a082019050613c7d6000830188612fd2565b613c8a6020830187613b9b565b8181036040830152613c9c8186613c0a565b9050613cab60608301856133e5565b613cb86080830184612fd2565b9695505050505050565b600081905092915050565b50565b6000613cdd600083613cc2565b9150613ce882613ccd565b600082019050919050565b6000613cfe82613cd0565b9150819050919050565b600060c082019050613d1d60008301896133e5565b613d2a6020830188612fd2565b613d376040830187613b9b565b613d446060830186613b9b565b613d5160808301856133e5565b613d5e60a0830184612fd2565b979650505050505050565b600081519050613d788161311f565b92915050565b600080600060608486031215613d9757613d966130b7565b5b6000613da586828701613d69565b9350506020613db686828701613d69565b9250506040613dc786828701613d69565b9150509250925092565b6000604082019050613de66000830185612fd2565b613df36020830184612fd2565b939250505056fea2646970667358221220b3012675d02c5d1e428e9499cad6d5aa78c3300d4d8cfebf84461923f5622fc764736f6c63430008090033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000d77d5df74cf9e0cd5731459efdd5a37cd9f0f30600000000000000000000000068456a48a22961576897a798c7904c34e810b289

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _devWallet (address): 0xD77d5dF74CF9E0cD5731459EFdd5a37Cd9f0f306
Arg [2] : _sessionsWallet (address): 0x68456a48A22961576897a798C7904c34e810B289

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000d77d5df74cf9e0cd5731459efdd5a37cd9f0f306
Arg [2] : 00000000000000000000000068456a48a22961576897a798c7904c34e810b289


Deployed Bytecode Sourcemap

400:13877:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3938:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11632:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4236:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13639:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1527:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6227:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4616:154;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4138:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13425:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1380:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1223:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1074:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2084:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5061:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11908:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11206:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13110:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11520:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12039:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14151:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13963:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12597:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4342:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;;;;;;;;;;;:::i;:::-;;653:54:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;732:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1865:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1272:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11329:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6047:174:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13213:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1954:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4036:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1326:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12984:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1772:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5526:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1798:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11734:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1562:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2130:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4465:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11415:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2081:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12162:125:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1734:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1903:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1829:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2250:50;;;;:::o;3938:92::-;3986:13;4018:5;;;;;;;;;;;;;;;;;4011:12;;3938:92;:::o;4776:279::-;4851:4;4902:6;4867:11;:23;4879:10;4867:23;;;;;;;;;;;;;;;:32;4891:7;4867:32;;;;;;;;;;;;;;;:41;;;;5011:7;4990:37;;4999:10;4990:37;;;5020:6;4990:37;;;;;;:::i;:::-;;;;;;;;5044:4;5037:11;;4776:279;;;;:::o;11632:96::-;1094:13:0;:11;:13::i;:::-;11712:9:9::1;11698:11;;:23;;;;;;;;;;;;;;;;;;11632:96:::0;:::o;4236:100::-;4291:7;4317:12;;4310:19;;4236:100;:::o;13639:206::-;1094:13:0;:11;:13::i;:::-;13721:17:9::1;13741:21;13721:41;;13780:10;13772:28;;:66;13834:3;13814:16;13802:9;:28;;;;:::i;:::-;13801:36;;;;:::i;:::-;13772:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13711:134;13639:206:::0;:::o;1527:29::-;;;;:::o;6227:441::-;6357:4;6412:17;6377:11;:19;6389:6;6377:19;;;;;;;;;;;;;;;:31;6397:10;6377:31;;;;;;;;;;;;;;;;:52;6373:232;;6479:115;6532:6;6479:115;;;;;;;;;;;;;;;;;:11;:19;6491:6;6479:19;;;;;;;;;;;;;;;:31;6499:10;6479:31;;;;;;;;;;;;;;;;:35;;:115;;;;;:::i;:::-;6445:11;:19;6457:6;6445:19;;;;;;;;;;;;;;;:31;6465:10;6445:31;;;;;;;;;;;;;;;:149;;;;6373:232;6621:40;6635:6;6643:9;6654:6;6621:13;:40::i;:::-;6614:47;;6227:441;;;;;:::o;4616:154::-;4669:7;4695:68;4740:22;4750:11;;;;;;;;;;;4740:9;:22::i;:::-;4695:40;4712:22;4722:11;;;;;;;;;;;4712:9;:22::i;:::-;4695:12;;:16;;:40;;;;:::i;:::-;:44;;:68;;;;:::i;:::-;4688:75;;4616:154;:::o;4138:92::-;4190:5;576:2;4207:16;;4138:92;:::o;13425:208::-;13534:12;1094:13:0;:11;:13::i;:::-;13584:12:9::1;13569:37;;;13607:10;13619:6;13569:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13562:64;;13425:208:::0;;;;:::o;1380:32::-;;;;:::o;1223:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;1074:33::-;;;;;;;;;;;;;:::o;2084:40::-;;;;;;;;;;;;;:::o;5061:120::-;5116:4;5139:35;5147:7;5156:17;5139:7;:35::i;:::-;5132:42;;5061:120;;;:::o;11908:125::-;1094:13:0;:11;:13::i;:::-;12020:6:9::1;11993:14;:24;12008:8;11993:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;11908:125:::0;;:::o;11206:117::-;1094:13:0;:11;:13::i;:::-;11311:5:9::1;11288:10;:20;11299:8;11288:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;11206:117:::0;;:::o;13110:97::-;1094:13:0;:11;:13::i;:::-;13193:7:9::1;13177:13;;:23;;;;;;;;;;;;;;;;;;13110:97:::0;:::o;11520:106::-;1094:13:0;:11;:13::i;:::-;11611:8:9::1;11596:12;:23;;;;11520:106:::0;:::o;12039:117::-;1094:13:0;:11;:13::i;:::-;12143:6:9::1;12121:11;:19;12133:6;12121:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;12039:117:::0;;:::o;1456:27::-;;;;:::o;14151:124::-;1094:13:0;:11;:13::i;:::-;14250:18:9::1;14233:14;;:35;;;;;;;;;;;;;;;;;;14151:124:::0;:::o;13963:110::-;1094:13:0;:11;:13::i;:::-;14053::9::1;14041:9;;:25;;;;;;;;;;;;;;;;;;13963:110:::0;:::o;12597:381::-;1094:13:0;:11;:13::i;:::-;12780:9:9::1;12765:12;:24;;;;12813:14;12799:11;:28;;;;12846:9;12837:6;:18;;;;12877:41;12911:6;;12877:29;12894:11;;12877:12;;:16;;:29;;;;:::i;:::-;:33;;:41;;;;:::i;:::-;12866:8;:52;;;;12959:12;12948:8;;:23;;;;:::i;:::-;12928:17;:43;;;;12597:381:::0;;;;:::o;4342:117::-;4408:7;4434:9;:18;4444:7;4434:18;;;;;;;;;;;;;;;;4427:25;;4342:117;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;653:54:9:-;;;;:::o;732:52::-;;;;:::o;1865:32::-;;;;;;;;;;;;;:::o;1272:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;11329:80::-;1094:13:0;:11;:13::i;:::-;11397:5:9::1;11387:7;;:15;;;;;;;;;;;;;;;;;;11329:80:::0;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;6047:174:9:-;1094:13:0;:11;:13::i;:::-;6134:4:9::1;6109:14;:22;6124:6;6109:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;6170:4;6148:11;:19;6160:6;6148:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;6210:4;6184:15;:23;6200:6;6184:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6047:174:::0;:::o;13213:206::-;1094:13:0;:11;:13::i;:::-;13314:9:9::1;13309:104;13329:9;;:16;;13325:1;:20;13309:104;;;13396:6;13366:13;:27;13380:9;;13390:1;13380:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13366:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13347:3;;;;:::i;:::-;;;13309:104;;;;13213:206:::0;;;:::o;1954:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;4036:96::-;4086:13;4118:7;;;;;;;;;;;;;;;;;4111:14;;4036:96;:::o;1326:32::-;;;;:::o;12984:120::-;1094:13:0;:11;:13::i;:::-;13080:17:9::1;13064:13;:33;;;;12984:120:::0;:::o;1772:19::-;;;;;;;;;;;;;:::o;5526:154::-;5606:4;5629:44;5643:10;5655:9;5666:6;5629:13;:44::i;:::-;5622:51;;5526:154;;;;:::o;1798:25::-;;;;:::o;11734:168::-;1094:13:0;:11;:13::i;:::-;11834:8:9::1;11810:21;;:32;;;;;;;;;;;;;;;;;;11857:38;11886:8;11857:38;;;;;;:::i;:::-;;;;;;;;11734:168:::0;:::o;1562:39::-;;;;:::o;2130:45::-;;;;;;;;;;;;;:::o;4465:145::-;4549:7;4575:11;:19;4587:6;4575:19;;;;;;;;;;;;;;;:28;4595:7;4575:28;;;;;;;;;;;;;;;;4568:35;;4465:145;;;;:::o;11415:99::-;1094:13:0;:11;:13::i;:::-;11499:8:9::1;11486:10;:21;;;;11415:99:::0;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;12162:125:9:-;1094:13:0;:11;:13::i;:::-;12274:6:9::1;12248:15;:23;12264:6;12248:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;12162:125:::0;;:::o;1734:32::-;;;;;;;;;;;;;:::o;1903:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;1829:30::-;;;;;;;;;;;;;:::o;2755:96:5:-;2813:7;2843:1;2839;:5;;;;:::i;:::-;2832:12;;2755:96;;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;4959:231:5:-;5075:7;5131:1;5126;:6;;5134:12;5118:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5172:1;5168;:5;5161:12;;4959:231;;;;;:::o;6674:1617:9:-;6796:4;6816:16;;;;;;;;;;;6812:95;;;6855:41;6870:6;6878:9;6889:6;6855:14;:41::i;:::-;6848:48;;;;6812:95;6921:14;:22;6936:6;6921:22;;;;;;;;;;;;;;;;;;;;;;;;;6920:23;:53;;;;;6948:14;:25;6963:9;6948:25;;;;;;;;;;;;;;;;;;;;;;;;;6947:26;6920:53;6916:128;;;6997:11;;;;;;;;;;;6989:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;6916:128;7072:12;;7062:6;:22;;:49;;;;7088:15;:23;7104:6;7088:23;;;;;;;;;;;;;;;;;;;;;;;;;7062:49;7054:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7174:4;;;;;;;;;;;7160:18;;:10;:18;;;;:51;;;;;7195:16;;;;;;;;;;;7194:17;7160:51;:88;;;;;7227:21;;;;;;;;;;;7160:88;:145;;;;;7292:13;;7264:9;:24;7282:4;7264:24;;;;;;;;;;;;;;;;:41;;7160:145;7143:221;;;7330:23;:21;:23::i;:::-;7143:221;7378:10;:8;:10::i;:::-;7377:11;:32;;;;;7405:4;;;;;;;;;;;7392:17;;:9;:17;;;7377:32;7373:141;;;7453:1;7433:9;:17;7443:6;7433:17;;;;;;;;;;;;;;;;:21;7425:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7495:8;:6;:8::i;:::-;7373:141;7528:7;;;;;;;;;;;7524:65;;;7551:27;7560:6;7568:9;7551:8;:27::i;:::-;7524:65;7624:13;;;;;;;;;;;7620:90;;;7662:13;:21;7676:6;7662:21;;;;;;;;;;;;;;;;;;;;;;;;;7661:22;7653:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7620:90;7766:53;7788:6;7766:53;;;;;;;;;;;;;;;;;:9;:17;7776:6;7766:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;7746:9;:17;7756:6;7746:17;;;;;;;;;;;;;;;:73;;;;7835:15;:26;7851:9;7835:26;;;;;;;;;;;;;;;;;;;;;;;;;7834:27;:45;;;;;7865:14;;;;;;;;;;;7834:45;7830:155;;;7939:10;;7903:32;7928:6;7903:9;:20;7913:9;7903:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;7895:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7830:155;7995:19;8018:11;:19;8030:6;8018:19;;;;;;;;;;;;;;;;;;;;;;;;;8017:20;:47;;;;;8042:11;:22;8054:9;8042:22;;;;;;;;;;;;;;;;;;;;;;;;;8041:23;8017:47;:120;;8131:6;8017:120;;;8079:37;8090:6;8098:9;8109:6;8079:10;:37::i;:::-;8017:120;7995:142;;8170:37;8195:11;8170:9;:20;8180:9;8170:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;8147:9;:20;8157:9;8147:20;;;;;;;;;;;;;;;:60;;;;8240:9;8223:40;;8232:6;8223:40;;;8251:11;8223:40;;;;;;:::i;:::-;;;;;;;;8280:4;8273:11;;;6674:1617;;;;;;:::o;3122:96:5:-;3180:7;3210:1;3206;:5;;;;:::i;:::-;3199:12;;3122:96;;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;640:96:4:-;693:7;719:10;712:17;;640:96;:::o;5686:355:9:-;5809:4;5845:53;5867:6;5845:53;;;;;;;;;;;;;;;;;:9;:17;5855:6;5845:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;5825:9;:17;5835:6;5825:17;;;;;;;;;;;;;;;:73;;;;5931:32;5956:6;5931:9;:20;5941:9;5931:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5908:9;:20;5918:9;5908:20;;;;;;;;;;;;;;;:55;;;;5995:9;5978:35;;5987:6;5978:35;;;6006:6;5978:35;;;;;;:::i;:::-;;;;;;;;6030:4;6023:11;;5686:355;;;;;:::o;8791:1847::-;2489:4;2470:16;;:23;;;;;;;;;;;;;;;;;;8855::::1;8881:9;:24;8899:4;8881:24;;;;;;;;;;;;;;;;8855:50;;8916:16;8935:4;8916:23;;8949:12;8964:4;8949:19;;8978:22;9021:12;;9014:4;9003:8;:15;;;;:::i;:::-;:30;;;;:::i;:::-;8978:55;;9068:23;9094:60;9152:1;9094:53;9132:14;9094:33;9114:12;;9094:15;:19;;:33;;;;:::i;:::-;:37;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;9068:86;;9164:20;9187:36;9207:15;9187;:19;;:36;;;;:::i;:::-;9164:59;;9234:21;9272:1;9258:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9234:40;;9302:4;9284;9289:1;9284:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;9327:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9317:4;9322:1;9317:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;9351:6;;;;;;;;;;;:57;;;9422:12;9448:1;9463:4;9489;9508:15;9351:182;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9544:17;9564:21;9544:41;;9596:19;9618:39;9637:19;9654:1;9637:12;;:16;;:19;;;;:::i;:::-;9618:14;:18;;:39;;;;:::i;:::-;9596:61;;9701:26;9730:51;9779:1;9730:44;9762:11;9730:27;9744:12;;9730:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;9701:80;;9791:25;9819:40;9847:11;9819:23;9833:8;9819:9;:13;;:23;;;;:::i;:::-;:27;;:40;;;;:::i;:::-;9791:68;;9869:20;9892:36;9916:11;9892:19;9906:4;9892:9;:13;;:19;;;;:::i;:::-;:23;;:36;;;;:::i;:::-;9869:59;;9959:16;9989:14;;;;;;;;;;;9981:28;;10017:17;9981:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9958:81;;;10063:5;10049:19;;10080:16;10110:9;;;;;;;;;;;10102:23;;10133:12;10102:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10079:71;;;10174:5;10160:19;;10300:1;10282:15;:19;10278:354;;;10317:6;;;;;;;;;;;:22;;;10347:18;10392:4;10415:15;10448:1;10467::::0;10486:21:::1;;;;;;;;;;;10525:15;10317:237;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10573:48;10585:18;10605:15;10573:48;;;;;;;:::i;:::-;;;;;;;;10278:354;8845:1793;;;;;;;;;;;;;;2533:5:::0;2514:16;;:24;;;;;;;;;;;;;;;;;;8791:1847::o;5187:88::-;5230:4;5267:1;5253:10;;:15;;5246:22;;5187:88;:::o;5281:69::-;5331:12;5318:10;:25;;;;5281:69::o;10644:338::-;10734:17;10741:9;10734:6;:17::i;:::-;:43;;;;;10756:10;:21;10767:9;10756:21;;;;;;;;;;;;;;;;;;;;;;;;;10755:22;10734:43;:70;;;;;10782:11;:22;10794:9;10782:22;;;;;;;;;;;;;;;;;;;;;;;;;10781:23;10734:70;:81;;;;;10808:7;;;;;;;;;;;10734:81;10733:176;;;;10843:4;;;;;;;;;;;10833:14;;:6;:14;;;:37;;;;;10852:10;:18;10863:6;10852:18;;;;;;;;;;;;;;;;;;;;;;;;;10851:19;10833:37;:64;;;;;10888:9;10874:23;;:10;:23;;;;10833:64;:75;;;;;10901:7;;;;;;;;;;;10833:75;10733:176;10716:260;;;10961:4;10934:13;:24;10948:9;10934:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;10716:260;10644:338;;:::o;8297:488::-;8416:7;8435:21;8467:9;8459:17;;:4;;;;;;;;;;;:17;;;:48;;8499:8;;8459:48;;;8479:17;;8459:48;8435:72;;8517:17;8537:37;8567:6;8537:25;8548:13;8537:6;:10;;:25;;;;:::i;:::-;:29;;:37;;;;:::i;:::-;8517:57;;8643:39;8672:9;8643;:24;8661:4;8643:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;8616:9;:24;8634:4;8616:24;;;;;;;;;;;;;;;:66;;;;8722:4;8697:42;;8706:6;8697:42;;;8729:9;8697:42;;;;;;:::i;:::-;;;;;;;;8757:21;8768:9;8757:6;:10;;:21;;;;:::i;:::-;8750:28;;;;8297:488;;;;;:::o;3465:96:5:-;3523:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3465:96;;;;:::o;3850:::-;3908:7;3938:1;3934;:5;;;;:::i;:::-;3927:12;;3850:96;;;;:::o;10988:180:9:-;11041:4;11057:12;11122:4;11110:17;11102:25;;11160:1;11153:4;:8;11146:15;;;10988:180;;;:::o;7:77:10:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:323::-;4163:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:119;;;4218:79;;:::i;:::-;4180:119;4338:1;4363:50;4405:7;4396:6;4385:9;4381:22;4363:50;:::i;:::-;4353:60;;4309:114;4107:323;;;;:::o;4436:329::-;4495:6;4544:2;4532:9;4523:7;4519:23;4515:32;4512:119;;;4550:79;;:::i;:::-;4512:119;4670:1;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4641:117;4436:329;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:329::-;5885:6;5934:2;5922:9;5913:7;5909:23;5905:32;5902:119;;;5940:79;;:::i;:::-;5902:119;6060:1;6085:53;6130:7;6121:6;6110:9;6106:22;6085:53;:::i;:::-;6075:63;;6031:117;5826:329;;;;:::o;6161:468::-;6226:6;6234;6283:2;6271:9;6262:7;6258:23;6254:32;6251:119;;;6289:79;;:::i;:::-;6251:119;6409:1;6434:53;6479:7;6470:6;6459:9;6455:22;6434:53;:::i;:::-;6424:63;;6380:117;6536:2;6562:50;6604:7;6595:6;6584:9;6580:22;6562:50;:::i;:::-;6552:60;;6507:115;6161:468;;;;;:::o;6635:::-;6700:6;6708;6757:2;6745:9;6736:7;6732:23;6728:32;6725:119;;;6763:79;;:::i;:::-;6725:119;6883:1;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6854:114;7007:2;7033:53;7078:7;7069:6;7058:9;7054:22;7033:53;:::i;:::-;7023:63;;6978:118;6635:468;;;;;:::o;7109:765::-;7195:6;7203;7211;7219;7268:3;7256:9;7247:7;7243:23;7239:33;7236:120;;;7275:79;;:::i;:::-;7236:120;7395:1;7420:53;7465:7;7456:6;7445:9;7441:22;7420:53;:::i;:::-;7410:63;;7366:117;7522:2;7548:53;7593:7;7584:6;7573:9;7569:22;7548:53;:::i;:::-;7538:63;;7493:118;7650:2;7676:53;7721:7;7712:6;7701:9;7697:22;7676:53;:::i;:::-;7666:63;;7621:118;7778:2;7804:53;7849:7;7840:6;7829:9;7825:22;7804:53;:::i;:::-;7794:63;;7749:118;7109:765;;;;;;;:::o;7880:118::-;7967:24;7985:5;7967:24;:::i;:::-;7962:3;7955:37;7880:118;;:::o;8004:222::-;8097:4;8135:2;8124:9;8120:18;8112:26;;8148:71;8216:1;8205:9;8201:17;8192:6;8148:71;:::i;:::-;8004:222;;;;:::o;8232:117::-;8341:1;8338;8331:12;8355:117;8464:1;8461;8454:12;8478:117;8587:1;8584;8577:12;8618:568;8691:8;8701:6;8751:3;8744:4;8736:6;8732:17;8728:27;8718:122;;8759:79;;:::i;:::-;8718:122;8872:6;8859:20;8849:30;;8902:18;8894:6;8891:30;8888:117;;;8924:79;;:::i;:::-;8888:117;9038:4;9030:6;9026:17;9014:29;;9092:3;9084:4;9076:6;9072:17;9062:8;9058:32;9055:41;9052:128;;;9099:79;;:::i;:::-;9052:128;8618:568;;;;;:::o;9192:698::-;9284:6;9292;9300;9349:2;9337:9;9328:7;9324:23;9320:32;9317:119;;;9355:79;;:::i;:::-;9317:119;9503:1;9492:9;9488:17;9475:31;9533:18;9525:6;9522:30;9519:117;;;9555:79;;:::i;:::-;9519:117;9668:80;9740:7;9731:6;9720:9;9716:22;9668:80;:::i;:::-;9650:98;;;;9446:312;9797:2;9823:50;9865:7;9856:6;9845:9;9841:22;9823:50;:::i;:::-;9813:60;;9768:115;9192:698;;;;;:::o;9896:474::-;9964:6;9972;10021:2;10009:9;10000:7;9996:23;9992:32;9989:119;;;10027:79;;:::i;:::-;9989:119;10147:1;10172:53;10217:7;10208:6;10197:9;10193:22;10172:53;:::i;:::-;10162:63;;10118:117;10274:2;10300:53;10345:7;10336:6;10325:9;10321:22;10300:53;:::i;:::-;10290:63;;10245:118;9896:474;;;;;:::o;10376:60::-;10404:3;10425:5;10418:12;;10376:60;;;:::o;10442:142::-;10492:9;10525:53;10543:34;10552:24;10570:5;10552:24;:::i;:::-;10543:34;:::i;:::-;10525:53;:::i;:::-;10512:66;;10442:142;;;:::o;10590:126::-;10640:9;10673:37;10704:5;10673:37;:::i;:::-;10660:50;;10590:126;;;:::o;10722:153::-;10799:9;10832:37;10863:5;10832:37;:::i;:::-;10819:50;;10722:153;;;:::o;10881:185::-;10995:64;11053:5;10995:64;:::i;:::-;10990:3;10983:77;10881:185;;:::o;11072:276::-;11192:4;11230:2;11219:9;11215:18;11207:26;;11243:98;11338:1;11327:9;11323:17;11314:6;11243:98;:::i;:::-;11072:276;;;;:::o;11354:180::-;11402:77;11399:1;11392:88;11499:4;11496:1;11489:15;11523:4;11520:1;11513:15;11540:348;11580:7;11603:20;11621:1;11603:20;:::i;:::-;11598:25;;11637:20;11655:1;11637:20;:::i;:::-;11632:25;;11825:1;11757:66;11753:74;11750:1;11747:81;11742:1;11735:9;11728:17;11724:105;11721:131;;;11832:18;;:::i;:::-;11721:131;11880:1;11877;11873:9;11862:20;;11540:348;;;;:::o;11894:180::-;11942:77;11939:1;11932:88;12039:4;12036:1;12029:15;12063:4;12060:1;12053:15;12080:185;12120:1;12137:20;12155:1;12137:20;:::i;:::-;12132:25;;12171:20;12189:1;12171:20;:::i;:::-;12166:25;;12210:1;12200:35;;12215:18;;:::i;:::-;12200:35;12257:1;12254;12250:9;12245:14;;12080:185;;;;:::o;12271:332::-;12392:4;12430:2;12419:9;12415:18;12407:26;;12443:71;12511:1;12500:9;12496:17;12487:6;12443:71;:::i;:::-;12524:72;12592:2;12581:9;12577:18;12568:6;12524:72;:::i;:::-;12271:332;;;;;:::o;12609:137::-;12663:5;12694:6;12688:13;12679:22;;12710:30;12734:5;12710:30;:::i;:::-;12609:137;;;;:::o;12752:345::-;12819:6;12868:2;12856:9;12847:7;12843:23;12839:32;12836:119;;;12874:79;;:::i;:::-;12836:119;12994:1;13019:61;13072:7;13063:6;13052:9;13048:22;13019:61;:::i;:::-;13009:71;;12965:125;12752:345;;;;:::o;13103:305::-;13143:3;13162:20;13180:1;13162:20;:::i;:::-;13157:25;;13196:20;13214:1;13196:20;:::i;:::-;13191:25;;13350:1;13282:66;13278:74;13275:1;13272:81;13269:107;;;13356:18;;:::i;:::-;13269:107;13400:1;13397;13393:9;13386:16;;13103:305;;;;:::o;13414:180::-;13462:77;13459:1;13452:88;13559:4;13556:1;13549:15;13583:4;13580:1;13573:15;13600:233;13639:3;13662:24;13680:5;13662:24;:::i;:::-;13653:33;;13708:66;13701:5;13698:77;13695:103;;;13778:18;;:::i;:::-;13695:103;13825:1;13818:5;13814:13;13807:20;;13600:233;;;:::o;13839:225::-;13979:34;13975:1;13967:6;13963:14;13956:58;14048:8;14043:2;14035:6;14031:15;14024:33;13839:225;:::o;14070:366::-;14212:3;14233:67;14297:2;14292:3;14233:67;:::i;:::-;14226:74;;14309:93;14398:3;14309:93;:::i;:::-;14427:2;14422:3;14418:12;14411:19;;14070:366;;;:::o;14442:419::-;14608:4;14646:2;14635:9;14631:18;14623:26;;14695:9;14689:4;14685:20;14681:1;14670:9;14666:17;14659:47;14723:131;14849:4;14723:131;:::i;:::-;14715:139;;14442:419;;;:::o;14867:182::-;15007:34;15003:1;14995:6;14991:14;14984:58;14867:182;:::o;15055:366::-;15197:3;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15294:93;15383:3;15294:93;:::i;:::-;15412:2;15407:3;15403:12;15396:19;;15055:366;;;:::o;15427:419::-;15593:4;15631:2;15620:9;15616:18;15608:26;;15680:9;15674:4;15670:20;15666:1;15655:9;15651:17;15644:47;15708:131;15834:4;15708:131;:::i;:::-;15700:139;;15427:419;;;:::o;15852:170::-;15992:22;15988:1;15980:6;15976:14;15969:46;15852:170;:::o;16028:366::-;16170:3;16191:67;16255:2;16250:3;16191:67;:::i;:::-;16184:74;;16267:93;16356:3;16267:93;:::i;:::-;16385:2;16380:3;16376:12;16369:19;;16028:366;;;:::o;16400:419::-;16566:4;16604:2;16593:9;16589:18;16581:26;;16653:9;16647:4;16643:20;16639:1;16628:9;16624:17;16617:47;16681:131;16807:4;16681:131;:::i;:::-;16673:139;;16400:419;;;:::o;16825:167::-;16965:19;16961:1;16953:6;16949:14;16942:43;16825:167;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:172::-;17935:24;17931:1;17923:6;17919:14;17912:48;17795:172;:::o;17973:366::-;18115:3;18136:67;18200:2;18195:3;18136:67;:::i;:::-;18129:74;;18212:93;18301:3;18212:93;:::i;:::-;18330:2;18325:3;18321:12;18314:19;;17973:366;;;:::o;18345:419::-;18511:4;18549:2;18538:9;18534:18;18526:26;;18598:9;18592:4;18588:20;18584:1;18573:9;18569:17;18562:47;18626:131;18752:4;18626:131;:::i;:::-;18618:139;;18345:419;;;:::o;18770:161::-;18910:13;18906:1;18898:6;18894:14;18887:37;18770:161;:::o;18937:366::-;19079:3;19100:67;19164:2;19159:3;19100:67;:::i;:::-;19093:74;;19176:93;19265:3;19176:93;:::i;:::-;19294:2;19289:3;19285:12;19278:19;;18937:366;;;:::o;19309:419::-;19475:4;19513:2;19502:9;19498:18;19490:26;;19562:9;19556:4;19552:20;19548:1;19537:9;19533:17;19526:47;19590:131;19716:4;19590:131;:::i;:::-;19582:139;;19309:419;;;:::o;19734:170::-;19874:22;19870:1;19862:6;19858:14;19851:46;19734:170;:::o;19910:366::-;20052:3;20073:67;20137:2;20132:3;20073:67;:::i;:::-;20066:74;;20149:93;20238:3;20149:93;:::i;:::-;20267:2;20262:3;20258:12;20251:19;;19910:366;;;:::o;20282:419::-;20448:4;20486:2;20475:9;20471:18;20463:26;;20535:9;20529:4;20525:20;20521:1;20510:9;20506:17;20499:47;20563:131;20689:4;20563:131;:::i;:::-;20555:139;;20282:419;;;:::o;20707:191::-;20747:4;20767:20;20785:1;20767:20;:::i;:::-;20762:25;;20801:20;20819:1;20801:20;:::i;:::-;20796:25;;20840:1;20837;20834:8;20831:34;;;20845:18;;:::i;:::-;20831:34;20890:1;20887;20883:9;20875:17;;20707:191;;;;:::o;20904:180::-;20952:77;20949:1;20942:88;21049:4;21046:1;21039:15;21073:4;21070:1;21063:15;21090:143;21147:5;21178:6;21172:13;21163:22;;21194:33;21221:5;21194:33;:::i;:::-;21090:143;;;;:::o;21239:351::-;21309:6;21358:2;21346:9;21337:7;21333:23;21329:32;21326:119;;;21364:79;;:::i;:::-;21326:119;21484:1;21509:64;21565:7;21556:6;21545:9;21541:22;21509:64;:::i;:::-;21499:74;;21455:128;21239:351;;;;:::o;21596:85::-;21641:7;21670:5;21659:16;;21596:85;;;:::o;21687:158::-;21745:9;21778:61;21796:42;21805:32;21831:5;21805:32;:::i;:::-;21796:42;:::i;:::-;21778:61;:::i;:::-;21765:74;;21687:158;;;:::o;21851:147::-;21946:45;21985:5;21946:45;:::i;:::-;21941:3;21934:58;21851:147;;:::o;22004:114::-;22071:6;22105:5;22099:12;22089:22;;22004:114;;;:::o;22124:184::-;22223:11;22257:6;22252:3;22245:19;22297:4;22292:3;22288:14;22273:29;;22124:184;;;;:::o;22314:132::-;22381:4;22404:3;22396:11;;22434:4;22429:3;22425:14;22417:22;;22314:132;;;:::o;22452:108::-;22529:24;22547:5;22529:24;:::i;:::-;22524:3;22517:37;22452:108;;:::o;22566:179::-;22635:10;22656:46;22698:3;22690:6;22656:46;:::i;:::-;22734:4;22729:3;22725:14;22711:28;;22566:179;;;;:::o;22751:113::-;22821:4;22853;22848:3;22844:14;22836:22;;22751:113;;;:::o;22900:732::-;23019:3;23048:54;23096:5;23048:54;:::i;:::-;23118:86;23197:6;23192:3;23118:86;:::i;:::-;23111:93;;23228:56;23278:5;23228:56;:::i;:::-;23307:7;23338:1;23323:284;23348:6;23345:1;23342:13;23323:284;;;23424:6;23418:13;23451:63;23510:3;23495:13;23451:63;:::i;:::-;23444:70;;23537:60;23590:6;23537:60;:::i;:::-;23527:70;;23383:224;23370:1;23367;23363:9;23358:14;;23323:284;;;23327:14;23623:3;23616:10;;23024:608;;;22900:732;;;;:::o;23638:831::-;23901:4;23939:3;23928:9;23924:19;23916:27;;23953:71;24021:1;24010:9;24006:17;23997:6;23953:71;:::i;:::-;24034:80;24110:2;24099:9;24095:18;24086:6;24034:80;:::i;:::-;24161:9;24155:4;24151:20;24146:2;24135:9;24131:18;24124:48;24189:108;24292:4;24283:6;24189:108;:::i;:::-;24181:116;;24307:72;24375:2;24364:9;24360:18;24351:6;24307:72;:::i;:::-;24389:73;24457:3;24446:9;24442:19;24433:6;24389:73;:::i;:::-;23638:831;;;;;;;;:::o;24475:147::-;24576:11;24613:3;24598:18;;24475:147;;;;:::o;24628:114::-;;:::o;24748:398::-;24907:3;24928:83;25009:1;25004:3;24928:83;:::i;:::-;24921:90;;25020:93;25109:3;25020:93;:::i;:::-;25138:1;25133:3;25129:11;25122:18;;24748:398;;;:::o;25152:379::-;25336:3;25358:147;25501:3;25358:147;:::i;:::-;25351:154;;25522:3;25515:10;;25152:379;;;:::o;25537:807::-;25786:4;25824:3;25813:9;25809:19;25801:27;;25838:71;25906:1;25895:9;25891:17;25882:6;25838:71;:::i;:::-;25919:72;25987:2;25976:9;25972:18;25963:6;25919:72;:::i;:::-;26001:80;26077:2;26066:9;26062:18;26053:6;26001:80;:::i;:::-;26091;26167:2;26156:9;26152:18;26143:6;26091:80;:::i;:::-;26181:73;26249:3;26238:9;26234:19;26225:6;26181:73;:::i;:::-;26264;26332:3;26321:9;26317:19;26308:6;26264:73;:::i;:::-;25537:807;;;;;;;;;:::o;26350:143::-;26407:5;26438:6;26432:13;26423:22;;26454:33;26481:5;26454:33;:::i;:::-;26350:143;;;;:::o;26499:663::-;26587:6;26595;26603;26652:2;26640:9;26631:7;26627:23;26623:32;26620:119;;;26658:79;;:::i;:::-;26620:119;26778:1;26803:64;26859:7;26850:6;26839:9;26835:22;26803:64;:::i;:::-;26793:74;;26749:128;26916:2;26942:64;26998:7;26989:6;26978:9;26974:22;26942:64;:::i;:::-;26932:74;;26887:129;27055:2;27081:64;27137:7;27128:6;27117:9;27113:22;27081:64;:::i;:::-;27071:74;;27026:129;26499:663;;;;;:::o;27168:332::-;27289:4;27327:2;27316:9;27312:18;27304:26;;27340:71;27408:1;27397:9;27393:17;27384:6;27340:71;:::i;:::-;27421:72;27489:2;27478:9;27474:18;27465:6;27421:72;:::i;:::-;27168:332;;;;;:::o

Swarm Source

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