ETH Price: $3,339.66 (+3.03%)
 

Overview

Max Total Supply

1,000,000,000,000 THE2.0

Holders

88

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,634,241,222.611021216 THE2.0

Value
$0.00
0x5b95486f8e12a131875cfbb88208e675bb6e88ca
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:
THE20

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-15
*/

/**
 *Submitted for verification at Etherscan.io on 2022-10-15
*/

//  THE2.0 TG : https://t.me/the_protocol20
//  Max wallet will be 1%  10 000 000 000
//  max transaction of 0.33%   3 300 000 000
//  Total supply: 1000 000 000 000
//  Buy tax : 3%
//  Sell tax. : 3%

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

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

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

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                'ERC20: transfer amount exceeds allowance'
            )
        );
        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                'ERC20: decreased allowance below zero'
            )
        );
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            'ERC20: transfer amount exceeds balance'
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(
            amount,
            'ERC20: burn amount exceeds balance'
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, 'SafeMath: modulo by zero');
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IAntisnipe {
    function assureCanTransfer(
        address sender,
        address from,
        address to,
        uint256 amount
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address private marketingWallet;
    address private buybackWallet;

    uint256 private maxTransactionAmount;
    uint256 private swapTokensAtAmount;
    uint256 private maxWallet;

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

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

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

    // Blacklist Map
    mapping(address => bool) private _blacklist;
    bool public transferDelayEnabled = true;

    uint256 private buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;
    uint256 private buyBuybackFee;

    uint256 private sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;
    uint256 private sellBuybackFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForBuyback;

    // block number of opened trading
    uint256 launchedAt;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20('The Protocol2.0', 'THE2.0') {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 3; 
        uint256 _buyLiquidityFee = 0;   
        uint256 _buyBuybackFee = 0;  

        uint256 _sellMarketingFee = 3; 
        uint256 _sellLiquidityFee = 0; 
        uint256 _sellBuybackFee = 0; 

        uint256 totalSupply = 1000000000000 * 10**9;

        maxTransactionAmount = (totalSupply * 33) / 10000; // 0.33% maxTransactionAmountTxn
        maxWallet = (totalSupply * 100) / 10000; // 1% maxWallet
        swapTokensAtAmount = (totalSupply * 15) / 10000; // 0.15% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBuybackFee = _buyBuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBuybackFee = _sellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;

        marketingWallet = address(owner()); // set as marketing wallet
        buybackWallet = address(owner()); // set as buyback wallet

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

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

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

    IAntisnipe public antisnipe;
    bool public antisnipeDisable;

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (from == address(0) || to == address(0)) return;
        if (!antisnipeDisable && address(antisnipe) != address(0))
            antisnipe.assureCanTransfer(msg.sender, from, to, amount);
    }

    function setAntisnipeDisable() external onlyOwner {
        require(!antisnipeDisable);
        antisnipeDisable = true;
    }

    function setAntisnipeAddress(address addr) external onlyOwner {
        antisnipe = IAntisnipe(addr);
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _buybackFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBuybackFee = _buybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;
        require(buyTotalFees <= 3, 'Must keep fees at 3% or less');
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _buybackFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBuybackFee = _buybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;
        require(sellTotalFees <= 3, 'Must keep fees at 3% or less');
    }

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

    function ManageBot(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuybackWallet(address newWallet) external onlyOwner {
        emit buybackWalletUpdated(newWallet, buybackWallet);
        buybackWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), 'ERC20: transfer from the zero address');
        require(to != address(0), 'ERC20: transfer to the zero address');
        require(
            !_blacklist[to] && !_blacklist[from],
            'You have been blacklisted from transfering tokens'
        );
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

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

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

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

        // anti bot logic
        if (
            block.number <= (launchedAt + 1) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = true;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForBuyback = ethBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyback;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBuyback = 0;

        (success, ) = address(buybackWallet).call{value: ethForBuyback}('');

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"buybackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"ManageBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntisnipe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipeDisable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setAntisnipeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAntisnipeDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f5468652050726f746f636f6c322e3000000000000000000000000000000000008152506040518060400160405280600681526020017f544845322e30000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000d2d565b5080600490805190602001906200011b92919062000d2d565b5050506000620001306200067960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200068160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000e47565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000e47565b6040518363ffffffff1660e01b81526004016200036e92919062000e8a565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000e47565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200068160201b60201c565b6200042160a05160016200077e60201b60201c565b6000600390506000806000600390506000806000683635c9adc5dea00000905061271060218262000453919062000ef0565b6200045f919062000f80565b60088190555061271060648262000477919062000ef0565b62000483919062000f80565b600a81905550612710600f826200049b919062000ef0565b620004a7919062000f80565b600981905550866011819055508560128190555084601381905550601354601254601154620004d7919062000fb8565b620004e3919062000fb8565b60108190555083601581905550826016819055508160178190555060175460165460155462000513919062000fb8565b6200051f919062000fb8565b601481905550620005356200081f60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005856200081f60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005e7620005d96200081f60201b60201c565b60016200084960201b60201c565b620005fa3060016200084960201b60201c565b6200060f61dead60016200084960201b60201c565b62000631620006236200081f60201b60201c565b60016200068160201b60201c565b620006443060016200068160201b60201c565b6200065961dead60016200068160201b60201c565b6200066b33826200099660201b60201c565b505050505050505062001296565b600033905090565b620006916200067960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000723576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071a9062001076565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008596200067960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e29062001076565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098a9190620010b5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a009062001122565b60405180910390fd5b62000a1d6000838362000b4560201b60201c565b62000a398160025462000cca60201b620023ef1790919060201c565b60028190555062000a97816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cca60201b620023ef1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b39919062001155565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148062000bad5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1562000bb95762000cc5565b601f60149054906101000a900460ff1615801562000c265750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1562000cc457601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b815260040162000c8f949392919062001172565b600060405180830381600087803b15801562000caa57600080fd5b505af115801562000cbf573d6000803e3d6000fd5b505050505b5b505050565b600080828462000cdb919062000fb8565b90508381101562000d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d1a906200120f565b60405180910390fd5b8091505092915050565b82805462000d3b9062001260565b90600052602060002090601f01602090048101928262000d5f576000855562000dab565b82601f1062000d7a57805160ff191683800117855562000dab565b8280016001018555821562000dab579182015b8281111562000daa57825182559160200191906001019062000d8d565b5b50905062000dba919062000dbe565b5090565b5b8082111562000dd957600081600090555060010162000dbf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e0f8262000de2565b9050919050565b62000e218162000e02565b811462000e2d57600080fd5b50565b60008151905062000e418162000e16565b92915050565b60006020828403121562000e605762000e5f62000ddd565b5b600062000e708482850162000e30565b91505092915050565b62000e848162000e02565b82525050565b600060408201905062000ea1600083018562000e79565b62000eb0602083018462000e79565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000efd8262000eb7565b915062000f0a8362000eb7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f465762000f4562000ec1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f8d8262000eb7565b915062000f9a8362000eb7565b92508262000fad5762000fac62000f51565b5b828204905092915050565b600062000fc58262000eb7565b915062000fd28362000eb7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200100a576200100962000ec1565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200105e60208362001015565b91506200106b8262001026565b602082019050919050565b6000602082019050818103600083015262001091816200104f565b9050919050565b60008115159050919050565b620010af8162001098565b82525050565b6000602082019050620010cc6000830184620010a4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110a601f8362001015565b91506200111782620010d2565b602082019050919050565b600060208201905081810360008301526200113d81620010fb565b9050919050565b6200114f8162000eb7565b82525050565b60006020820190506200116c600083018462001144565b92915050565b600060808201905062001189600083018762000e79565b62001198602083018662000e79565b620011a7604083018562000e79565b620011b6606083018462001144565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011f7601b8362001015565b91506200120482620011bf565b602082019050919050565b600060208201905081810360008301526200122a81620011e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200127957607f821691505b6020821081141562001290576200128f62001231565b5b50919050565b60805160a051615726620012fb60003960008181610e63015281816118f501528181612b1f0152612f3f015260008181610b9c01528181612ac701528181613e5c01528181613f4c01528181613f730152818161400f015261403601526157266000f3fe60806040526004361061023f5760003560e01c806384a7bf831161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f1461087a578063dd62ed3e146108b7578063e1e144de146108f4578063e884f2601461091f578063f2fde38b1461094a57610246565b8063b62496f514610797578063c0246668146107d4578063c17b5b8c146107fd578063c18bc19514610826578063c876d0b91461084f57610246565b806395d89b41116100f257806395d89b41146106a05780639a7a23d6146106cb578063a457c2d7146106f4578063a9059cbb14610731578063aacebbe31461076e57610246565b806384a7bf83146105e1578063882cfb3f1461060a5780638a8c523c146106355780638da5cb5b1461064c578063924de9b71461067757610246565b806349bd5a5e116101bc578063715018a611610180578063715018a61461053657806374fb20e11461054d578063751039fc146105645780637571336a1461058f5780638095d564146105b857610246565b806349bd5a5e1461043d5780634fbee19314610468578063611bf629146104a55780636ddd1713146104ce57806370a08231146104f957610246565b806318160ddd1161020357806318160ddd14610344578063203e727e1461036f57806323b872dd14610398578063313ce567146103d5578063395093511461040057610246565b806304dacd501461024b57806306fdde0314610274578063095ea7b31461029f57806310d5de53146102dc5780631694505e1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906141da565b610973565b005b34801561028057600080fd5b50610289610aca565b60405161029691906142a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906142f8565b610b5c565b6040516102d39190614353565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906141da565b610b7a565b6040516103109190614353565b60405180910390f35b34801561032557600080fd5b5061032e610b9a565b60405161033b91906143cd565b60405180910390f35b34801561035057600080fd5b50610359610bbe565b60405161036691906143f7565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190614412565b610bc8565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061443f565b610ccc565b6040516103cc9190614353565b60405180910390f35b3480156103e157600080fd5b506103ea610da5565b6040516103f791906144ae565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142f8565b610dae565b6040516104349190614353565b60405180910390f35b34801561044957600080fd5b50610452610e61565b60405161045f91906144d8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906141da565b610e85565b60405161049c9190614353565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906141da565b610edb565b005b3480156104da57600080fd5b506104e3610fb6565b6040516104f09190614353565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b91906141da565b610fc9565b60405161052d91906143f7565b60405180910390f35b34801561054257600080fd5b5061054b611011565b005b34801561055957600080fd5b50610562611169565b005b34801561057057600080fd5b50610579611237565b6040516105869190614353565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061451f565b6112f2565b005b3480156105c457600080fd5b506105df60048036038101906105da919061455f565b6113e4565b005b3480156105ed57600080fd5b506106086004803603810190610603919061451f565b6114fe565b005b34801561061657600080fd5b5061061f6115f0565b60405161062c91906145d3565b60405180910390f35b34801561064157600080fd5b5061064a611616565b005b34801561065857600080fd5b506106616116ec565b60405161066e91906144d8565b60405180910390f35b34801561068357600080fd5b5061069e600480360381019061069991906145ee565b611716565b005b3480156106ac57600080fd5b506106b56117ca565b6040516106c291906142a0565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061451f565b61185c565b005b34801561070057600080fd5b5061071b600480360381019061071691906142f8565b611990565b6040516107289190614353565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906142f8565b611a5d565b6040516107659190614353565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141da565b611a7b565b005b3480156107a357600080fd5b506107be60048036038101906107b991906141da565b611bd2565b6040516107cb9190614353565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061451f565b611bf2565b005b34801561080957600080fd5b50610824600480360381019061081f919061455f565b611d32565b005b34801561083257600080fd5b5061084d60048036038101906108489190614412565b611e4c565b005b34801561085b57600080fd5b50610864611f50565b6040516108719190614353565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c9190614412565b611f63565b6040516108ae9190614353565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d9919061461b565b6120d3565b6040516108eb91906143f7565b60405180910390f35b34801561090057600080fd5b5061090961215a565b6040516109169190614353565b60405180910390f35b34801561092b57600080fd5b5061093461216d565b6040516109419190614353565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906141da565b612228565b005b61097b61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906146a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ad9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b05906146f6565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6000610b70610b6961244d565b8484612455565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bd061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906146a7565b60405180910390fd5b6103e86001610c6c610bbe565b610c769190614757565b610c8091906147e0565b811015610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990614883565b60405180910390fd5b8060088190555050565b6000610d8f84610cda61244d565b610d8a856040518060600160405280602881526020016156a460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4061244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b610d9a848484612684565b600190509392505050565b60006009905090565b6000610e57610dbb61244d565b84610e528560016000610dcc61244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b612455565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906146a7565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101961244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906146a7565b60405180910390fd5b601f60149054906101000a900460ff161561121a57600080fd5b6001601f60146101000a81548160ff021916908315150217905550565b600061124161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c7906146a7565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112fa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906146a7565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113ec61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906146a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546114a391906148a3565b6114ad91906148a3565b601081905550600360105411156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614945565b60405180910390fd5b505050565b61150661244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906146a7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61161e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906146a7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906146a7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117d9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611805906146f6565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b61186461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906146a7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906149d7565b60405180910390fd5b61198c8282613515565b5050565b6000611a5361199d61244d565b84611a4e856040518060600160405280602581526020016156cc60259139600160006119c761244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b6001905092915050565b6000611a71611a6a61244d565b8484612684565b6001905092915050565b611a8361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906146a7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b611bfa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906146a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d269190614353565b60405180910390a25050565b611d3a61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906146a7565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611df191906148a3565b611dfb91906148a3565b60148190555060036014541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614945565b60405180910390fd5b505050565b611e5461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906146a7565b60405180910390fd5b6103e86064611ef0610bbe565b611efa9190614757565b611f0491906147e0565b811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614a69565b60405180910390fd5b80600a8190555050565b600f60009054906101000a900460ff1681565b6000611f6d61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906146a7565b60405180910390fd5b620186a0600161200a610bbe565b6120149190614757565b61201e91906147e0565b821015612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614afb565b60405180910390fd5b6103e8606461206d610bbe565b6120779190614757565b61208191906147e0565b8211156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90614b8d565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60149054906101000a900460ff1681565b600061217761244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61223061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614c1f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123fe91906148a3565b905083811015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614c8b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614daf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261391906143f7565b60405180910390a3505050565b6000838311158290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906142a0565b60405180910390fd5b50600083856126779190614dcf565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614f07565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128085750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90614f99565b60405180910390fd5b60008114156128615761285c838360006135b6565b613510565b600b60009054906101000a900460ff1615612f245761287e6116ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ec57506128bc6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600560149054906101000a900460ff16155b15612f2357600b60019054906101000a900460ff16612a7257601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a325750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615005565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3a57612a8f6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c395743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb906150bd565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cdd5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8457600854811115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e9061514f565b60405180910390fd5b600a54612d3383610fc9565b82612d3e91906148a3565b1115612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d76906151bb565b60405180910390fd5b612f22565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e275750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7657600854811115612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e689061524d565b60405180910390fd5b612f21565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600a54612ed383610fc9565b82612ede91906148a3565b1115612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f16906151bb565b60405180910390fd5b5b5b5b5b5b6001601b54612f3391906148a3565b4311158015612f8e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fda5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613038576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061304330610fc9565b9050600060095482101590508080156130685750600b60029054906101000a900460ff165b80156130815750600560149054906101000a900460ff16155b80156130d75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561312d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131835750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c7576001600560146101000a81548160ff0219169083151502179055506131ab61384b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328757600090505b6000811561350057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132ea57506000601454115b156133b757613317606461330960145488613b3290919063ffffffff16565b613bad90919063ffffffff16565b90506014546016548261332a9190614757565b61333491906147e0565b6019600082825461334591906148a3565b925050819055506014546017548261335d9190614757565b61336791906147e0565b601a600082825461337891906148a3565b92505081905550601454601554826133909190614757565b61339a91906147e0565b601860008282546133ab91906148a3565b925050819055506134dc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341257506000601054115b156134db5761343f606461343160105488613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050601054601254826134529190614757565b61345c91906147e0565b6019600082825461346d91906148a3565b92505081905550601054601354826134859190614757565b61348f91906147e0565b601a60008282546134a091906148a3565b92505081905550601054601154826134b89190614757565b6134c291906147e0565b601860008282546134d391906148a3565b925050819055505b5b60008111156134f1576134f08730836135b6565b5b80856134fd9190614dcf565b94505b61350b8787876135b6565b505050505b505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d90614f07565b60405180910390fd5b6136a1838383613bf7565b61370c8160405180606001604052806026815260200161567e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383e91906143f7565b60405180910390a3505050565b600061385630610fc9565b90506000601a5460185460195461386d91906148a3565b61387791906148a3565b90506000808314806138895750600082145b1561389657505050613b30565b60146009546138a59190614757565b8311156138be5760146009546138bb9190614757565b92505b6000600283601954866138d19190614757565b6138db91906147e0565b6138e591906147e0565b905060006138fc8286613d7390919063ffffffff16565b9050600047905061390c82613dbd565b60006139218247613d7390919063ffffffff16565b9050600061394c8761393e60185485613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050600061397788613969601a5486613b3290919063ffffffff16565b613bad90919063ffffffff16565b905060008183856139889190614dcf565b6139929190614dcf565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139f29061529e565b60006040518083038185875af1925050503d8060008114613a2f576040519150601f19603f3d011682016040523d82523d6000602084013e613a34565b606091505b505080985050600087118015613a4a5750600081115b15613a9757613a598782614009565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a8e939291906152b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add9061529e565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b505080985050505050505050505050505b565b600080831415613b455760009050613ba7565b60008284613b539190614757565b9050828482613b6291906147e0565b14613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b999061535c565b60405180910390fd5b809150505b92915050565b6000613bef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614114565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613c5e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613c6857613d6e565b601f60149054906101000a900460ff16158015613cd45750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613d6d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b8152600401613d3a949392919061537c565b600060405180830381600087803b158015613d5457600080fd5b505af1158015613d68573d6000803e3d6000fd5b505050505b5b505050565b6000613db583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612620565b905092915050565b6000600267ffffffffffffffff811115613dda57613dd96153c1565b5b604051908082528060200260200182016040528015613e085781602001602082028036833780820191505090505b5090503081600081518110613e2057613e1f6153f0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec057600080fd5b505afa158015613ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef89190615434565b81600181518110613f0c57613f0b6153f0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f71307f000000000000000000000000000000000000000000000000000000000000000084612455565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fd395949392919061555a565b600060405180830381600087803b158015613fed57600080fd5b505af1158015614001573d6000803e3d6000fd5b505050505050565b614034307f000000000000000000000000000000000000000000000000000000000000000084612455565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140bb969594939291906155b4565b6060604051808303818588803b1580156140d457600080fd5b505af11580156140e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410d919061562a565b5050505050565b6000808311829061415b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415291906142a0565b60405180910390fd5b506000838561416a91906147e0565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141a78261417c565b9050919050565b6141b78161419c565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b6000602082840312156141f0576141ef614177565b5b60006141fe848285016141c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614241578082015181840152602081019050614226565b83811115614250576000848401525b50505050565b6000601f19601f8301169050919050565b600061427282614207565b61427c8185614212565b935061428c818560208601614223565b61429581614256565b840191505092915050565b600060208201905081810360008301526142ba8184614267565b905092915050565b6000819050919050565b6142d5816142c2565b81146142e057600080fd5b50565b6000813590506142f2816142cc565b92915050565b6000806040838503121561430f5761430e614177565b5b600061431d858286016141c5565b925050602061432e858286016142e3565b9150509250929050565b60008115159050919050565b61434d81614338565b82525050565b60006020820190506143686000830184614344565b92915050565b6000819050919050565b600061439361438e6143898461417c565b61436e565b61417c565b9050919050565b60006143a582614378565b9050919050565b60006143b78261439a565b9050919050565b6143c7816143ac565b82525050565b60006020820190506143e260008301846143be565b92915050565b6143f1816142c2565b82525050565b600060208201905061440c60008301846143e8565b92915050565b60006020828403121561442857614427614177565b5b6000614436848285016142e3565b91505092915050565b60008060006060848603121561445857614457614177565b5b6000614466868287016141c5565b9350506020614477868287016141c5565b9250506040614488868287016142e3565b9150509250925092565b600060ff82169050919050565b6144a881614492565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6144d28161419c565b82525050565b60006020820190506144ed60008301846144c9565b92915050565b6144fc81614338565b811461450757600080fd5b50565b600081359050614519816144f3565b92915050565b6000806040838503121561453657614535614177565b5b6000614544858286016141c5565b92505060206145558582860161450a565b9150509250929050565b60008060006060848603121561457857614577614177565b5b6000614586868287016142e3565b9350506020614597868287016142e3565b92505060406145a8868287016142e3565b9150509250925092565b60006145bd8261439a565b9050919050565b6145cd816145b2565b82525050565b60006020820190506145e860008301846145c4565b92915050565b60006020828403121561460457614603614177565b5b60006146128482850161450a565b91505092915050565b6000806040838503121561463257614631614177565b5b6000614640858286016141c5565b9250506020614651858286016141c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614691602083614212565b915061469c8261465b565b602082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470e57607f821691505b60208210811415614722576147216146c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614762826142c2565b915061476d836142c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147a6576147a5614728565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147eb826142c2565b91506147f6836142c2565b925082614806576148056147b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061486d602f83614212565b915061487882614811565b604082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b60006148ae826142c2565b91506148b9836142c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ee576148ed614728565b5b828201905092915050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b600061492f601c83614212565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c1603983614212565b91506149cc82614965565b604082019050919050565b600060208201905081810360008301526149f0816149b4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a53602283614212565b9150614a5e826149f7565b604082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ae5603583614212565b9150614af082614a89565b604082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b77603283614212565b9150614b8282614b1b565b604082019050919050565b60006020820190508181036000830152614ba681614b6a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c09602683614212565b9150614c1482614bad565b604082019050919050565b60006020820190508181036000830152614c3881614bfc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614c75601b83614212565b9150614c8082614c3f565b602082019050919050565b60006020820190508181036000830152614ca481614c68565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d07602483614212565b9150614d1282614cab565b604082019050919050565b60006020820190508181036000830152614d3681614cfa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d99602283614212565b9150614da482614d3d565b604082019050919050565b60006020820190508181036000830152614dc881614d8c565b9050919050565b6000614dda826142c2565b9150614de5836142c2565b925082821015614df857614df7614728565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e5f602583614212565b9150614e6a82614e03565b604082019050919050565b60006020820190508181036000830152614e8e81614e52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef1602383614212565b9150614efc82614e95565b604082019050919050565b60006020820190508181036000830152614f2081614ee4565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f83603183614212565b9150614f8e82614f27565b604082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fef601683614212565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150a7604983614212565b91506150b282615025565b606082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615139603583614212565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a5601383614212565b91506151b08261516f565b602082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615237603683614212565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b600081905092915050565b50565b600061528860008361526d565b915061529382615278565b600082019050919050565b60006152a98261527b565b9150819050919050565b60006060820190506152c860008301866143e8565b6152d560208301856143e8565b6152e260408301846143e8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615346602183614212565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b600060808201905061539160008301876144c9565b61539e60208301866144c9565b6153ab60408301856144c9565b6153b860608301846143e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061542e816141ae565b92915050565b60006020828403121561544a57615449614177565b5b60006154588482850161541f565b91505092915050565b6000819050919050565b600061548661548161547c84615461565b61436e565b6142c2565b9050919050565b6154968161546b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154d18161419c565b82525050565b60006154e383836154c8565b60208301905092915050565b6000602082019050919050565b60006155078261549c565b61551181856154a7565b935061551c836154b8565b8060005b8381101561554d57815161553488826154d7565b975061553f836154ef565b925050600181019050615520565b5085935050505092915050565b600060a08201905061556f60008301886143e8565b61557c602083018761548d565b818103604083015261558e81866154fc565b905061559d60608301856144c9565b6155aa60808301846143e8565b9695505050505050565b600060c0820190506155c960008301896144c9565b6155d660208301886143e8565b6155e3604083018761548d565b6155f0606083018661548d565b6155fd60808301856144c9565b61560a60a08301846143e8565b979650505050505050565b600081519050615624816142cc565b92915050565b60008060006060848603121561564357615642614177565b5b600061565186828701615615565b935050602061566286828701615615565b925050604061567386828701615615565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a041abfd331d641d901a34cbf9bf7e9f973e22e6f7e925088866bc2d230db79d64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806384a7bf831161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f1461087a578063dd62ed3e146108b7578063e1e144de146108f4578063e884f2601461091f578063f2fde38b1461094a57610246565b8063b62496f514610797578063c0246668146107d4578063c17b5b8c146107fd578063c18bc19514610826578063c876d0b91461084f57610246565b806395d89b41116100f257806395d89b41146106a05780639a7a23d6146106cb578063a457c2d7146106f4578063a9059cbb14610731578063aacebbe31461076e57610246565b806384a7bf83146105e1578063882cfb3f1461060a5780638a8c523c146106355780638da5cb5b1461064c578063924de9b71461067757610246565b806349bd5a5e116101bc578063715018a611610180578063715018a61461053657806374fb20e11461054d578063751039fc146105645780637571336a1461058f5780638095d564146105b857610246565b806349bd5a5e1461043d5780634fbee19314610468578063611bf629146104a55780636ddd1713146104ce57806370a08231146104f957610246565b806318160ddd1161020357806318160ddd14610344578063203e727e1461036f57806323b872dd14610398578063313ce567146103d5578063395093511461040057610246565b806304dacd501461024b57806306fdde0314610274578063095ea7b31461029f57806310d5de53146102dc5780631694505e1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906141da565b610973565b005b34801561028057600080fd5b50610289610aca565b60405161029691906142a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906142f8565b610b5c565b6040516102d39190614353565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906141da565b610b7a565b6040516103109190614353565b60405180910390f35b34801561032557600080fd5b5061032e610b9a565b60405161033b91906143cd565b60405180910390f35b34801561035057600080fd5b50610359610bbe565b60405161036691906143f7565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190614412565b610bc8565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061443f565b610ccc565b6040516103cc9190614353565b60405180910390f35b3480156103e157600080fd5b506103ea610da5565b6040516103f791906144ae565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142f8565b610dae565b6040516104349190614353565b60405180910390f35b34801561044957600080fd5b50610452610e61565b60405161045f91906144d8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906141da565b610e85565b60405161049c9190614353565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906141da565b610edb565b005b3480156104da57600080fd5b506104e3610fb6565b6040516104f09190614353565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b91906141da565b610fc9565b60405161052d91906143f7565b60405180910390f35b34801561054257600080fd5b5061054b611011565b005b34801561055957600080fd5b50610562611169565b005b34801561057057600080fd5b50610579611237565b6040516105869190614353565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061451f565b6112f2565b005b3480156105c457600080fd5b506105df60048036038101906105da919061455f565b6113e4565b005b3480156105ed57600080fd5b506106086004803603810190610603919061451f565b6114fe565b005b34801561061657600080fd5b5061061f6115f0565b60405161062c91906145d3565b60405180910390f35b34801561064157600080fd5b5061064a611616565b005b34801561065857600080fd5b506106616116ec565b60405161066e91906144d8565b60405180910390f35b34801561068357600080fd5b5061069e600480360381019061069991906145ee565b611716565b005b3480156106ac57600080fd5b506106b56117ca565b6040516106c291906142a0565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061451f565b61185c565b005b34801561070057600080fd5b5061071b600480360381019061071691906142f8565b611990565b6040516107289190614353565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906142f8565b611a5d565b6040516107659190614353565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141da565b611a7b565b005b3480156107a357600080fd5b506107be60048036038101906107b991906141da565b611bd2565b6040516107cb9190614353565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061451f565b611bf2565b005b34801561080957600080fd5b50610824600480360381019061081f919061455f565b611d32565b005b34801561083257600080fd5b5061084d60048036038101906108489190614412565b611e4c565b005b34801561085b57600080fd5b50610864611f50565b6040516108719190614353565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c9190614412565b611f63565b6040516108ae9190614353565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d9919061461b565b6120d3565b6040516108eb91906143f7565b60405180910390f35b34801561090057600080fd5b5061090961215a565b6040516109169190614353565b60405180910390f35b34801561092b57600080fd5b5061093461216d565b6040516109419190614353565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906141da565b612228565b005b61097b61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906146a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ad9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b05906146f6565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6000610b70610b6961244d565b8484612455565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bd061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906146a7565b60405180910390fd5b6103e86001610c6c610bbe565b610c769190614757565b610c8091906147e0565b811015610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990614883565b60405180910390fd5b8060088190555050565b6000610d8f84610cda61244d565b610d8a856040518060600160405280602881526020016156a460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4061244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b610d9a848484612684565b600190509392505050565b60006009905090565b6000610e57610dbb61244d565b84610e528560016000610dcc61244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b612455565b6001905092915050565b7f000000000000000000000000b39eef4dd0a1c3d417621e4ae49f430e02aa5cef81565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906146a7565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101961244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906146a7565b60405180910390fd5b601f60149054906101000a900460ff161561121a57600080fd5b6001601f60146101000a81548160ff021916908315150217905550565b600061124161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c7906146a7565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112fa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906146a7565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113ec61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906146a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546114a391906148a3565b6114ad91906148a3565b601081905550600360105411156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614945565b60405180910390fd5b505050565b61150661244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906146a7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61161e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906146a7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906146a7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117d9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611805906146f6565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b61186461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906146a7565b60405180910390fd5b7f000000000000000000000000b39eef4dd0a1c3d417621e4ae49f430e02aa5cef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906149d7565b60405180910390fd5b61198c8282613515565b5050565b6000611a5361199d61244d565b84611a4e856040518060600160405280602581526020016156cc60259139600160006119c761244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b6001905092915050565b6000611a71611a6a61244d565b8484612684565b6001905092915050565b611a8361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906146a7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b611bfa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906146a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d269190614353565b60405180910390a25050565b611d3a61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906146a7565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611df191906148a3565b611dfb91906148a3565b60148190555060036014541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614945565b60405180910390fd5b505050565b611e5461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906146a7565b60405180910390fd5b6103e86064611ef0610bbe565b611efa9190614757565b611f0491906147e0565b811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614a69565b60405180910390fd5b80600a8190555050565b600f60009054906101000a900460ff1681565b6000611f6d61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906146a7565b60405180910390fd5b620186a0600161200a610bbe565b6120149190614757565b61201e91906147e0565b821015612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614afb565b60405180910390fd5b6103e8606461206d610bbe565b6120779190614757565b61208191906147e0565b8211156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90614b8d565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60149054906101000a900460ff1681565b600061217761244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61223061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614c1f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123fe91906148a3565b905083811015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614c8b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614daf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261391906143f7565b60405180910390a3505050565b6000838311158290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906142a0565b60405180910390fd5b50600083856126779190614dcf565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614f07565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128085750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90614f99565b60405180910390fd5b60008114156128615761285c838360006135b6565b613510565b600b60009054906101000a900460ff1615612f245761287e6116ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ec57506128bc6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600560149054906101000a900460ff16155b15612f2357600b60019054906101000a900460ff16612a7257601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a325750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615005565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3a57612a8f6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e57507f000000000000000000000000b39eef4dd0a1c3d417621e4ae49f430e02aa5cef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c395743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb906150bd565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cdd5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8457600854811115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e9061514f565b60405180910390fd5b600a54612d3383610fc9565b82612d3e91906148a3565b1115612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d76906151bb565b60405180910390fd5b612f22565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e275750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7657600854811115612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e689061524d565b60405180910390fd5b612f21565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600a54612ed383610fc9565b82612ede91906148a3565b1115612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f16906151bb565b60405180910390fd5b5b5b5b5b5b6001601b54612f3391906148a3565b4311158015612f8e57507f000000000000000000000000b39eef4dd0a1c3d417621e4ae49f430e02aa5cef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fda5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613038576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061304330610fc9565b9050600060095482101590508080156130685750600b60029054906101000a900460ff165b80156130815750600560149054906101000a900460ff16155b80156130d75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561312d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131835750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c7576001600560146101000a81548160ff0219169083151502179055506131ab61384b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328757600090505b6000811561350057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132ea57506000601454115b156133b757613317606461330960145488613b3290919063ffffffff16565b613bad90919063ffffffff16565b90506014546016548261332a9190614757565b61333491906147e0565b6019600082825461334591906148a3565b925050819055506014546017548261335d9190614757565b61336791906147e0565b601a600082825461337891906148a3565b92505081905550601454601554826133909190614757565b61339a91906147e0565b601860008282546133ab91906148a3565b925050819055506134dc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341257506000601054115b156134db5761343f606461343160105488613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050601054601254826134529190614757565b61345c91906147e0565b6019600082825461346d91906148a3565b92505081905550601054601354826134859190614757565b61348f91906147e0565b601a60008282546134a091906148a3565b92505081905550601054601154826134b89190614757565b6134c291906147e0565b601860008282546134d391906148a3565b925050819055505b5b60008111156134f1576134f08730836135b6565b5b80856134fd9190614dcf565b94505b61350b8787876135b6565b505050505b505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d90614f07565b60405180910390fd5b6136a1838383613bf7565b61370c8160405180606001604052806026815260200161567e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383e91906143f7565b60405180910390a3505050565b600061385630610fc9565b90506000601a5460185460195461386d91906148a3565b61387791906148a3565b90506000808314806138895750600082145b1561389657505050613b30565b60146009546138a59190614757565b8311156138be5760146009546138bb9190614757565b92505b6000600283601954866138d19190614757565b6138db91906147e0565b6138e591906147e0565b905060006138fc8286613d7390919063ffffffff16565b9050600047905061390c82613dbd565b60006139218247613d7390919063ffffffff16565b9050600061394c8761393e60185485613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050600061397788613969601a5486613b3290919063ffffffff16565b613bad90919063ffffffff16565b905060008183856139889190614dcf565b6139929190614dcf565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139f29061529e565b60006040518083038185875af1925050503d8060008114613a2f576040519150601f19603f3d011682016040523d82523d6000602084013e613a34565b606091505b505080985050600087118015613a4a5750600081115b15613a9757613a598782614009565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a8e939291906152b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add9061529e565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b505080985050505050505050505050505b565b600080831415613b455760009050613ba7565b60008284613b539190614757565b9050828482613b6291906147e0565b14613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b999061535c565b60405180910390fd5b809150505b92915050565b6000613bef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614114565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613c5e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613c6857613d6e565b601f60149054906101000a900460ff16158015613cd45750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613d6d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b8152600401613d3a949392919061537c565b600060405180830381600087803b158015613d5457600080fd5b505af1158015613d68573d6000803e3d6000fd5b505050505b5b505050565b6000613db583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612620565b905092915050565b6000600267ffffffffffffffff811115613dda57613dd96153c1565b5b604051908082528060200260200182016040528015613e085781602001602082028036833780820191505090505b5090503081600081518110613e2057613e1f6153f0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec057600080fd5b505afa158015613ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef89190615434565b81600181518110613f0c57613f0b6153f0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f71307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612455565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fd395949392919061555a565b600060405180830381600087803b158015613fed57600080fd5b505af1158015614001573d6000803e3d6000fd5b505050505050565b614034307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612455565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140bb969594939291906155b4565b6060604051808303818588803b1580156140d457600080fd5b505af11580156140e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410d919061562a565b5050505050565b6000808311829061415b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415291906142a0565b60405180910390fd5b506000838561416a91906147e0565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141a78261417c565b9050919050565b6141b78161419c565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b6000602082840312156141f0576141ef614177565b5b60006141fe848285016141c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614241578082015181840152602081019050614226565b83811115614250576000848401525b50505050565b6000601f19601f8301169050919050565b600061427282614207565b61427c8185614212565b935061428c818560208601614223565b61429581614256565b840191505092915050565b600060208201905081810360008301526142ba8184614267565b905092915050565b6000819050919050565b6142d5816142c2565b81146142e057600080fd5b50565b6000813590506142f2816142cc565b92915050565b6000806040838503121561430f5761430e614177565b5b600061431d858286016141c5565b925050602061432e858286016142e3565b9150509250929050565b60008115159050919050565b61434d81614338565b82525050565b60006020820190506143686000830184614344565b92915050565b6000819050919050565b600061439361438e6143898461417c565b61436e565b61417c565b9050919050565b60006143a582614378565b9050919050565b60006143b78261439a565b9050919050565b6143c7816143ac565b82525050565b60006020820190506143e260008301846143be565b92915050565b6143f1816142c2565b82525050565b600060208201905061440c60008301846143e8565b92915050565b60006020828403121561442857614427614177565b5b6000614436848285016142e3565b91505092915050565b60008060006060848603121561445857614457614177565b5b6000614466868287016141c5565b9350506020614477868287016141c5565b9250506040614488868287016142e3565b9150509250925092565b600060ff82169050919050565b6144a881614492565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6144d28161419c565b82525050565b60006020820190506144ed60008301846144c9565b92915050565b6144fc81614338565b811461450757600080fd5b50565b600081359050614519816144f3565b92915050565b6000806040838503121561453657614535614177565b5b6000614544858286016141c5565b92505060206145558582860161450a565b9150509250929050565b60008060006060848603121561457857614577614177565b5b6000614586868287016142e3565b9350506020614597868287016142e3565b92505060406145a8868287016142e3565b9150509250925092565b60006145bd8261439a565b9050919050565b6145cd816145b2565b82525050565b60006020820190506145e860008301846145c4565b92915050565b60006020828403121561460457614603614177565b5b60006146128482850161450a565b91505092915050565b6000806040838503121561463257614631614177565b5b6000614640858286016141c5565b9250506020614651858286016141c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614691602083614212565b915061469c8261465b565b602082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470e57607f821691505b60208210811415614722576147216146c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614762826142c2565b915061476d836142c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147a6576147a5614728565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147eb826142c2565b91506147f6836142c2565b925082614806576148056147b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061486d602f83614212565b915061487882614811565b604082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b60006148ae826142c2565b91506148b9836142c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ee576148ed614728565b5b828201905092915050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b600061492f601c83614212565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c1603983614212565b91506149cc82614965565b604082019050919050565b600060208201905081810360008301526149f0816149b4565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a53602283614212565b9150614a5e826149f7565b604082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ae5603583614212565b9150614af082614a89565b604082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b77603283614212565b9150614b8282614b1b565b604082019050919050565b60006020820190508181036000830152614ba681614b6a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c09602683614212565b9150614c1482614bad565b604082019050919050565b60006020820190508181036000830152614c3881614bfc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614c75601b83614212565b9150614c8082614c3f565b602082019050919050565b60006020820190508181036000830152614ca481614c68565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d07602483614212565b9150614d1282614cab565b604082019050919050565b60006020820190508181036000830152614d3681614cfa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d99602283614212565b9150614da482614d3d565b604082019050919050565b60006020820190508181036000830152614dc881614d8c565b9050919050565b6000614dda826142c2565b9150614de5836142c2565b925082821015614df857614df7614728565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e5f602583614212565b9150614e6a82614e03565b604082019050919050565b60006020820190508181036000830152614e8e81614e52565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef1602383614212565b9150614efc82614e95565b604082019050919050565b60006020820190508181036000830152614f2081614ee4565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f83603183614212565b9150614f8e82614f27565b604082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fef601683614212565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150a7604983614212565b91506150b282615025565b606082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615139603583614212565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a5601383614212565b91506151b08261516f565b602082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615237603683614212565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b600081905092915050565b50565b600061528860008361526d565b915061529382615278565b600082019050919050565b60006152a98261527b565b9150819050919050565b60006060820190506152c860008301866143e8565b6152d560208301856143e8565b6152e260408301846143e8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615346602183614212565b9150615351826152ea565b604082019050919050565b6000602082019050818103600083015261537581615339565b9050919050565b600060808201905061539160008301876144c9565b61539e60208301866144c9565b6153ab60408301856144c9565b6153b860608301846143e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061542e816141ae565b92915050565b60006020828403121561544a57615449614177565b5b60006154588482850161541f565b91505092915050565b6000819050919050565b600061548661548161547c84615461565b61436e565b6142c2565b9050919050565b6154968161546b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154d18161419c565b82525050565b60006154e383836154c8565b60208301905092915050565b6000602082019050919050565b60006155078261549c565b61551181856154a7565b935061551c836154b8565b8060005b8381101561554d57815161553488826154d7565b975061553f836154ef565b925050600181019050615520565b5085935050505092915050565b600060a08201905061556f60008301886143e8565b61557c602083018761548d565b818103604083015261558e81866154fc565b905061559d60608301856144c9565b6155aa60808301846143e8565b9695505050505050565b600060c0820190506155c960008301896144c9565b6155d660208301886143e8565b6155e3604083018761548d565b6155f0606083018661548d565b6155fd60808301856144c9565b61560a60a08301846143e8565b979650505050505050565b600081519050615624816142cc565b92915050565b60008060006060848603121561564357615642614177565b5b600061565186828701615615565b935050602061566286828701615615565b925050604061567386828701615615565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a041abfd331d641d901a34cbf9bf7e9f973e22e6f7e925088866bc2d230db79d64736f6c63430008090033

Deployed Bytecode Sourcemap

26323:17433:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35598:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6371:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7375:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27867:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26398:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6691:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32854:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7593:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6591:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8057:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26456:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35779:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31562:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26808:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6807:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17959:148;;;;;;;;;;;;;:::i;:::-;;31425:129;;;;;;;;;;;;;:::i;:::-;;31962:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33365:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33713:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34762:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31013:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31762:148;;;;;;;;;;;;;:::i;:::-;;17317:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33605:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6479:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34897:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8365:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6942:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35382:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28088:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34572:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34138:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33119:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27188:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32349:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7166:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31047:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32144:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18262:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35598:173;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35713:13:::1;;;;;;;;;;;35681:46;;35702:9;35681:46;;;;;;;;;;;;35754:9;35738:13;;:25;;;;;;;;;;;;;;;;;;35598:173:::0;:::o;6371:100::-;6425:13;6458:5;6451:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6371:100;:::o;7375:210::-;7494:4;7516:39;7525:12;:10;:12::i;:::-;7539:7;7548:6;7516:8;:39::i;:::-;7573:4;7566:11;;7375:210;;;;:::o;27867:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26398:51::-;;;:::o;6691:108::-;6752:7;6779:12;;6772:19;;6691:108;:::o;32854:257::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32983:4:::1;32978:1;32962:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32961:26;;;;:::i;:::-;32950:6;:38;;32928:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;33097:6;33074:20;:29;;;;32854:257:::0;:::o;7593:456::-;7733:4;7750:220;7773:6;7794:12;:10;:12::i;:::-;7821:138;7877:6;7821:138;;;;;;;;;;;;;;;;;:11;:19;7833:6;7821:19;;;;;;;;;;;;;;;:33;7841:12;:10;:12::i;:::-;7821:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;7750:8;:220::i;:::-;7981:36;7991:6;7999:9;8010:6;7981:9;:36::i;:::-;8037:4;8030:11;;7593:456;;;;;:::o;6591:92::-;6649:5;6674:1;6667:8;;6591:92;:::o;8057:300::-;8172:4;8194:133;8217:12;:10;:12::i;:::-;8244:7;8266:50;8305:10;8266:11;:25;8278:12;:10;:12::i;:::-;8266:25;;;;;;;;;;;;;;;:34;8292:7;8266:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8194:8;:133::i;:::-;8345:4;8338:11;;8057:300;;;;:::o;26456:38::-;;;:::o;35779:126::-;35845:4;35869:19;:28;35889:7;35869:28;;;;;;;;;;;;;;;;;;;;;;;;;35862:35;;35779:126;;;:::o;31562:109::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31658:4:::1;31635:9;;:28;;;;;;;;;;;;;;;;;;31562:109:::0;:::o;26808:31::-;;;;;;;;;;;;;:::o;6807:127::-;6881:7;6908:9;:18;6918:7;6908:18;;;;;;;;;;;;;;;;6901:25;;6807:127;;;:::o;17959:148::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18066:1:::1;18029:40;;18050:6;;;;;;;;;;;18029:40;;;;;;;;;;;;18097:1;18080:6;;:19;;;;;;;;;;;;;;;;;;17959:148::o:0;31425:129::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31495:16:::1;;;;;;;;;;;31494:17;31486:26;;;::::0;::::1;;31542:4;31523:16;;:23;;;;;;;;;;;;;;;;;;31425:129::o:0;31962:121::-;32014:4;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32048:5:::1;32031:14;;:22;;;;;;;;;;;;;;;;;;32071:4;32064:11;;31962:121:::0;:::o;33365:144::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33497:4:::1;33455:31;:39;33487:6;33455:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33365:144:::0;;:::o;33713:417::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33885:13:::1;33867:15;:31;;;;33927:13;33909:15;:31;;;;33967:11;33951:13;:27;;;;34040:13;;34022:15;;34004;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;33989:12;:64;;;;34088:1;34072:12;;:17;;34064:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33713:417:::0;;;:::o;34762:127::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34868:13:::1;34846:10;:19;34857:7;34846:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34762:127:::0;;:::o;31013:27::-;;;;;;;;;;;;;:::o;31762:148::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31833:4:::1;31817:13;;:20;;;;;;;;;;;;;;;;;;31862:4;31848:11;;:18;;;;;;;;;;;;;;;;;;31890:12;31877:10;:25;;;;31762:148::o:0;17317:79::-;17355:7;17382:6;;;;;;;;;;;17375:13;;17317:79;:::o;33605:100::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33690:7:::1;33676:11;;:21;;;;;;;;;;;;;;;;;;33605:100:::0;:::o;6479:104::-;6535:13;6568:7;6561:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6479:104;:::o;34897:281::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35018:13:::1;35010:21;;:4;:21;;;;34988:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;35129:41;35158:4;35164:5;35129:28;:41::i;:::-;34897:281:::0;;:::o;8365:400::-;8485:4;8507:228;8530:12;:10;:12::i;:::-;8557:7;8579:145;8636:15;8579:145;;;;;;;;;;;;;;;;;:11;:25;8591:12;:10;:12::i;:::-;8579:25;;;;;;;;;;;;;;;:34;8605:7;8579:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;8507:8;:228::i;:::-;8753:4;8746:11;;8365:400;;;;:::o;6942:216::-;7064:4;7086:42;7096:12;:10;:12::i;:::-;7110:9;7121:6;7086:9;:42::i;:::-;7146:4;7139:11;;6942:216;;;;:::o;35382:208::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35519:15:::1;;;;;;;;;;;35476:59;;35499:18;35476:59;;;;;;;;;;;;35564:18;35546:15;;:36;;;;;;;;;;;;;;;;;;35382:208:::0;:::o;28088:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34572:182::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34688:8:::1;34657:19;:28;34677:7;34657:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34728:7;34712:34;;;34737:8;34712:34;;;;;;:::i;:::-;;;;;;;;34572:182:::0;;:::o;34138:426::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34312:13:::1;34293:16;:32;;;;34355:13;34336:16;:32;;;;34396:11;34379:14;:28;;;;34472:14;;34453:16;;34434;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;34418:13;:68;;;;34522:1;34505:13;;:18;;34497:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34138:426:::0;;;:::o;33119:238::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33253:4:::1;33246:3;33230:13;:11;:13::i;:::-;:19;;;;:::i;:::-;33229:28;;;;:::i;:::-;33218:6;:40;;33196:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;33343:6;33331:9;:18;;;;33119:238:::0;:::o;27188:39::-;;;;;;;;;;;;;:::o;32349:497::-;32457:4;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32536:6:::1;32531:1;32515:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32514:28;;;;:::i;:::-;32501:9;:41;;32479:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32693:4;32686:3;32670:13;:11;:13::i;:::-;:19;;;;:::i;:::-;32669:28;;;;:::i;:::-;32656:9;:41;;32634:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;32807:9;32786:18;:30;;;;32834:4;32827:11;;32349:497:::0;;;:::o;7166:201::-;7300:7;7332:11;:18;7344:5;7332:18;;;;;;;;;;;;;;;:27;7351:7;7332:27;;;;;;;;;;;;;;;;7325:34;;7166:201;;;;:::o;31047:28::-;;;;;;;;;;;;;:::o;32144:135::-;32204:4;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32244:5:::1;32221:20;;:28;;;;;;;;;;;;;;;;;;32267:4;32260:11;;32144:135:::0;:::o;18262:244::-;17539:12;:10;:12::i;:::-;17529:22;;:6;;;;;;;;;;;:22;;;17521:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18371:1:::1;18351:22;;:8;:22;;;;18343:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18461:8;18432:38;;18453:6;;;;;;;;;;;18432:38;;;;;;;;;;;;18490:8;18481:6;;:17;;;;;;;;;;;;;;;;;;18262:244:::0;:::o;12539:181::-;12597:7;12617:9;12633:1;12629;:5;;;;:::i;:::-;12617:17;;12658:1;12653;:6;;12645:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;12711:1;12704:8;;;12539:181;;;;:::o;382:98::-;435:7;462:10;455:17;;382:98;:::o;11756:380::-;11909:1;11892:19;;:5;:19;;;;11884:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11990:1;11971:21;;:7;:21;;;;11963:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12074:6;12044:11;:18;12056:5;12044:18;;;;;;;;;;;;;;;:27;12063:7;12044:27;;;;;;;;;;;;;;;:36;;;;12112:7;12096:32;;12105:5;12096:32;;;12121:6;12096:32;;;;;;:::i;:::-;;;;;;;;11756:380;;;:::o;13167:226::-;13287:7;13320:1;13315;:6;;13323:12;13307:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13347:9;13363:1;13359;:5;;;;:::i;:::-;13347:17;;13384:1;13377:8;;;13167:226;;;;;:::o;35963:4957::-;36111:1;36095:18;;:4;:18;;;;36087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36188:1;36174:16;;:2;:16;;;;36166:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36264:10;:14;36275:2;36264:14;;;;;;;;;;;;;;;;;;;;;;;;;36263:15;:36;;;;;36283:10;:16;36294:4;36283:16;;;;;;;;;;;;;;;;;;;;;;;;;36282:17;36263:36;36241:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;36401:1;36391:6;:11;36387:93;;;36419:28;36435:4;36441:2;36445:1;36419:15;:28::i;:::-;36462:7;;36387:93;36496:14;;;;;;;;;;;36492:2308;;;36557:7;:5;:7::i;:::-;36549:15;;:4;:15;;;;:49;;;;;36591:7;:5;:7::i;:::-;36585:13;;:2;:13;;;;36549:49;:86;;;;;36633:1;36619:16;;:2;:16;;;;36549:86;:128;;;;;36670:6;36656:21;;:2;:21;;;;36549:128;:158;;;;;36699:8;;;;;;;;;;;36698:9;36549:158;36527:2262;;;36747:13;;;;;;;;;;;36742:223;;36819:19;:25;36839:4;36819:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36848:19;:23;36868:2;36848:23;;;;;;;;;;;;;;;;;;;;;;;;;36819:52;36785:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;36742:223;37121:20;;;;;;;;;;;37117:608;;;37202:7;:5;:7::i;:::-;37196:13;;:2;:13;;;;:72;;;;;37252:15;37238:30;;:2;:30;;;;37196:72;:129;;;;;37311:13;37297:28;;:2;:28;;;;37196:129;37166:540;;;37456:12;37414:28;:39;37443:9;37414:39;;;;;;;;;;;;;;;;:54;37376:225;;;;;;;;;;;;:::i;:::-;;;;;;;;;37670:12;37628:28;:39;37657:9;37628:39;;;;;;;;;;;;;;;:54;;;;37166:540;37117:608;37799:25;:31;37825:4;37799:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37856:31;:35;37888:2;37856:35;;;;;;;;;;;;;;;;;;;;;;;;;37855:36;37799:92;37773:1001;;;37978:20;;37968:6;:30;;37934:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;38160:9;;38143:13;38153:2;38143:9;:13::i;:::-;38134:6;:22;;;;:::i;:::-;:35;;38126:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37773:1001;;;38291:25;:29;38317:2;38291:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38346:31;:37;38378:4;38346:37;;;;;;;;;;;;;;;;;;;;;;;;;38345:38;38291:92;38265:509;;;38470:20;;38460:6;:30;;38426:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:509;;;38627:31;:35;38659:2;38627:35;;;;;;;;;;;;;;;;;;;;;;;;;38622:152;;38721:9;;38704:13;38714:2;38704:9;:13::i;:::-;38695:6;:22;;;;:::i;:::-;:35;;38687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38622:152;38265:509;37773:1001;36527:2262;36492:2308;38887:1;38874:10;;:14;;;;:::i;:::-;38857:12;:32;;:68;;;;;38912:13;38906:19;;:2;:19;;;;38857:68;:142;;;;;38956:42;38942:57;;:2;:57;;;;38857:142;38839:220;;;39043:4;39026:10;:14;39037:2;39026:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38839:220;39071:28;39102:24;39120:4;39102:9;:24::i;:::-;39071:55;;39139:12;39178:18;;39154:20;:42;;39139:57;;39227:7;:35;;;;;39251:11;;;;;;;;;;;39227:35;:61;;;;;39280:8;;;;;;;;;;;39279:9;39227:61;:110;;;;;39306:25;:31;39332:4;39306:31;;;;;;;;;;;;;;;;;;;;;;;;;39305:32;39227:110;:153;;;;;39355:19;:25;39375:4;39355:25;;;;;;;;;;;;;;;;;;;;;;;;;39354:26;39227:153;:194;;;;;39398:19;:23;39418:2;39398:23;;;;;;;;;;;;;;;;;;;;;;;;;39397:24;39227:194;39209:326;;;39459:4;39448:8;;:15;;;;;;;;;;;;;;;;;;39480:10;:8;:10::i;:::-;39518:5;39507:8;;:16;;;;;;;;;;;;;;;;;;39209:326;39547:12;39563:8;;;;;;;;;;;39562:9;39547:24;;39673:19;:25;39693:4;39673:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39702:19;:23;39722:2;39702:23;;;;;;;;;;;;;;;;;;;;;;;;;39673:52;39669:100;;;39752:5;39742:15;;39669:100;39781:12;39886:7;39882:985;;;39938:25;:29;39964:2;39938:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39987:1;39971:13;;:17;39938:50;39934:784;;;40016:34;40046:3;40016:25;40027:13;;40016:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40009:41;;40119:13;;40099:16;;40092:4;:23;;;;:::i;:::-;40091:41;;;;:::i;:::-;40069:18;;:63;;;;;;;:::i;:::-;;;;;;;;40197:13;;40179:14;;40172:4;:21;;;;:::i;:::-;40171:39;;;;:::i;:::-;40151:16;;:59;;;;;;;:::i;:::-;;;;;;;;40279:13;;40259:16;;40252:4;:23;;;;:::i;:::-;40251:41;;;;:::i;:::-;40229:18;;:63;;;;;;;:::i;:::-;;;;;;;;39934:784;;;40354:25;:31;40380:4;40354:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40404:1;40389:12;;:16;40354:51;40350:368;;;40433:33;40462:3;40433:24;40444:12;;40433:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40426:40;;40534:12;;40515:15;;40508:4;:22;;;;:::i;:::-;40507:39;;;;:::i;:::-;40485:18;;:61;;;;;;;:::i;:::-;;;;;;;;40610:12;;40593:13;;40586:4;:20;;;;:::i;:::-;40585:37;;;;:::i;:::-;40565:16;;:57;;;;;;;:::i;:::-;;;;;;;;40690:12;;40671:15;;40664:4;:22;;;;:::i;:::-;40663:39;;;;:::i;:::-;40641:18;;:61;;;;;;;:::i;:::-;;;;;;;;40350:368;39934:784;40745:1;40738:4;:8;40734:91;;;40767:42;40783:4;40797;40804;40767:15;:42::i;:::-;40734:91;40851:4;40841:14;;;;;:::i;:::-;;;39882:985;40879:33;40895:4;40901:2;40905:6;40879:15;:33::i;:::-;36076:4844;;;;35963:4957;;;;:::o;35186:188::-;35303:5;35269:25;:31;35295:4;35269:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35360:5;35326:40;;35354:4;35326:40;;;;;;;;;;;;35186:188;;:::o;9255:610::-;9413:1;9395:20;;:6;:20;;;;9387:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9497:1;9476:23;;:9;:23;;;;9468:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9552:47;9573:6;9581:9;9592:6;9552:20;:47::i;:::-;9632:108;9668:6;9632:108;;;;;;;;;;;;;;;;;:9;:17;9642:6;9632:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;9612:9;:17;9622:6;9612:17;;;;;;;;;;;;;;;:128;;;;9774:32;9799:6;9774:9;:20;9784:9;9774:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9751:9;:20;9761:9;9751:20;;;;;;;;;;;;;;;:55;;;;9839:9;9822:35;;9831:6;9822:35;;;9850:6;9822:35;;;;;;:::i;:::-;;;;;;;;9255:610;;;:::o;42061:1692::-;42100:23;42126:24;42144:4;42126:9;:24::i;:::-;42100:50;;42161:25;42257:16;;42223:18;;42189;;:52;;;;:::i;:::-;:84;;;;:::i;:::-;42161:112;;42284:12;42332:1;42313:15;:20;:46;;;;42358:1;42337:17;:22;42313:46;42309:85;;;42376:7;;;;;42309:85;42449:2;42428:18;;:23;;;;:::i;:::-;42410:15;:41;42406:115;;;42507:2;42486:18;;:23;;;;:::i;:::-;42468:41;;42406:115;42582:23;42695:1;42662:17;42627:18;;42609:15;:36;;;;:::i;:::-;42608:71;;;;:::i;:::-;:88;;;;:::i;:::-;42582:114;;42707:26;42736:36;42756:15;42736;:19;;:36;;;;:::i;:::-;42707:65;;42785:25;42813:21;42785:49;;42847:36;42864:18;42847:16;:36::i;:::-;42896:18;42917:44;42943:17;42917:21;:25;;:44;;;;:::i;:::-;42896:65;;42974:23;43000:81;43053:17;43000:34;43015:18;;43000:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;42974:107;;43092:21;43116:55;43153:17;43116:32;43131:16;;43116:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;43092:79;;43182:23;43239:13;43221:15;43208:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;43182:70;;43286:1;43265:18;:22;;;;43319:1;43298:18;:22;;;;43350:1;43331:16;:20;;;;43386:13;;;;;;;;;;;43378:27;;43413:13;43378:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43364:67;;;;;43466:1;43448:15;:19;:42;;;;;43489:1;43471:15;:19;43448:42;43444:212;;;43507:46;43520:15;43537;43507:12;:46::i;:::-;43573:71;43588:18;43608:15;43625:18;;43573:71;;;;;;;;:::i;:::-;;;;;;;;43444:212;43690:15;;;;;;;;;;;43682:29;;43719:21;43682:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43668:77;;;;;42089:1664;;;;;;;;;;42061:1692;:::o;13652:471::-;13710:7;13960:1;13955;:6;13951:47;;;13985:1;13978:8;;;;13951:47;14010:9;14026:1;14022;:5;;;;:::i;:::-;14010:17;;14055:1;14050;14046;:5;;;;:::i;:::-;:10;14038:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14114:1;14107:8;;;13652:471;;;;;:::o;14599:132::-;14657:7;14684:39;14688:1;14691;14684:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14677:46;;14599:132;;;;:::o;31084:333::-;31239:1;31223:18;;:4;:18;;;:38;;;;31259:1;31245:16;;:2;:16;;;31223:38;31219:51;;;31263:7;;31219:51;31285:16;;;;;;;;;;;31284:17;:53;;;;;31335:1;31305:32;;31313:9;;;;;;;;;;;31305:32;;;;31284:53;31280:129;;;31352:9;;;;;;;;;;;:27;;;31380:10;31392:4;31398:2;31402:6;31352:57;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31280:129;31084:333;;;;:::o;12728:136::-;12786:7;12813:43;12817:1;12820;12813:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;12806:50;;12728:136;;;;:::o;40928:589::-;41054:21;41092:1;41078:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41054:40;;41123:4;41105;41110:1;41105:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41149:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41139:4;41144:1;41139:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41184:62;41201:4;41216:15;41234:11;41184:8;:62::i;:::-;41285:15;:66;;;41366:11;41392:1;41436:4;41463;41483:15;41285:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40983:534;40928:589;:::o;41525:528::-;41673:62;41690:4;41705:15;41723:11;41673:8;:62::i;:::-;41778:15;:31;;;41817:9;41850:4;41870:11;41896:1;41939;41990:13;;;;;;;;;;;42019:15;41778:267;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41525:528;;:::o;15227:312::-;15347:7;15379:1;15375;:5;15382:12;15367:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15406:9;15422:1;15418;:5;;;;:::i;:::-;15406:17;;15530:1;15523:8;;;15227:312;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:145::-;8330:9;8363:37;8394:5;8363:37;:::i;:::-;8350:50;;8261:145;;;:::o;8412:169::-;8518:56;8568:5;8518:56;:::i;:::-;8513:3;8506:69;8412:169;;:::o;8587:260::-;8699:4;8737:2;8726:9;8722:18;8714:26;;8750:90;8837:1;8826:9;8822:17;8813:6;8750:90;:::i;:::-;8587:260;;;;:::o;8853:323::-;8909:6;8958:2;8946:9;8937:7;8933:23;8929:32;8926:119;;;8964:79;;:::i;:::-;8926:119;9084:1;9109:50;9151:7;9142:6;9131:9;9127:22;9109:50;:::i;:::-;9099:60;;9055:114;8853:323;;;;:::o;9182:474::-;9250:6;9258;9307:2;9295:9;9286:7;9282:23;9278:32;9275:119;;;9313:79;;:::i;:::-;9275:119;9433:1;9458:53;9503:7;9494:6;9483:9;9479:22;9458:53;:::i;:::-;9448:63;;9404:117;9560:2;9586:53;9631:7;9622:6;9611:9;9607:22;9586:53;:::i;:::-;9576:63;;9531:118;9182:474;;;;;:::o;9662:182::-;9802:34;9798:1;9790:6;9786:14;9779:58;9662:182;:::o;9850:366::-;9992:3;10013:67;10077:2;10072:3;10013:67;:::i;:::-;10006:74;;10089:93;10178:3;10089:93;:::i;:::-;10207:2;10202:3;10198:12;10191:19;;9850:366;;;:::o;10222:419::-;10388:4;10426:2;10415:9;10411:18;10403:26;;10475:9;10469:4;10465:20;10461:1;10450:9;10446:17;10439:47;10503:131;10629:4;10503:131;:::i;:::-;10495:139;;10222:419;;;:::o;10647:180::-;10695:77;10692:1;10685:88;10792:4;10789:1;10782:15;10816:4;10813:1;10806:15;10833:320;10877:6;10914:1;10908:4;10904:12;10894:22;;10961:1;10955:4;10951:12;10982:18;10972:81;;11038:4;11030:6;11026:17;11016:27;;10972:81;11100:2;11092:6;11089:14;11069:18;11066:38;11063:84;;;11119:18;;:::i;:::-;11063:84;10884:269;10833:320;;;:::o;11159:180::-;11207:77;11204:1;11197:88;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11345:348;11385:7;11408:20;11426:1;11408:20;:::i;:::-;11403:25;;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11630:1;11562:66;11558:74;11555:1;11552:81;11547:1;11540:9;11533:17;11529:105;11526:131;;;11637:18;;:::i;:::-;11526:131;11685:1;11682;11678:9;11667:20;;11345:348;;;;:::o;11699:180::-;11747:77;11744:1;11737:88;11844:4;11841:1;11834:15;11868:4;11865:1;11858:15;11885:185;11925:1;11942:20;11960:1;11942:20;:::i;:::-;11937:25;;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12015:1;12005:35;;12020:18;;:::i;:::-;12005:35;12062:1;12059;12055:9;12050:14;;11885:185;;;;:::o;12076:234::-;12216:34;12212:1;12204:6;12200:14;12193:58;12285:17;12280:2;12272:6;12268:15;12261:42;12076:234;:::o;12316:366::-;12458:3;12479:67;12543:2;12538:3;12479:67;:::i;:::-;12472:74;;12555:93;12644:3;12555:93;:::i;:::-;12673:2;12668:3;12664:12;12657:19;;12316:366;;;:::o;12688:419::-;12854:4;12892:2;12881:9;12877:18;12869:26;;12941:9;12935:4;12931:20;12927:1;12916:9;12912:17;12905:47;12969:131;13095:4;12969:131;:::i;:::-;12961:139;;12688:419;;;:::o;13113:305::-;13153:3;13172:20;13190:1;13172:20;:::i;:::-;13167:25;;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13360:1;13292:66;13288:74;13285:1;13282:81;13279:107;;;13366:18;;:::i;:::-;13279:107;13410:1;13407;13403:9;13396:16;;13113:305;;;;:::o;13424:178::-;13564:30;13560:1;13552:6;13548:14;13541:54;13424:178;:::o;13608:366::-;13750:3;13771:67;13835:2;13830:3;13771:67;:::i;:::-;13764:74;;13847:93;13936:3;13847:93;:::i;:::-;13965:2;13960:3;13956:12;13949:19;;13608:366;;;:::o;13980:419::-;14146:4;14184:2;14173:9;14169:18;14161:26;;14233:9;14227:4;14223:20;14219:1;14208:9;14204:17;14197:47;14261:131;14387:4;14261:131;:::i;:::-;14253:139;;13980:419;;;:::o;14405:244::-;14545:34;14541:1;14533:6;14529:14;14522:58;14614:27;14609:2;14601:6;14597:15;14590:52;14405:244;:::o;14655:366::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:419::-;15193:4;15231:2;15220:9;15216:18;15208:26;;15280:9;15274:4;15270:20;15266:1;15255:9;15251:17;15244:47;15308:131;15434:4;15308:131;:::i;:::-;15300:139;;15027:419;;;:::o;15452:221::-;15592:34;15588:1;15580:6;15576:14;15569:58;15661:4;15656:2;15648:6;15644:15;15637:29;15452:221;:::o;15679:366::-;15821:3;15842:67;15906:2;15901:3;15842:67;:::i;:::-;15835:74;;15918:93;16007:3;15918:93;:::i;:::-;16036:2;16031:3;16027:12;16020:19;;15679:366;;;:::o;16051:419::-;16217:4;16255:2;16244:9;16240:18;16232:26;;16304:9;16298:4;16294:20;16290:1;16279:9;16275:17;16268:47;16332:131;16458:4;16332:131;:::i;:::-;16324:139;;16051:419;;;:::o;16476:240::-;16616:34;16612:1;16604:6;16600:14;16593:58;16685:23;16680:2;16672:6;16668:15;16661:48;16476:240;:::o;16722:366::-;16864:3;16885:67;16949:2;16944:3;16885:67;:::i;:::-;16878:74;;16961:93;17050:3;16961:93;:::i;:::-;17079:2;17074:3;17070:12;17063:19;;16722:366;;;:::o;17094:419::-;17260:4;17298:2;17287:9;17283:18;17275:26;;17347:9;17341:4;17337:20;17333:1;17322:9;17318:17;17311:47;17375:131;17501:4;17375:131;:::i;:::-;17367:139;;17094:419;;;:::o;17519:237::-;17659:34;17655:1;17647:6;17643:14;17636:58;17728:20;17723:2;17715:6;17711:15;17704:45;17519:237;:::o;17762:366::-;17904:3;17925:67;17989:2;17984:3;17925:67;:::i;:::-;17918:74;;18001:93;18090:3;18001:93;:::i;:::-;18119:2;18114:3;18110:12;18103:19;;17762:366;;;:::o;18134:419::-;18300:4;18338:2;18327:9;18323:18;18315:26;;18387:9;18381:4;18377:20;18373:1;18362:9;18358:17;18351:47;18415:131;18541:4;18415:131;:::i;:::-;18407:139;;18134:419;;;:::o;18559:225::-;18699:34;18695:1;18687:6;18683:14;18676:58;18768:8;18763:2;18755:6;18751:15;18744:33;18559:225;:::o;18790:366::-;18932:3;18953:67;19017:2;19012:3;18953:67;:::i;:::-;18946:74;;19029:93;19118:3;19029:93;:::i;:::-;19147:2;19142:3;19138:12;19131:19;;18790:366;;;:::o;19162:419::-;19328:4;19366:2;19355:9;19351:18;19343:26;;19415:9;19409:4;19405:20;19401:1;19390:9;19386:17;19379:47;19443:131;19569:4;19443:131;:::i;:::-;19435:139;;19162:419;;;:::o;19587:177::-;19727:29;19723:1;19715:6;19711:14;19704:53;19587:177;:::o;19770:366::-;19912:3;19933:67;19997:2;19992:3;19933:67;:::i;:::-;19926:74;;20009:93;20098:3;20009:93;:::i;:::-;20127:2;20122:3;20118:12;20111:19;;19770:366;;;:::o;20142:419::-;20308:4;20346:2;20335:9;20331:18;20323:26;;20395:9;20389:4;20385:20;20381:1;20370:9;20366:17;20359:47;20423:131;20549:4;20423:131;:::i;:::-;20415:139;;20142:419;;;:::o;20567:223::-;20707:34;20703:1;20695:6;20691:14;20684:58;20776:6;20771:2;20763:6;20759:15;20752:31;20567:223;:::o;20796:366::-;20938:3;20959:67;21023:2;21018:3;20959:67;:::i;:::-;20952:74;;21035:93;21124:3;21035:93;:::i;:::-;21153:2;21148:3;21144:12;21137:19;;20796:366;;;:::o;21168:419::-;21334:4;21372:2;21361:9;21357:18;21349:26;;21421:9;21415:4;21411:20;21407:1;21396:9;21392:17;21385:47;21449:131;21575:4;21449:131;:::i;:::-;21441:139;;21168:419;;;:::o;21593:221::-;21733:34;21729:1;21721:6;21717:14;21710:58;21802:4;21797:2;21789:6;21785:15;21778:29;21593:221;:::o;21820:366::-;21962:3;21983:67;22047:2;22042:3;21983:67;:::i;:::-;21976:74;;22059:93;22148:3;22059:93;:::i;:::-;22177:2;22172:3;22168:12;22161:19;;21820:366;;;:::o;22192:419::-;22358:4;22396:2;22385:9;22381:18;22373:26;;22445:9;22439:4;22435:20;22431:1;22420:9;22416:17;22409:47;22473:131;22599:4;22473:131;:::i;:::-;22465:139;;22192:419;;;:::o;22617:191::-;22657:4;22677:20;22695:1;22677:20;:::i;:::-;22672:25;;22711:20;22729:1;22711:20;:::i;:::-;22706:25;;22750:1;22747;22744:8;22741:34;;;22755:18;;:::i;:::-;22741:34;22800:1;22797;22793:9;22785:17;;22617:191;;;;:::o;22814:224::-;22954:34;22950:1;22942:6;22938:14;22931:58;23023:7;23018:2;23010:6;23006:15;22999:32;22814:224;:::o;23044:366::-;23186:3;23207:67;23271:2;23266:3;23207:67;:::i;:::-;23200:74;;23283:93;23372:3;23283:93;:::i;:::-;23401:2;23396:3;23392:12;23385:19;;23044:366;;;:::o;23416:419::-;23582:4;23620:2;23609:9;23605:18;23597:26;;23669:9;23663:4;23659:20;23655:1;23644:9;23640:17;23633:47;23697:131;23823:4;23697:131;:::i;:::-;23689:139;;23416:419;;;:::o;23841:222::-;23981:34;23977:1;23969:6;23965:14;23958:58;24050:5;24045:2;24037:6;24033:15;24026:30;23841:222;:::o;24069:366::-;24211:3;24232:67;24296:2;24291:3;24232:67;:::i;:::-;24225:74;;24308:93;24397:3;24308:93;:::i;:::-;24426:2;24421:3;24417:12;24410:19;;24069:366;;;:::o;24441:419::-;24607:4;24645:2;24634:9;24630:18;24622:26;;24694:9;24688:4;24684:20;24680:1;24669:9;24665:17;24658:47;24722:131;24848:4;24722:131;:::i;:::-;24714:139;;24441:419;;;:::o;24866:236::-;25006:34;25002:1;24994:6;24990:14;24983:58;25075:19;25070:2;25062:6;25058:15;25051:44;24866:236;:::o;25108:366::-;25250:3;25271:67;25335:2;25330:3;25271:67;:::i;:::-;25264:74;;25347:93;25436:3;25347:93;:::i;:::-;25465:2;25460:3;25456:12;25449:19;;25108:366;;;:::o;25480:419::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25480:419;;;:::o;25905:172::-;26045:24;26041:1;26033:6;26029:14;26022:48;25905:172;:::o;26083:366::-;26225:3;26246:67;26310:2;26305:3;26246:67;:::i;:::-;26239:74;;26322:93;26411:3;26322:93;:::i;:::-;26440:2;26435:3;26431:12;26424:19;;26083:366;;;:::o;26455:419::-;26621:4;26659:2;26648:9;26644:18;26636:26;;26708:9;26702:4;26698:20;26694:1;26683:9;26679:17;26672:47;26736:131;26862:4;26736:131;:::i;:::-;26728:139;;26455:419;;;:::o;26880:297::-;27020:34;27016:1;27008:6;27004:14;26997:58;27089:34;27084:2;27076:6;27072:15;27065:59;27158:11;27153:2;27145:6;27141:15;27134:36;26880:297;:::o;27183:366::-;27325:3;27346:67;27410:2;27405:3;27346:67;:::i;:::-;27339:74;;27422:93;27511:3;27422:93;:::i;:::-;27540:2;27535:3;27531:12;27524:19;;27183:366;;;:::o;27555:419::-;27721:4;27759:2;27748:9;27744:18;27736:26;;27808:9;27802:4;27798:20;27794:1;27783:9;27779:17;27772:47;27836:131;27962:4;27836:131;:::i;:::-;27828:139;;27555:419;;;:::o;27980:240::-;28120:34;28116:1;28108:6;28104:14;28097:58;28189:23;28184:2;28176:6;28172:15;28165:48;27980:240;:::o;28226:366::-;28368:3;28389:67;28453:2;28448:3;28389:67;:::i;:::-;28382:74;;28465:93;28554:3;28465:93;:::i;:::-;28583:2;28578:3;28574:12;28567:19;;28226:366;;;:::o;28598:419::-;28764:4;28802:2;28791:9;28787:18;28779:26;;28851:9;28845:4;28841:20;28837:1;28826:9;28822:17;28815:47;28879:131;29005:4;28879:131;:::i;:::-;28871:139;;28598:419;;;:::o;29023:169::-;29163:21;29159:1;29151:6;29147:14;29140:45;29023:169;:::o;29198:366::-;29340:3;29361:67;29425:2;29420:3;29361:67;:::i;:::-;29354:74;;29437:93;29526:3;29437:93;:::i;:::-;29555:2;29550:3;29546:12;29539:19;;29198:366;;;:::o;29570:419::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:241::-;30135:34;30131:1;30123:6;30119:14;30112:58;30204:24;30199:2;30191:6;30187:15;30180:49;29995:241;:::o;30242:366::-;30384:3;30405:67;30469:2;30464:3;30405:67;:::i;:::-;30398:74;;30481:93;30570:3;30481:93;:::i;:::-;30599:2;30594:3;30590:12;30583:19;;30242:366;;;:::o;30614:419::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:147::-;31140:11;31177:3;31162:18;;31039:147;;;;:::o;31192:114::-;;:::o;31312:398::-;31471:3;31492:83;31573:1;31568:3;31492:83;:::i;:::-;31485:90;;31584:93;31673:3;31584:93;:::i;:::-;31702:1;31697:3;31693:11;31686:18;;31312:398;;;:::o;31716:379::-;31900:3;31922:147;32065:3;31922:147;:::i;:::-;31915:154;;32086:3;32079:10;;31716:379;;;:::o;32101:442::-;32250:4;32288:2;32277:9;32273:18;32265:26;;32301:71;32369:1;32358:9;32354:17;32345:6;32301:71;:::i;:::-;32382:72;32450:2;32439:9;32435:18;32426:6;32382:72;:::i;:::-;32464;32532:2;32521:9;32517:18;32508:6;32464:72;:::i;:::-;32101:442;;;;;;:::o;32549:220::-;32689:34;32685:1;32677:6;32673:14;32666:58;32758:3;32753:2;32745:6;32741:15;32734:28;32549:220;:::o;32775:366::-;32917:3;32938:67;33002:2;32997:3;32938:67;:::i;:::-;32931:74;;33014:93;33103:3;33014:93;:::i;:::-;33132:2;33127:3;33123:12;33116:19;;32775:366;;;:::o;33147:419::-;33313:4;33351:2;33340:9;33336:18;33328:26;;33400:9;33394:4;33390:20;33386:1;33375:9;33371:17;33364:47;33428:131;33554:4;33428:131;:::i;:::-;33420:139;;33147:419;;;:::o;33572:553::-;33749:4;33787:3;33776:9;33772:19;33764:27;;33801:71;33869:1;33858:9;33854:17;33845:6;33801:71;:::i;:::-;33882:72;33950:2;33939:9;33935:18;33926:6;33882:72;:::i;:::-;33964;34032:2;34021:9;34017:18;34008:6;33964:72;:::i;:::-;34046;34114:2;34103:9;34099:18;34090:6;34046:72;:::i;:::-;33572:553;;;;;;;:::o;34131:180::-;34179:77;34176:1;34169:88;34276:4;34273:1;34266:15;34300:4;34297:1;34290:15;34317:180;34365:77;34362:1;34355:88;34462:4;34459:1;34452:15;34486:4;34483:1;34476:15;34503:143;34560:5;34591:6;34585:13;34576:22;;34607:33;34634:5;34607:33;:::i;:::-;34503:143;;;;:::o;34652:351::-;34722:6;34771:2;34759:9;34750:7;34746:23;34742:32;34739:119;;;34777:79;;:::i;:::-;34739:119;34897:1;34922:64;34978:7;34969:6;34958:9;34954:22;34922:64;:::i;:::-;34912:74;;34868:128;34652:351;;;;:::o;35009:85::-;35054:7;35083:5;35072:16;;35009:85;;;:::o;35100:158::-;35158:9;35191:61;35209:42;35218:32;35244:5;35218:32;:::i;:::-;35209:42;:::i;:::-;35191:61;:::i;:::-;35178:74;;35100:158;;;:::o;35264:147::-;35359:45;35398:5;35359:45;:::i;:::-;35354:3;35347:58;35264:147;;:::o;35417:114::-;35484:6;35518:5;35512:12;35502:22;;35417:114;;;:::o;35537:184::-;35636:11;35670:6;35665:3;35658:19;35710:4;35705:3;35701:14;35686:29;;35537:184;;;;:::o;35727:132::-;35794:4;35817:3;35809:11;;35847:4;35842:3;35838:14;35830:22;;35727:132;;;:::o;35865:108::-;35942:24;35960:5;35942:24;:::i;:::-;35937:3;35930:37;35865:108;;:::o;35979:179::-;36048:10;36069:46;36111:3;36103:6;36069:46;:::i;:::-;36147:4;36142:3;36138:14;36124:28;;35979:179;;;;:::o;36164:113::-;36234:4;36266;36261:3;36257:14;36249:22;;36164:113;;;:::o;36313:732::-;36432:3;36461:54;36509:5;36461:54;:::i;:::-;36531:86;36610:6;36605:3;36531:86;:::i;:::-;36524:93;;36641:56;36691:5;36641:56;:::i;:::-;36720:7;36751:1;36736:284;36761:6;36758:1;36755:13;36736:284;;;36837:6;36831:13;36864:63;36923:3;36908:13;36864:63;:::i;:::-;36857:70;;36950:60;37003:6;36950:60;:::i;:::-;36940:70;;36796:224;36783:1;36780;36776:9;36771:14;;36736:284;;;36740:14;37036:3;37029:10;;36437:608;;;36313:732;;;;:::o;37051:831::-;37314:4;37352:3;37341:9;37337:19;37329:27;;37366:71;37434:1;37423:9;37419:17;37410:6;37366:71;:::i;:::-;37447:80;37523:2;37512:9;37508:18;37499:6;37447:80;:::i;:::-;37574:9;37568:4;37564:20;37559:2;37548:9;37544:18;37537:48;37602:108;37705:4;37696:6;37602:108;:::i;:::-;37594:116;;37720:72;37788:2;37777:9;37773:18;37764:6;37720:72;:::i;:::-;37802:73;37870:3;37859:9;37855:19;37846:6;37802:73;:::i;:::-;37051:831;;;;;;;;:::o;37888:807::-;38137:4;38175:3;38164:9;38160:19;38152:27;;38189:71;38257:1;38246:9;38242:17;38233:6;38189:71;:::i;:::-;38270:72;38338:2;38327:9;38323:18;38314:6;38270:72;:::i;:::-;38352:80;38428:2;38417:9;38413:18;38404:6;38352:80;:::i;:::-;38442;38518:2;38507:9;38503:18;38494:6;38442:80;:::i;:::-;38532:73;38600:3;38589:9;38585:19;38576:6;38532:73;:::i;:::-;38615;38683:3;38672:9;38668:19;38659:6;38615:73;:::i;:::-;37888:807;;;;;;;;;:::o;38701:143::-;38758:5;38789:6;38783:13;38774:22;;38805:33;38832:5;38805:33;:::i;:::-;38701:143;;;;:::o;38850:663::-;38938:6;38946;38954;39003:2;38991:9;38982:7;38978:23;38974:32;38971:119;;;39009:79;;:::i;:::-;38971:119;39129:1;39154:64;39210:7;39201:6;39190:9;39186:22;39154:64;:::i;:::-;39144:74;;39100:128;39267:2;39293:64;39349:7;39340:6;39329:9;39325:22;39293:64;:::i;:::-;39283:74;;39238:129;39406:2;39432:64;39488:7;39479:6;39468:9;39464:22;39432:64;:::i;:::-;39422:74;;39377:129;38850:663;;;;;:::o

Swarm Source

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