ETH Price: $3,142.51 (+3.82%)

Token

Mocha Inu (MOCHA)
 

Overview

Max Total Supply

1,000,000,000,000 MOCHA

Holders

233

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
MochaInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 6 of 7: MochaInu.sol
pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

import "./IERC20.sol";
import "./Ownable.sol";
import "./Address.sol";
import "./Context.sol";
import "./IUniswapRouter.sol";
import "./IUniswapFactory.sol";

contract MochaInu is Context, IERC20, Ownable {
	using Address for address payable;

	string constant NAME = "Mocha Inu";
	string constant SYMBOL = "MOCHA";
	uint8 constant DECIMALS = 9;

	uint256 constant MAX_UINT = 2 ** 256 - 1;
	address constant ROUTER_ADDRESS = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
	address constant ZERO_ADDRESS = address(0);
	address constant DEAD_ADDRESS = address(57005);

	mapping(address => uint256) rOwned;
	mapping(address => uint256) tOwned;

	mapping(address => mapping(address => uint256)) allowances;

	mapping(address => bool) public isExcludedFromFees;
	mapping(address => bool) public isExcludedFromRewards;
	mapping(address => bool) public isExcludedFromMaxWallet;
	address[] excluded;

	mapping(address => bool) public isBot;

	uint256 tTotal = 10 ** 12 * 10 ** DECIMALS;
	uint256 rTotal = (MAX_UINT - (MAX_UINT % tTotal));

	uint256 public maxTxAmountBuy = tTotal / 200; // 0.5% of supply
	uint256 public maxTxAmountSell = tTotal / 200; // 0.5% of supply
	uint256 public maxWalletAmount = tTotal / 100; // 1% of supply

	uint256 launchedAt;

	address payable marketingAddress;
	address payable buybackAddress;

	mapping(address => bool) automatedMarketMakerPairs;

	bool areFeesBeingProcessed;
	bool public isFeeProcessingEnabled = true;
	uint256 public feeProcessingThreshold = tTotal / 500;

	IUniswapRouter router;
	address pairAddress;

	struct FeeSet {
		uint256 reflectFee;
		uint256 buybackFee;
		uint256 marketingFee;
		uint256 liquidityFee;
	}

	FeeSet public fees = FeeSet({
		reflectFee: 2,
		buybackFee: 3,
		marketingFee: 5,
		liquidityFee: 2
	});

	struct ReflectValueSet {
		uint256 rAmount;
		uint256 rTransferAmount;
		uint256 rReflectFee;
		uint256 rOtherFee;
		uint256 tTransferAmount;
		uint256 tReflectFee;
		uint256 tOtherFee;
	}

	modifier lockTheSwap {
		areFeesBeingProcessed = true;
		_;
		areFeesBeingProcessed = false;
	}

	constructor() {
		address self = address(this);

		rOwned[owner()] = rTotal;

		router = IUniswapRouter(ROUTER_ADDRESS);
		pairAddress = IUniswapFactory(router.factory()).createPair(self, router.WETH());

		automatedMarketMakerPairs[pairAddress] = true;

		marketingAddress = payable(msg.sender);
		buybackAddress = payable(msg.sender);

		isExcludedFromFees[owner()] = true;
		isExcludedFromFees[marketingAddress] = true;
		isExcludedFromFees[self] = true;
		isExcludedFromFees[DEAD_ADDRESS] = true;

		isExcludedFromMaxWallet[owner()] = true;
		isExcludedFromMaxWallet[marketingAddress] = true;
		isExcludedFromMaxWallet[self] = true;
		isExcludedFromMaxWallet[pairAddress] = true;
		isExcludedFromMaxWallet[DEAD_ADDRESS] = true;

		emit Transfer(ZERO_ADDRESS, owner(), tTotal);
	}

	function name() public pure returns (string memory) {
		return NAME;
	}

	function symbol() public pure returns (string memory) {
		return SYMBOL;
	}

	function decimals() public pure returns (uint8) {
		return DECIMALS;
	}

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

	function balanceOf(address account) public view override returns (uint256) {
		if (isExcludedFromRewards[account]) return tOwned[account];
		return tokenFromReflection(rOwned[account]);
	}

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

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

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

	function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
		_transfer(sender, recipient, amount);

		uint256 currentAllowance = allowances[sender][_msgSender()];
		require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");

		unchecked {
			_approve(sender, _msgSender(), currentAllowance - amount);
		}

		return true;
	}

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

	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		uint256 currentAllowance = allowances[_msgSender()][spender];
		require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");

		unchecked {
			_approve(_msgSender(), spender, currentAllowance - subtractedValue);
		}

		return true;
	}

	function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
		require(rAmount <= rTotal, "Amount must be less than total reflections");
		uint256 currentRate = _getRate();
		return rAmount / currentRate;
	}

	function excludeFromRewards(address account) external onlyOwner {
		require(!isExcludedFromRewards[account], "Account is already excluded");

		if (rOwned[account] > 0) {
			tOwned[account] = tokenFromReflection(rOwned[account]);
		}

		isExcludedFromRewards[account] = true;
		excluded.push(account);
	}

	function includeInRewards(address account) external onlyOwner {
		require(isExcludedFromRewards[account], "Account is not excluded");

		for (uint256 i = 0; i < excluded.length; i++) {
			if (excluded[i] == account) {
				excluded[i] = excluded[excluded.length - 1];
				tOwned[account] = 0;
				isExcludedFromRewards[account] = false;
				excluded.pop();
				break;
			}
		}
	}

	function _getValues(uint256 tAmount, bool takeFee) private view returns (ReflectValueSet memory set) {
		set = _getTValues(tAmount, takeFee);
		(set.rAmount, set.rTransferAmount, set.rReflectFee, set.rOtherFee) = _getRValues(set, tAmount, takeFee, _getRate());
		return set;
	}

	function _getTValues(uint256 tAmount, bool takeFee) private view returns (ReflectValueSet memory set) {
		if (!takeFee) {
			set.tTransferAmount = tAmount;
			return set;
		}

		set.tReflectFee = tAmount * fees.reflectFee / 100;
		set.tOtherFee = tAmount * (fees.buybackFee + fees.marketingFee + fees.liquidityFee) / 100;
		set.tTransferAmount = tAmount - set.tReflectFee - set.tOtherFee;

		return set;
	}

	function _getRValues(ReflectValueSet memory set, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rReflectFee, uint256 rOtherFee) {
		rAmount = tAmount * currentRate;

		if (!takeFee) {
			return (rAmount, rAmount, 0, 0);
		}

		rReflectFee = set.tReflectFee * currentRate;
		rOtherFee = set.tOtherFee * currentRate;
		rTransferAmount = rAmount - rReflectFee - rOtherFee;
		return (rAmount, rTransferAmount, rReflectFee, rOtherFee);
	}

	function _getRate() private view returns (uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply / tSupply;
	}

	function _getCurrentSupply() private view returns (uint256, uint256) {
		uint256 rSupply = rTotal;
		uint256 tSupply = tTotal;

		for (uint256 i = 0; i < excluded.length; i++) {
			if (rOwned[excluded[i]] > rSupply || tOwned[excluded[i]] > tSupply) return (rTotal, tTotal);
			rSupply -= rOwned[excluded[i]];
			tSupply -= tOwned[excluded[i]];
		}

		if (rSupply < rTotal / tTotal) return (rTotal, tTotal);
		return (rSupply, tSupply);
	}

	function _approve(address owner, address spender, uint256 amount) private {
		require(owner != ZERO_ADDRESS, "ERC20: approve from the zero address");
		require(spender != ZERO_ADDRESS, "ERC20: approve to the zero address");

		allowances[owner][spender] = amount;

		emit Approval(owner, spender, amount);
	}

	function _transfer(address from, address to, uint256 amount) private {
		require(from != ZERO_ADDRESS, "ERC20: transfer from the zero address");
		require(to != ZERO_ADDRESS, "ERC20: transfer to the zero address");
		require(!isBot[from], "ERC20: address blacklisted (bot)");
		require(amount > 0, "Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "You are trying to transfer more than your balance");

		if (maxWalletAmount > 0 && !automatedMarketMakerPairs[to] && !isExcludedFromMaxWallet[to]) {
			require((balanceOf(to) + amount) <= maxWalletAmount, "You are trying to transfer more than the max wallet amount");
		}

		if (launchedAt == 0 && automatedMarketMakerPairs[to]) {
			launchedAt = block.number;
		}

		bool shouldTakeFees = !isExcludedFromFees[from] && !isExcludedFromFees[to];
		if (shouldTakeFees) {
			require(amount <= (automatedMarketMakerPairs[from] ? maxTxAmountBuy : maxTxAmountSell), "You are trying to transfer too many tokens");

			if (automatedMarketMakerPairs[from] && block.number <= launchedAt) {
				isBot[to] = true;
			}
		}

		uint256 balance = balanceOf(address(this));

		if (balance > maxTxAmountSell) {
			balance = maxTxAmountSell;
		}

		if (isFeeProcessingEnabled && !areFeesBeingProcessed && balance >= feeProcessingThreshold && !automatedMarketMakerPairs[from]) {
			areFeesBeingProcessed = true;
			_processFees(balance);
			areFeesBeingProcessed = false;
		}

		_tokenTransfer(from, to, amount, shouldTakeFees);
	}

	function _takeReflectFees(uint256 rReflectFee) private {
		rTotal -= rReflectFee;
	}

	function _takeOtherFees(uint256 rOtherFee, uint256 tOtherFee) private {
		address self = address(this);

		rOwned[self] += rOtherFee;

		if (isExcludedFromRewards[self]) {
			tOwned[self] += tOtherFee;
		}
	}

	function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool shouldTakeFees) private {
		ReflectValueSet memory set = _getValues(tAmount, shouldTakeFees);

		if (isExcludedFromRewards[sender]) {
			tOwned[sender] -= tAmount;
		}

		if (isExcludedFromRewards[recipient]) {
			tOwned[recipient] += set.tTransferAmount;
		}

		rOwned[sender] -= set.rAmount;
		rOwned[recipient] += set.rTransferAmount;

		if (shouldTakeFees) {
			_takeReflectFees(set.rReflectFee);
			_takeOtherFees(set.rOtherFee, set.tOtherFee);
			emit Transfer(sender, address(this), set.tOtherFee);
		}

		emit Transfer(sender, recipient, set.tTransferAmount);
	}

	function _processFees(uint256 amount) private lockTheSwap {
		uint256 feeSum = fees.buybackFee + fees.marketingFee + fees.liquidityFee;
		if (feeSum == 0) return;

		uint256 amountForBuyback = amount * fees.buybackFee / feeSum;
		uint256 amountForMarketing = amount * fees.marketingFee / feeSum;
		uint256 amountForLiquidity = amount - amountForBuyback - amountForMarketing;

		_addLiquidity(amountForLiquidity);

		uint256 amountOut = _swapExactTokensForETH(amountForBuyback + amountForMarketing);
		uint256 ethForBuyback = amountOut * fees.buybackFee / (fees.buybackFee + fees.marketingFee);

		buybackAddress.transfer(ethForBuyback);
		marketingAddress.transfer(address(this).balance);
	}

	function _addLiquidity(uint256 amount) private {
		address self = address(this);

		uint256 tokensToSell = amount / 2;
		uint256 tokensForLiquidity = amount - tokensToSell;

		uint256 ethForLiquidity = _swapExactTokensForETH(tokensToSell);

		_approve(self, address(router), MAX_UINT);
		router.addLiquidityETH{value : ethForLiquidity}(self, tokensForLiquidity, 0, 0, DEAD_ADDRESS, block.timestamp);
	}

	function _swapExactTokensForETH(uint256 amountIn) private returns (uint256) {
		address self = address(this);

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

		_approve(self, address(router), MAX_UINT);

		uint256 previousBalance = self.balance;
		router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountIn, 0, path, self, block.timestamp);
		return self.balance - previousBalance;
	}

	function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
		require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;

		if (value) {
			isExcludedFromMaxWallet[pair] = true;
		}
	}

	function setFees(uint256 reflectFee, uint256 buybackFee, uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
	    require((reflectFee + buybackFee + marketingFee + liquidityFee) <= 15, "Cannot set fees to above a combined total of 15%");
	    
		fees = FeeSet({
			reflectFee: reflectFee,
			buybackFee: buybackFee,
			marketingFee: marketingFee,
			liquidityFee: liquidityFee
		});
	}

	function setIsFeeProcessingEnabled(bool value) public onlyOwner {
		isFeeProcessingEnabled = value;
	}

	function setFeeProcessingThreshold(uint256 value) external onlyOwner {
		feeProcessingThreshold = value;
	}

	function setMaxTransactionAmounts(uint256 maxBuy, uint256 maxSell) external onlyOwner {
	    require(maxBuy >= (tTotal / 400), "Must set max buy to at least 0.25% of total supply");
	    require(maxSell >= (tTotal / 400), "Must set max sell to at least 0.25% of total supply");
		maxTxAmountBuy = maxBuy;
		maxTxAmountSell = maxSell;
	}

	function setMarketingAddress(address payable value) external onlyOwner {
		require(marketingAddress != value, "Marketing address is already set to this value");
		marketingAddress = value;
	}

	function setBuybackAddress(address payable value) external onlyOwner {
		require(buybackAddress != value, "Buyback address is already set to this value");
		buybackAddress = value;
	}

	function setIsBot(address account, bool value) external onlyOwner {
		require(isBot[account] != value, "Account is already set to this value");
		isBot[account] = value;
	}

	function setMaxWalletAmount(uint256 value) external onlyOwner {
	    require(value >= (tTotal / 200), "Must set max wallet to at least 0.5% of total supply");
		require(maxWalletAmount != value, "Max wallet amount is already set to this value");
		maxWalletAmount = value;
	}

	function setIsExcludedFromMaxWallet(address account, bool value) external onlyOwner {
		require(isExcludedFromMaxWallet[account] != value, "Account is already set to this value");
		isExcludedFromMaxWallet[account] = value;
	}

	function setIsExcludedFromFees(address account, bool value) external onlyOwner {
		require(isExcludedFromFees[account] != value, "Account is already set to this value");
		isExcludedFromFees[account] = value;
	}

	receive() external payable {}
}

File 1 of 7: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 4 of 7: IUniswapFactory.sol
pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

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

File 5 of 7: IUniswapRouter.sol
pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

interface IUniswapRouter {
	function swapExactTokensForETHSupportingFeeOnTransferTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external;

	function factory() external pure returns (address);

	function WETH() external pure returns (address);

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

File 7 of 7: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeProcessingThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"},{"internalType":"uint256","name":"buybackFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInRewards","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":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeProcessingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[{"internalType":"address payable","name":"value","type":"address"}],"name":"setBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setFeeProcessingThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"},{"internalType":"uint256","name":"buybackFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsFeeProcessingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"value","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000be7565b64e8d4a5100062000026919062000c38565b6009556009547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000059919062000cc8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000086919062000d00565b600a5560c86009546200009a919062000d3b565b600b5560c8600954620000ae919062000d3b565b600c556064600954620000c2919062000d3b565b600d556001601260016101000a81548160ff0219169083151502179055506101f4600954620000f2919062000d3b565b6013556040518060800160405280600281526020016003815260200160058152602001600281525060166000820151816000015560208201518160010155604082015181600201556060820151816003015550503480156200015357600080fd5b5062000174620001686200095860201b60201c565b6200096060201b60201c565b6000309050600a54600160006200019062000a2460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028c57600080fd5b505afa158015620002a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c7919062000ddd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539682601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034c57600080fd5b505afa15801562000361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000387919062000ddd565b6040518363ffffffff1660e01b8152600401620003a692919062000e20565b602060405180830381600087803b158015620003c157600080fd5b505af1158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc919062000ddd565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160116000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006200054e62000a2460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016004600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620006e162000a2460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008e862000a2460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000949919062000e5e565b60405180910390a35062000e7b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000adb5780860481111562000ab35762000ab262000a4d565b5b600185161562000ac35780820291505b808102905062000ad38562000a7c565b945062000a93565b94509492505050565b60008262000af6576001905062000bc9565b8162000b06576000905062000bc9565b816001811462000b1f576002811462000b2a5762000b60565b600191505062000bc9565b60ff84111562000b3f5762000b3e62000a4d565b5b8360020a91508482111562000b595762000b5862000a4d565b5b5062000bc9565b5060208310610133831016604e8410600b841016171562000b9a5782820a90508381111562000b945762000b9362000a4d565b5b62000bc9565b62000ba9848484600162000a89565b9250905081840481111562000bc35762000bc262000a4d565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000bf48262000bd0565b915062000c018362000bda565b925062000c307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ae4565b905092915050565b600062000c458262000bd0565b915062000c528362000bd0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c8e5762000c8d62000a4d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cd58262000bd0565b915062000ce28362000bd0565b92508262000cf55762000cf462000c99565b5b828206905092915050565b600062000d0d8262000bd0565b915062000d1a8362000bd0565b92508282101562000d305762000d2f62000a4d565b5b828203905092915050565b600062000d488262000bd0565b915062000d558362000bd0565b92508262000d685762000d6762000c99565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000da58262000d78565b9050919050565b62000db78162000d98565b811462000dc357600080fd5b50565b60008151905062000dd78162000dac565b92915050565b60006020828403121562000df65762000df562000d73565b5b600062000e068482850162000dc6565b91505092915050565b62000e1a8162000d98565b82525050565b600060408201905062000e37600083018562000e0f565b62000e46602083018462000e0f565b9392505050565b62000e588162000bd0565b82525050565b600060208201905062000e75600083018462000e4d565b92915050565b61538c8062000e8b6000396000f3fe6080604052600436106102295760003560e01c8063715018a611610123578063aa4bde28116100ab578063bfb693fe1161006f578063bfb693fe1461085b578063d44e586e14610886578063d6c180bf146108b1578063dd62ed3e146108dc578063f2fde38b1461091957610230565b8063aa4bde281461078c578063aaa867a0146107b7578063adf18693146107e0578063b609995e14610809578063b6f7f6811461083257610230565b806395d89b41116100f257806395d89b41146106905780639a7a23d6146106bb5780639af1d35a146106e4578063a457c2d714610712578063a9059cbb1461074f57610230565b8063715018a6146105fc5780637e88880d146106135780638da5cb5b1461063c578063906e9dd01461066757610230565b80632d838119116101b157806355724b871161017557806355724b8714610507578063637930dd146105305780636dd3d39f146105595780636fcba3771461059657806370a08231146105bf57610230565b80632d838119146103e8578063313ce5671461042557806339509351146104505780633bbac5791461048d5780634fbee193146104ca57610230565b8063111e0376116101f8578063111e037614610303578063131447441461032c57806318160ddd1461035757806323b872dd1461038257806327a14fc2146103bf57610230565b806303c0f5d41461023557806306fdde031461025e578063095ea7b3146102895780630e832273146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613c64565b610942565b005b34801561026a57600080fd5b50610273610aac565b6040516102809190613d3d565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613d95565b610ae9565b6040516102bd9190613de4565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613dff565b610b07565b6040516102fa9190613de4565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613dff565b610b27565b005b34801561033857600080fd5b50610341610dc2565b60405161034e9190613e3b565b60405180910390f35b34801561036357600080fd5b5061036c610dc8565b6040516103799190613e3b565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613e56565b610dd2565b6040516103b69190613de4565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613ea9565b610eca565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190613ea9565b610fe6565b60405161041c9190613e3b565b60405180910390f35b34801561043157600080fd5b5061043a61104d565b6040516104479190613ef2565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613d95565b611056565b6040516104849190613de4565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190613dff565b611102565b6040516104c19190613de4565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613dff565b611122565b6040516104fe9190613de4565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613f0d565b611142565b005b34801561053c57600080fd5b5061055760048036038101906105529190613ea9565b6111db565b005b34801561056557600080fd5b50610580600480360381019061057b9190613dff565b611261565b60405161058d9190613de4565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613f3a565b611281565b005b3480156105cb57600080fd5b506105e660048036038101906105e19190613dff565b6113b6565b6040516105f39190613e3b565b60405180910390f35b34801561060857600080fd5b506106116114a1565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613fdf565b611529565b005b34801561064857600080fd5b5061065161167a565b60405161065e919061401b565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613fdf565b6116a3565b005b34801561069c57600080fd5b506106a56117f4565b6040516106b29190613d3d565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613c64565b611831565b005b3480156106f057600080fd5b506106f96119fa565b6040516107099493929190614036565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613d95565b611a18565b6040516107469190613de4565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190613d95565b611b03565b6040516107839190613de4565b60405180910390f35b34801561079857600080fd5b506107a1611b21565b6040516107ae9190613e3b565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613c64565b611b27565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613c64565b611c91565b005b34801561081557600080fd5b50610830600480360381019061082b9190613dff565b611dfb565b005b34801561083e57600080fd5b506108596004803603810190610854919061407b565b612131565b005b34801561086757600080fd5b50610870612263565b60405161087d9190613de4565b60405180910390f35b34801561089257600080fd5b5061089b612276565b6040516108a89190613e3b565b60405180910390f35b3480156108bd57600080fd5b506108c661227c565b6040516108d39190613e3b565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe91906140bb565b612282565b6040516109109190613e3b565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190613dff565b612309565b005b61094a612401565b73ffffffffffffffffffffffffffffffffffffffff1661096861167a565b73ffffffffffffffffffffffffffffffffffffffff16146109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590614147565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a48906141d9565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600981526020017f4d6f63686120496e750000000000000000000000000000000000000000000000815250905090565b6000610afd610af6612401565b8484612409565b6001905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b610b2f612401565b73ffffffffffffffffffffffffffffffffffffffff16610b4d61167a565b73ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90614147565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790614245565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d0457610cc0600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe6565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600954905090565b6000610ddf8484846125d4565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e2a612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906142d7565b60405180910390fd5b610ebe85610eb6612401565b858403612409565b60019150509392505050565b610ed2612401565b73ffffffffffffffffffffffffffffffffffffffff16610ef061167a565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90614147565b60405180910390fd5b60c8600954610f559190614355565b811015610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e906143f8565b60405180910390fd5b80600d541415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd39061448a565b60405180910390fd5b80600d8190555050565b6000600a5482111561102d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110249061451c565b60405180910390fd5b6000611037612c50565b905080836110459190614355565b915050919050565b60006009905090565b60006110f8611063612401565b848460036000611071612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110f3919061453c565b612409565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b61114a612401565b73ffffffffffffffffffffffffffffffffffffffff1661116861167a565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590614147565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6111e3612401565b73ffffffffffffffffffffffffffffffffffffffff1661120161167a565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90614147565b60405180910390fd5b8060138190555050565b60066020528060005260406000206000915054906101000a900460ff1681565b611289612401565b73ffffffffffffffffffffffffffffffffffffffff166112a761167a565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490614147565b60405180910390fd5b600f8183858761130d919061453c565b611317919061453c565b611321919061453c565b1115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614604565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018281525060166000820151816000015560208201518160010155604082015181600201556060820151816003015590505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561145157600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061149c565b611499600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe6565b90505b919050565b6114a9612401565b73ffffffffffffffffffffffffffffffffffffffff166114c761167a565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490614147565b60405180910390fd5b6115276000612c74565b565b611531612401565b73ffffffffffffffffffffffffffffffffffffffff1661154f61167a565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614147565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90614696565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116ab612401565b73ffffffffffffffffffffffffffffffffffffffff166116c961167a565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614147565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614728565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600581526020017f4d4f434841000000000000000000000000000000000000000000000000000000815250905090565b611839612401565b73ffffffffffffffffffffffffffffffffffffffff1661185761167a565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614147565b60405180910390fd5b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906147ba565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156119f6576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60168060000154908060010154908060020154908060030154905084565b60008060036000611a27612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb9061484c565b60405180910390fd5b611af8611aef612401565b85858403612409565b600191505092915050565b6000611b17611b10612401565b84846125d4565b6001905092915050565b600d5481565b611b2f612401565b73ffffffffffffffffffffffffffffffffffffffff16611b4d61167a565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90614147565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906141d9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c99612401565b73ffffffffffffffffffffffffffffffffffffffff16611cb761167a565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614147565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906141d9565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e03612401565b73ffffffffffffffffffffffffffffffffffffffff16611e2161167a565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e90614147565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa906148b8565b60405180910390fd5b60005b60078054905081101561212d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611f3e57611f3d6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561211a5760076001600780549050611f999190614907565b81548110611faa57611fa96148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611fe957611fe86148d8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806120e0576120df61493b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561212d565b80806121259061496a565b915050611f06565b5050565b612139612401565b73ffffffffffffffffffffffffffffffffffffffff1661215761167a565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490614147565b60405180910390fd5b6101906009546121bd9190614355565b8210156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614a25565b60405180910390fd5b61019060095461220f9190614355565b811015612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614ab7565b60405180910390fd5b81600b8190555080600c819055505050565b601260019054906101000a900460ff1681565b600c5481565b600b5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612311612401565b73ffffffffffffffffffffffffffffffffffffffff1661232f61167a565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614b49565b60405180910390fd5b6123fe81612c74565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090614c6d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c79190613e3b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90614d91565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890614dfd565b60405180910390fd5b60008111612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614e8f565b60405180910390fd5b61278d836113b6565b8111156127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690614f21565b60405180910390fd5b6000600d5411801561282b5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128815750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128df57600d5481612893846113b6565b61289d919061453c565b11156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d590614fb3565b60405180910390fd5b5b6000600e5414801561293a5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129475743600e819055505b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ed5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015612b4e57601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a4e57600c54612a52565b600b545b821115612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90615045565b60405180910390fd5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aef5750600e544311155b15612b4d576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000612b59306113b6565b9050600c54811115612b6b57600c5490505b601260019054906101000a900460ff168015612b945750601260009054906101000a900460ff16155b8015612ba257506013548110155b8015612bf85750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3d576001601260006101000a81548160ff021916908315150217905550612c2181612d38565b6000601260006101000a81548160ff0219169083151502179055505b612c4985858585612f34565b5050505050565b6000806000612c5d61324b565b915091508082612c6d9190614355565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260006101000a81548160ff0219169083151502179055506000601660030154601660020154601660010154612d71919061453c565b612d7b919061453c565b90506000811415612d8c5750612f16565b60008160166001015484612da09190615065565b612daa9190614355565b905060008260166002015485612dc09190615065565b612dca9190614355565b90506000818386612ddb9190614907565b612de59190614907565b9050612df0816134e9565b6000612e068385612e01919061453c565b61362e565b90506000601660020154601660010154612e20919061453c565b60166001015483612e319190615065565b612e3b9190614355565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ea5573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612f0e573d6000803e3d6000fd5b505050505050505b6000601260006101000a81548160ff02191690831515021790555050565b6000612f4083836138eb565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612feb5782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe39190614907565b925050819055505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613098578060800151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613090919061453c565b925050819055505b8060000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130eb9190614907565b925050819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613145919061453c565b9250508190555081156131db5761315f816040015161393c565b61317181606001518260c00151613958565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516131d29190613e3b565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161323c9190613e3b565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b6007805490508110156134b357826001600060078481548110613285576132846148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613373575081600260006007848154811061330b5761330a6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561338a57600a54600954945094505050506134e5565b60016000600783815481106133a2576133a16148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836134139190614907565b9250600260006007838154811061342d5761342c6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261349e9190614907565b915080806134ab9061496a565b91505061325f565b50600954600a546134c49190614355565b8210156134dc57600a546009549350935050506134e5565b81819350935050505b9091565b600030905060006002836134fd9190614355565b90506000818461350d9190614907565b9050600061351a8361362e565b905061356984601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612409565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b81526004016135d296959493929190615104565b6060604051808303818588803b1580156135eb57600080fd5b505af11580156135ff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613624919061517a565b5050505050505050565b6000803090506000600267ffffffffffffffff811115613651576136506151cd565b5b60405190808252806020026020018201604052801561367f5781602001602082028036833780820191505090505b5090508181600081518110613697576136966148d8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561373957600080fd5b505afa15801561374d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137719190615211565b81600181518110613785576137846148d8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380c82601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612409565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b815260040161388c9594939291906152fc565b600060405180830381600087803b1580156138a657600080fd5b505af11580156138ba573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff16316138e19190614907565b9350505050919050565b6138f3613b8c565b6138fd8383613a61565b905061391281848461390d612c50565b613b18565b84600001856020018660400187606001848152508481525084815250848152505050505092915050565b80600a600082825461394e9190614907565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139ac919061453c565b92505081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a5c5781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a54919061453c565b925050819055505b505050565b613a69613b8c565b81613a7d5782816080018181525050613b12565b606460166000015484613a909190615065565b613a9a9190614355565b8160a00181815250506064601660030154601660020154601660010154613ac1919061453c565b613acb919061453c565b84613ad69190615065565b613ae09190614355565b8160c00181815250508060c001518160a0015184613afe9190614907565b613b089190614907565b8160800181815250505b92915050565b6000806000808487613b2a9190615065565b935085613b435783846000809350935093509350613b81565b848860a00151613b539190615065565b9150848860c00151613b659190615065565b9050808285613b749190614907565b613b7e9190614907565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008115159050919050565b613c4181613c2c565b8114613c4c57600080fd5b50565b600081359050613c5e81613c38565b92915050565b60008060408385031215613c7b57613c7a613bc9565b5b6000613c8985828601613c17565b9250506020613c9a85828601613c4f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cde578082015181840152602081019050613cc3565b83811115613ced576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0f82613ca4565b613d198185613caf565b9350613d29818560208601613cc0565b613d3281613cf3565b840191505092915050565b60006020820190508181036000830152613d578184613d04565b905092915050565b6000819050919050565b613d7281613d5f565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b60008060408385031215613dac57613dab613bc9565b5b6000613dba85828601613c17565b9250506020613dcb85828601613d80565b9150509250929050565b613dde81613c2c565b82525050565b6000602082019050613df96000830184613dd5565b92915050565b600060208284031215613e1557613e14613bc9565b5b6000613e2384828501613c17565b91505092915050565b613e3581613d5f565b82525050565b6000602082019050613e506000830184613e2c565b92915050565b600080600060608486031215613e6f57613e6e613bc9565b5b6000613e7d86828701613c17565b9350506020613e8e86828701613c17565b9250506040613e9f86828701613d80565b9150509250925092565b600060208284031215613ebf57613ebe613bc9565b5b6000613ecd84828501613d80565b91505092915050565b600060ff82169050919050565b613eec81613ed6565b82525050565b6000602082019050613f076000830184613ee3565b92915050565b600060208284031215613f2357613f22613bc9565b5b6000613f3184828501613c4f565b91505092915050565b60008060008060808587031215613f5457613f53613bc9565b5b6000613f6287828801613d80565b9450506020613f7387828801613d80565b9350506040613f8487828801613d80565b9250506060613f9587828801613d80565b91505092959194509250565b6000613fac82613bce565b9050919050565b613fbc81613fa1565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b600060208284031215613ff557613ff4613bc9565b5b600061400384828501613fca565b91505092915050565b61401581613bee565b82525050565b6000602082019050614030600083018461400c565b92915050565b600060808201905061404b6000830187613e2c565b6140586020830186613e2c565b6140656040830185613e2c565b6140726060830184613e2c565b95945050505050565b6000806040838503121561409257614091613bc9565b5b60006140a085828601613d80565b92505060206140b185828601613d80565b9150509250929050565b600080604083850312156140d2576140d1613bc9565b5b60006140e085828601613c17565b92505060206140f185828601613c17565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614131602083613caf565b915061413c826140fb565b602082019050919050565b6000602082019050818103600083015261416081614124565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686973207660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b60006141c3602483613caf565b91506141ce82614167565b604082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061422f601b83613caf565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142c1602883613caf565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061436082613d5f565b915061436b83613d5f565b92508261437b5761437a6142f7565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b60006143e2603483613caf565b91506143ed82614386565b604082019050919050565b60006020820190508181036000830152614411816143d5565b9050919050565b7f4d61782077616c6c657420616d6f756e7420697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b6000614474602e83613caf565b915061447f82614418565b604082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614506602a83613caf565b9150614511826144aa565b604082019050919050565b60006020820190508181036000830152614535816144f9565b9050919050565b600061454782613d5f565b915061455283613d5f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458757614586614326565b5b828201905092915050565b7f43616e6e6f7420736574206665657320746f2061626f7665206120636f6d626960008201527f6e656420746f74616c206f662031352500000000000000000000000000000000602082015250565b60006145ee603083613caf565b91506145f982614592565b604082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f4275796261636b206164647265737320697320616c726561647920736574207460008201527f6f20746869732076616c75650000000000000000000000000000000000000000602082015250565b6000614680602c83613caf565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b6000614712602e83613caf565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006147a4603883613caf565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614836602583613caf565b9150614841826147da565b604082019050919050565b6000602082019050818103600083015261486581614829565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b60006148a2601783613caf565b91506148ad8261486c565b602082019050919050565b600060208201905081810360008301526148d181614895565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061491282613d5f565b915061491d83613d5f565b9250828210156149305761492f614326565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061497582613d5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149a8576149a7614326565b5b600182019050919050565b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b6000614a0f603283613caf565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b6000614aa1603383613caf565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b33602683613caf565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602483613caf565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c57602283613caf565b9150614c6282614bfb565b604082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ce9602583613caf565b9150614cf482614c8d565b604082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d7b602383613caf565b9150614d8682614d1f565b604082019050919050565b60006020820190508181036000830152614daa81614d6e565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000614de7602083613caf565b9150614df282614db1565b602082019050919050565b60006020820190508181036000830152614e1681614dda565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614e79602983613caf565b9150614e8482614e1d565b604082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614f0b603183613caf565b9150614f1682614eaf565b604082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b6000614f9d603a83613caf565b9150614fa882614f41565b604082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061502f602a83613caf565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b600061507082613d5f565b915061507b83613d5f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150b4576150b3614326565b5b828202905092915050565b6000819050919050565b6000819050919050565b60006150ee6150e96150e4846150bf565b6150c9565b613d5f565b9050919050565b6150fe816150d3565b82525050565b600060c082019050615119600083018961400c565b6151266020830188613e2c565b61513360408301876150f5565b61514060608301866150f5565b61514d608083018561400c565b61515a60a0830184613e2c565b979650505050505050565b60008151905061517481613d69565b92915050565b60008060006060848603121561519357615192613bc9565b5b60006151a186828701615165565b93505060206151b286828701615165565b92505060406151c386828701615165565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061520b81613c00565b92915050565b60006020828403121561522757615226613bc9565b5b6000615235848285016151fc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61527381613bee565b82525050565b6000615285838361526a565b60208301905092915050565b6000602082019050919050565b60006152a98261523e565b6152b38185615249565b93506152be8361525a565b8060005b838110156152ef5781516152d68882615279565b97506152e183615291565b9250506001810190506152c2565b5085935050505092915050565b600060a0820190506153116000830188613e2c565b61531e60208301876150f5565b8181036040830152615330818661529e565b905061533f606083018561400c565b61534c6080830184613e2c565b969550505050505056fea2646970667358221220699b4e8f3432d71da628de2395d00e7d9f4da1864fb9aa5e102c97c43358fad264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063715018a611610123578063aa4bde28116100ab578063bfb693fe1161006f578063bfb693fe1461085b578063d44e586e14610886578063d6c180bf146108b1578063dd62ed3e146108dc578063f2fde38b1461091957610230565b8063aa4bde281461078c578063aaa867a0146107b7578063adf18693146107e0578063b609995e14610809578063b6f7f6811461083257610230565b806395d89b41116100f257806395d89b41146106905780639a7a23d6146106bb5780639af1d35a146106e4578063a457c2d714610712578063a9059cbb1461074f57610230565b8063715018a6146105fc5780637e88880d146106135780638da5cb5b1461063c578063906e9dd01461066757610230565b80632d838119116101b157806355724b871161017557806355724b8714610507578063637930dd146105305780636dd3d39f146105595780636fcba3771461059657806370a08231146105bf57610230565b80632d838119146103e8578063313ce5671461042557806339509351146104505780633bbac5791461048d5780634fbee193146104ca57610230565b8063111e0376116101f8578063111e037614610303578063131447441461032c57806318160ddd1461035757806323b872dd1461038257806327a14fc2146103bf57610230565b806303c0f5d41461023557806306fdde031461025e578063095ea7b3146102895780630e832273146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613c64565b610942565b005b34801561026a57600080fd5b50610273610aac565b6040516102809190613d3d565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613d95565b610ae9565b6040516102bd9190613de4565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613dff565b610b07565b6040516102fa9190613de4565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613dff565b610b27565b005b34801561033857600080fd5b50610341610dc2565b60405161034e9190613e3b565b60405180910390f35b34801561036357600080fd5b5061036c610dc8565b6040516103799190613e3b565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613e56565b610dd2565b6040516103b69190613de4565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613ea9565b610eca565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190613ea9565b610fe6565b60405161041c9190613e3b565b60405180910390f35b34801561043157600080fd5b5061043a61104d565b6040516104479190613ef2565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613d95565b611056565b6040516104849190613de4565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190613dff565b611102565b6040516104c19190613de4565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613dff565b611122565b6040516104fe9190613de4565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613f0d565b611142565b005b34801561053c57600080fd5b5061055760048036038101906105529190613ea9565b6111db565b005b34801561056557600080fd5b50610580600480360381019061057b9190613dff565b611261565b60405161058d9190613de4565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613f3a565b611281565b005b3480156105cb57600080fd5b506105e660048036038101906105e19190613dff565b6113b6565b6040516105f39190613e3b565b60405180910390f35b34801561060857600080fd5b506106116114a1565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613fdf565b611529565b005b34801561064857600080fd5b5061065161167a565b60405161065e919061401b565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613fdf565b6116a3565b005b34801561069c57600080fd5b506106a56117f4565b6040516106b29190613d3d565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613c64565b611831565b005b3480156106f057600080fd5b506106f96119fa565b6040516107099493929190614036565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613d95565b611a18565b6040516107469190613de4565b60405180910390f35b34801561075b57600080fd5b5061077660048036038101906107719190613d95565b611b03565b6040516107839190613de4565b60405180910390f35b34801561079857600080fd5b506107a1611b21565b6040516107ae9190613e3b565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613c64565b611b27565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613c64565b611c91565b005b34801561081557600080fd5b50610830600480360381019061082b9190613dff565b611dfb565b005b34801561083e57600080fd5b506108596004803603810190610854919061407b565b612131565b005b34801561086757600080fd5b50610870612263565b60405161087d9190613de4565b60405180910390f35b34801561089257600080fd5b5061089b612276565b6040516108a89190613e3b565b60405180910390f35b3480156108bd57600080fd5b506108c661227c565b6040516108d39190613e3b565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe91906140bb565b612282565b6040516109109190613e3b565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190613dff565b612309565b005b61094a612401565b73ffffffffffffffffffffffffffffffffffffffff1661096861167a565b73ffffffffffffffffffffffffffffffffffffffff16146109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590614147565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a48906141d9565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600981526020017f4d6f63686120496e750000000000000000000000000000000000000000000000815250905090565b6000610afd610af6612401565b8484612409565b6001905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b610b2f612401565b73ffffffffffffffffffffffffffffffffffffffff16610b4d61167a565b73ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90614147565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790614245565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d0457610cc0600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe6565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600954905090565b6000610ddf8484846125d4565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e2a612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906142d7565b60405180910390fd5b610ebe85610eb6612401565b858403612409565b60019150509392505050565b610ed2612401565b73ffffffffffffffffffffffffffffffffffffffff16610ef061167a565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90614147565b60405180910390fd5b60c8600954610f559190614355565b811015610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e906143f8565b60405180910390fd5b80600d541415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd39061448a565b60405180910390fd5b80600d8190555050565b6000600a5482111561102d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110249061451c565b60405180910390fd5b6000611037612c50565b905080836110459190614355565b915050919050565b60006009905090565b60006110f8611063612401565b848460036000611071612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110f3919061453c565b612409565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b61114a612401565b73ffffffffffffffffffffffffffffffffffffffff1661116861167a565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590614147565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6111e3612401565b73ffffffffffffffffffffffffffffffffffffffff1661120161167a565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90614147565b60405180910390fd5b8060138190555050565b60066020528060005260406000206000915054906101000a900460ff1681565b611289612401565b73ffffffffffffffffffffffffffffffffffffffff166112a761167a565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490614147565b60405180910390fd5b600f8183858761130d919061453c565b611317919061453c565b611321919061453c565b1115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614604565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018281525060166000820151816000015560208201518160010155604082015181600201556060820151816003015590505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561145157600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061149c565b611499600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe6565b90505b919050565b6114a9612401565b73ffffffffffffffffffffffffffffffffffffffff166114c761167a565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490614147565b60405180910390fd5b6115276000612c74565b565b611531612401565b73ffffffffffffffffffffffffffffffffffffffff1661154f61167a565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90614147565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90614696565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116ab612401565b73ffffffffffffffffffffffffffffffffffffffff166116c961167a565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614147565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614728565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600581526020017f4d4f434841000000000000000000000000000000000000000000000000000000815250905090565b611839612401565b73ffffffffffffffffffffffffffffffffffffffff1661185761167a565b73ffffffffffffffffffffffffffffffffffffffff16146118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490614147565b60405180910390fd5b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906147ba565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156119f6576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60168060000154908060010154908060020154908060030154905084565b60008060036000611a27612401565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb9061484c565b60405180910390fd5b611af8611aef612401565b85858403612409565b600191505092915050565b6000611b17611b10612401565b84846125d4565b6001905092915050565b600d5481565b611b2f612401565b73ffffffffffffffffffffffffffffffffffffffff16611b4d61167a565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90614147565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906141d9565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c99612401565b73ffffffffffffffffffffffffffffffffffffffff16611cb761167a565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614147565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906141d9565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e03612401565b73ffffffffffffffffffffffffffffffffffffffff16611e2161167a565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e90614147565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa906148b8565b60405180910390fd5b60005b60078054905081101561212d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611f3e57611f3d6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561211a5760076001600780549050611f999190614907565b81548110611faa57611fa96148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611fe957611fe86148d8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806120e0576120df61493b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561212d565b80806121259061496a565b915050611f06565b5050565b612139612401565b73ffffffffffffffffffffffffffffffffffffffff1661215761167a565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490614147565b60405180910390fd5b6101906009546121bd9190614355565b8210156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614a25565b60405180910390fd5b61019060095461220f9190614355565b811015612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614ab7565b60405180910390fd5b81600b8190555080600c819055505050565b601260019054906101000a900460ff1681565b600c5481565b600b5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612311612401565b73ffffffffffffffffffffffffffffffffffffffff1661232f61167a565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614b49565b60405180910390fd5b6123fe81612c74565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090614bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090614c6d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c79190613e3b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b90614cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90614d91565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890614dfd565b60405180910390fd5b60008111612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614e8f565b60405180910390fd5b61278d836113b6565b8111156127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690614f21565b60405180910390fd5b6000600d5411801561282b5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128815750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128df57600d5481612893846113b6565b61289d919061453c565b11156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d590614fb3565b60405180910390fd5b5b6000600e5414801561293a5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156129475743600e819055505b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ed5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015612b4e57601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a4e57600c54612a52565b600b545b821115612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90615045565b60405180910390fd5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aef5750600e544311155b15612b4d576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000612b59306113b6565b9050600c54811115612b6b57600c5490505b601260019054906101000a900460ff168015612b945750601260009054906101000a900460ff16155b8015612ba257506013548110155b8015612bf85750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3d576001601260006101000a81548160ff021916908315150217905550612c2181612d38565b6000601260006101000a81548160ff0219169083151502179055505b612c4985858585612f34565b5050505050565b6000806000612c5d61324b565b915091508082612c6d9190614355565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260006101000a81548160ff0219169083151502179055506000601660030154601660020154601660010154612d71919061453c565b612d7b919061453c565b90506000811415612d8c5750612f16565b60008160166001015484612da09190615065565b612daa9190614355565b905060008260166002015485612dc09190615065565b612dca9190614355565b90506000818386612ddb9190614907565b612de59190614907565b9050612df0816134e9565b6000612e068385612e01919061453c565b61362e565b90506000601660020154601660010154612e20919061453c565b60166001015483612e319190615065565b612e3b9190614355565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ea5573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612f0e573d6000803e3d6000fd5b505050505050505b6000601260006101000a81548160ff02191690831515021790555050565b6000612f4083836138eb565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612feb5782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe39190614907565b925050819055505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613098578060800151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613090919061453c565b925050819055505b8060000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130eb9190614907565b925050819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613145919061453c565b9250508190555081156131db5761315f816040015161393c565b61317181606001518260c00151613958565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516131d29190613e3b565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161323c9190613e3b565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b6007805490508110156134b357826001600060078481548110613285576132846148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613373575081600260006007848154811061330b5761330a6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561338a57600a54600954945094505050506134e5565b60016000600783815481106133a2576133a16148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836134139190614907565b9250600260006007838154811061342d5761342c6148d8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261349e9190614907565b915080806134ab9061496a565b91505061325f565b50600954600a546134c49190614355565b8210156134dc57600a546009549350935050506134e5565b81819350935050505b9091565b600030905060006002836134fd9190614355565b90506000818461350d9190614907565b9050600061351a8361362e565b905061356984601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612409565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b81526004016135d296959493929190615104565b6060604051808303818588803b1580156135eb57600080fd5b505af11580156135ff573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613624919061517a565b5050505050505050565b6000803090506000600267ffffffffffffffff811115613651576136506151cd565b5b60405190808252806020026020018201604052801561367f5781602001602082028036833780820191505090505b5090508181600081518110613697576136966148d8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561373957600080fd5b505afa15801561374d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137719190615211565b81600181518110613785576137846148d8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380c82601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612409565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b815260040161388c9594939291906152fc565b600060405180830381600087803b1580156138a657600080fd5b505af11580156138ba573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff16316138e19190614907565b9350505050919050565b6138f3613b8c565b6138fd8383613a61565b905061391281848461390d612c50565b613b18565b84600001856020018660400187606001848152508481525084815250848152505050505092915050565b80600a600082825461394e9190614907565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139ac919061453c565b92505081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a5c5781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a54919061453c565b925050819055505b505050565b613a69613b8c565b81613a7d5782816080018181525050613b12565b606460166000015484613a909190615065565b613a9a9190614355565b8160a00181815250506064601660030154601660020154601660010154613ac1919061453c565b613acb919061453c565b84613ad69190615065565b613ae09190614355565b8160c00181815250508060c001518160a0015184613afe9190614907565b613b089190614907565b8160800181815250505b92915050565b6000806000808487613b2a9190615065565b935085613b435783846000809350935093509350613b81565b848860a00151613b539190615065565b9150848860c00151613b659190615065565b9050808285613b749190614907565b613b7e9190614907565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b60008115159050919050565b613c4181613c2c565b8114613c4c57600080fd5b50565b600081359050613c5e81613c38565b92915050565b60008060408385031215613c7b57613c7a613bc9565b5b6000613c8985828601613c17565b9250506020613c9a85828601613c4f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cde578082015181840152602081019050613cc3565b83811115613ced576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0f82613ca4565b613d198185613caf565b9350613d29818560208601613cc0565b613d3281613cf3565b840191505092915050565b60006020820190508181036000830152613d578184613d04565b905092915050565b6000819050919050565b613d7281613d5f565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b60008060408385031215613dac57613dab613bc9565b5b6000613dba85828601613c17565b9250506020613dcb85828601613d80565b9150509250929050565b613dde81613c2c565b82525050565b6000602082019050613df96000830184613dd5565b92915050565b600060208284031215613e1557613e14613bc9565b5b6000613e2384828501613c17565b91505092915050565b613e3581613d5f565b82525050565b6000602082019050613e506000830184613e2c565b92915050565b600080600060608486031215613e6f57613e6e613bc9565b5b6000613e7d86828701613c17565b9350506020613e8e86828701613c17565b9250506040613e9f86828701613d80565b9150509250925092565b600060208284031215613ebf57613ebe613bc9565b5b6000613ecd84828501613d80565b91505092915050565b600060ff82169050919050565b613eec81613ed6565b82525050565b6000602082019050613f076000830184613ee3565b92915050565b600060208284031215613f2357613f22613bc9565b5b6000613f3184828501613c4f565b91505092915050565b60008060008060808587031215613f5457613f53613bc9565b5b6000613f6287828801613d80565b9450506020613f7387828801613d80565b9350506040613f8487828801613d80565b9250506060613f9587828801613d80565b91505092959194509250565b6000613fac82613bce565b9050919050565b613fbc81613fa1565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b600060208284031215613ff557613ff4613bc9565b5b600061400384828501613fca565b91505092915050565b61401581613bee565b82525050565b6000602082019050614030600083018461400c565b92915050565b600060808201905061404b6000830187613e2c565b6140586020830186613e2c565b6140656040830185613e2c565b6140726060830184613e2c565b95945050505050565b6000806040838503121561409257614091613bc9565b5b60006140a085828601613d80565b92505060206140b185828601613d80565b9150509250929050565b600080604083850312156140d2576140d1613bc9565b5b60006140e085828601613c17565b92505060206140f185828601613c17565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614131602083613caf565b915061413c826140fb565b602082019050919050565b6000602082019050818103600083015261416081614124565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686973207660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b60006141c3602483613caf565b91506141ce82614167565b604082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061422f601b83613caf565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142c1602883613caf565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061436082613d5f565b915061436b83613d5f565b92508261437b5761437a6142f7565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b60006143e2603483613caf565b91506143ed82614386565b604082019050919050565b60006020820190508181036000830152614411816143d5565b9050919050565b7f4d61782077616c6c657420616d6f756e7420697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b6000614474602e83613caf565b915061447f82614418565b604082019050919050565b600060208201905081810360008301526144a381614467565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614506602a83613caf565b9150614511826144aa565b604082019050919050565b60006020820190508181036000830152614535816144f9565b9050919050565b600061454782613d5f565b915061455283613d5f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458757614586614326565b5b828201905092915050565b7f43616e6e6f7420736574206665657320746f2061626f7665206120636f6d626960008201527f6e656420746f74616c206f662031352500000000000000000000000000000000602082015250565b60006145ee603083613caf565b91506145f982614592565b604082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f4275796261636b206164647265737320697320616c726561647920736574207460008201527f6f20746869732076616c75650000000000000000000000000000000000000000602082015250565b6000614680602c83613caf565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b6000614712602e83613caf565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006147a4603883613caf565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614836602583613caf565b9150614841826147da565b604082019050919050565b6000602082019050818103600083015261486581614829565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b60006148a2601783613caf565b91506148ad8261486c565b602082019050919050565b600060208201905081810360008301526148d181614895565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061491282613d5f565b915061491d83613d5f565b9250828210156149305761492f614326565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061497582613d5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149a8576149a7614326565b5b600182019050919050565b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b6000614a0f603283613caf565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b6000614aa1603383613caf565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b33602683613caf565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602483613caf565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c57602283613caf565b9150614c6282614bfb565b604082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ce9602583613caf565b9150614cf482614c8d565b604082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d7b602383613caf565b9150614d8682614d1f565b604082019050919050565b60006020820190508181036000830152614daa81614d6e565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000614de7602083613caf565b9150614df282614db1565b602082019050919050565b60006020820190508181036000830152614e1681614dda565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614e79602983613caf565b9150614e8482614e1d565b604082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614f0b603183613caf565b9150614f1682614eaf565b604082019050919050565b60006020820190508181036000830152614f3a81614efe565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b6000614f9d603a83613caf565b9150614fa882614f41565b604082019050919050565b60006020820190508181036000830152614fcc81614f90565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061502f602a83613caf565b915061503a82614fd3565b604082019050919050565b6000602082019050818103600083015261505e81615022565b9050919050565b600061507082613d5f565b915061507b83613d5f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150b4576150b3614326565b5b828202905092915050565b6000819050919050565b6000819050919050565b60006150ee6150e96150e4846150bf565b6150c9565b613d5f565b9050919050565b6150fe816150d3565b82525050565b600060c082019050615119600083018961400c565b6151266020830188613e2c565b61513360408301876150f5565b61514060608301866150f5565b61514d608083018561400c565b61515a60a0830184613e2c565b979650505050505050565b60008151905061517481613d69565b92915050565b60008060006060848603121561519357615192613bc9565b5b60006151a186828701615165565b93505060206151b286828701615165565b92505060406151c386828701615165565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061520b81613c00565b92915050565b60006020828403121561522757615226613bc9565b5b6000615235848285016151fc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61527381613bee565b82525050565b6000615285838361526a565b60208301905092915050565b6000602082019050919050565b60006152a98261523e565b6152b38185615249565b93506152be8361525a565b8060005b838110156152ef5781516152d68882615279565b97506152e183615291565b9250506001810190506152c2565b5085935050505092915050565b600060a0820190506153116000830188613e2c565b61531e60208301876150f5565b8181036040830152615330818661529e565b905061533f606083018561400c565b61534c6080830184613e2c565b969550505050505056fea2646970667358221220699b4e8f3432d71da628de2395d00e7d9f4da1864fb9aa5e102c97c43358fad264736f6c63430008090033

Deployed Bytecode Sourcemap

216:14156:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13445:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2909:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3698:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;821:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5031:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1510:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3135:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3844:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13620:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4804:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3061:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4239:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;957:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;768:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12511:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12616:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;877:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12110:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3221:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:6;;;;;;;;;;;;;:::i;:::-;;13259:183:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;966:85:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13065:191:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2983:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11804:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1726:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4438:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3412:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1227:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13898:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14127:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5338:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12726:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1466:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1161:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1096:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3564:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13445:172:5;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13541:5:5::1;13523:23;;:5;:14;13529:7;13523:14;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;13515:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13608:5;13591;:14;13597:7;13591:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;13445:172:::0;;:::o;2909:71::-;2946:13;2972:4;;;;;;;;;;;;;;;;;2965:11;;2909:71;:::o;3698:143::-;3773:4;3783:39;3792:12;:10;:12::i;:::-;3806:7;3815:6;3783:8;:39::i;:::-;3833:4;3826:11;;3698:143;;;;:::o;821:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;5031:304::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5108:21:5::1;:30;5130:7;5108:30;;;;;;;;;;;;;;;;;;;;;;;;;5107:31;5099:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5197:1;5179:6;:15;5186:7;5179:15;;;;;;;;;;;;;;;;:19;5175:89;;;5223:36;5243:6;:15;5250:7;5243:15;;;;;;;;;;;;;;;;5223:19;:36::i;:::-;5205:6;:15;5212:7;5205:15;;;;;;;;;;;;;;;:54;;;;5175:89;5301:4;5268:21;:30;5290:7;5268:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;5309:8;5323:7;5309:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5031:304:::0;:::o;1510:52::-;;;;:::o;3135:83::-;3188:7;3208:6;;3201:13;;3135:83;:::o;3844:392::-;3942:4;3952:36;3962:6;3970:9;3981:6;3952:9;:36::i;:::-;3993:24;4020:10;:18;4031:6;4020:18;;;;;;;;;;;;;;;:32;4039:12;:10;:12::i;:::-;4020:32;;;;;;;;;;;;;;;;3993:59;;4084:6;4064:16;:26;;4056:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4155:57;4164:6;4172:12;:10;:12::i;:::-;4205:6;4186:16;:25;4155:8;:57::i;:::-;4228:4;4221:11;;;3844:392;;;;;:::o;13620:275::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13716:3:5::1;13707:6;;:12;;;;:::i;:::-;13697:5;:23;;13689:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13808:5;13789:15;;:24;;13781:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;13886:5;13868:15;:23;;;;13620:275:::0;:::o;4804:224::-;4871:7;4903:6;;4892:7;:17;;4884:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4960:19;4982:10;:8;:10::i;:::-;4960:32;;5013:11;5003:7;:21;;;;:::i;:::-;4996:28;;;4804:224;;;:::o;3061:71::-;3102:5;400:1;3113:15;;3061:71;:::o;4239:196::-;4327:4;4337:79;4346:12;:10;:12::i;:::-;4360:7;4405:10;4369;:24;4380:12;:10;:12::i;:::-;4369:24;;;;;;;;;;;;;;;:33;4394:7;4369:33;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;4337:8;:79::i;:::-;4427:4;4420:11;;4239:196;;;;:::o;957:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;768:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;12511:102::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12604:5:5::1;12579:22;;:30;;;;;;;;;;;;;;;;;;12511:102:::0;:::o;12616:107::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12714:5:5::1;12689:22;:30;;;;12616:107:::0;:::o;877:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;12110:398::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12304:2:5::1;12287:12;12272;12259:10;12246;:23;;;;:::i;:::-;:38;;;;:::i;:::-;:53;;;;:::i;:::-;12245:61;;12237:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;12376:128;;;;;;;;12400:10;12376:128;;;;12427:10;12376:128;;;;12456:12;12376:128;;;;12487:12;12376:128;;::::0;12369:4:::1;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12110:398:::0;;;;:::o;3221:188::-;3287:7;3304:21;:30;3326:7;3304:30;;;;;;;;;;;;;;;;;;;;;;;;;3300:58;;;3343:6;:15;3350:7;3343:15;;;;;;;;;;;;;;;;3336:22;;;;3300:58;3369:36;3389:6;:15;3396:7;3389:15;;;;;;;;;;;;;;;;3369:19;:36::i;:::-;3362:43;;3221:188;;;;:::o;1598:92:6:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;13259:183:5:-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13358:5:5::1;13340:23;;:14;;;;;;;;;;;:23;;;;13332:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;13433:5;13416:14;;:22;;;;;;;;;;;;;;;;;;13259:183:::0;:::o;966:85:6:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;13065:191:5:-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13168:5:5::1;13148:25;;:16;;;;;;;;;;;:25;;;;13140:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;13247:5;13228:16;;:24;;;;;;;;;;;;;;;;;;13065:191:::0;:::o;2983:75::-;3022:13;3048:6;;;;;;;;;;;;;;;;;3041:13;;2983:75;:::o;11804:303::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11933:5:5::1;11898:40;;:25;:31;11924:4;11898:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;11890:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12037:5;12003:25;:31;12029:4;12003:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12051:5;12047:57;;;12095:4;12063:23;:29;12087:4;12063:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;12047:57;11804:303:::0;;:::o;1726:104::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;4438:363::-;4531:4;4541:24;4568:10;:24;4579:12;:10;:12::i;:::-;4568:24;;;;;;;;;;;;;;;:33;4593:7;4568:33;;;;;;;;;;;;;;;;4541:60;;4633:15;4613:16;:35;;4605:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4710:67;4719:12;:10;:12::i;:::-;4733:7;4761:15;4742:16;:34;4710:8;:67::i;:::-;4793:4;4786:11;;;4438:363;;;;:::o;3412:149::-;3490:4;3500:42;3510:12;:10;:12::i;:::-;3524:9;3535:6;3500:9;:42::i;:::-;3553:4;3546:11;;3412:149;;;;:::o;1227:45::-;;;;:::o;13898:226::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14030:5:5::1;13994:41;;:23;:32;14018:7;13994:32;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;13986:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;14115:5;14080:23;:32;14104:7;14080:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;13898:226:::0;;:::o;14127:211::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:5:5::1;14218:36;;:18;:27;14237:7;14218:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;14210:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14329:5;14299:18;:27;14318:7;14299:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14127:211:::0;;:::o;5338:378::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5412:21:5::1;:30;5434:7;5412:30;;;;;;;;;;;;;;;;;;;;;;;;;5404:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5480:9;5475:238;5499:8;:15;;;;5495:1;:19;5475:238;;;5545:7;5530:22;;:8;5539:1;5530:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:22;;;5526:183;;;5574:8;5601:1;5583:8;:15;;;;:19;;;;:::i;:::-;5574:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5560:8;5569:1;5560:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;5627:1;5609:6;:15;5616:7;5609:15;;;;;;;;;;;;;;;:19;;;;5667:5;5634:21;:30;5656:7;5634:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5678:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5698:5;;5526:183;5516:3;;;;;:::i;:::-;;;;5475:238;;;;5338:378:::0;:::o;12726:336::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12847:3:5::1;12838:6;;:12;;;;:::i;:::-;12827:6;:24;;12819:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;12942:3;12933:6;;:12;;;;:::i;:::-;12921:7;:25;;12913:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13023:6;13006:14;:23;;;;13051:7;13033:15;:25;;;;12726:336:::0;;:::o;1466:41::-;;;;;;;;;;;;;:::o;1161:45::-;;;;:::o;1096:44::-;;;;:::o;3564:131::-;3645:7;3665:10;:17;3676:5;3665:17;;;;;;;;;;;;;;;:26;3683:7;3665:26;;;;;;;;;;;;;;;;3658:33;;3564:131;;;;:::o;1839:189:6:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;7508:308:5:-;576:1;7594:21;;:5;:21;;;;7586:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;576:1;7668:23;;:7;:23;;;;7660:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7764:6;7735:10;:17;7746:5;7735:17;;;;;;;;;;;;;;;:26;7753:7;7735:26;;;;;;;;;;;;;;;:35;;;;7796:7;7780:32;;7789:5;7780:32;;;7805:6;7780:32;;;;;;:::i;:::-;;;;;;;;7508:308;;;:::o;7819:1493::-;576:1;7900:20;;:4;:20;;;;7892:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;576:1;7974:18;;:2;:18;;;;7966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;8045:5;:11;8051:4;8045:11;;;;;;;;;;;;;;;;;;;;;;;;;8044:12;8036:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8114:1;8105:6;:10;8097:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8183:15;8193:4;8183:9;:15::i;:::-;8173:6;:25;;8165:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;8279:1;8261:15;;:19;:53;;;;;8285:25;:29;8311:2;8285:29;;;;;;;;;;;;;;;;;;;;;;;;;8284:30;8261:53;:85;;;;;8319:23;:27;8343:2;8319:27;;;;;;;;;;;;;;;;;;;;;;;;;8318:28;8261:85;8257:215;;;8389:15;;8378:6;8362:13;8372:2;8362:9;:13::i;:::-;:22;;;;:::i;:::-;8361:43;;8353:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;8257:215;8494:1;8480:10;;:15;:48;;;;;8499:25;:29;8525:2;8499:29;;;;;;;;;;;;;;;;;;;;;;;;;8480:48;8476:89;;;8548:12;8535:10;:25;;;;8476:89;8569:19;8592:18;:24;8611:4;8592:24;;;;;;;;;;;;;;;;;;;;;;;;;8591:25;:52;;;;;8621:18;:22;8640:2;8621:22;;;;;;;;;;;;;;;;;;;;;;;;;8620:23;8591:52;8569:74;;8651:14;8647:263;;;8691:25;:31;8717:4;8691:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;8742:15;;8691:66;;;8725:14;;8691:66;8680:6;:78;;8672:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8815:25;:31;8841:4;8815:31;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;8866:10;;8850:12;:26;;8815:61;8811:95;;;8896:4;8884:5;:9;8890:2;8884:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;8811:95;8647:263;8914:15;8932:24;8950:4;8932:9;:24::i;:::-;8914:42;;8975:15;;8965:7;:25;8961:66;;;9007:15;;8997:25;;8961:66;9035:22;;;;;;;;;;;:48;;;;;9062:21;;;;;;;;;;;9061:22;9035:48;:85;;;;;9098:22;;9087:7;:33;;9035:85;:121;;;;;9125:25;:31;9151:4;9125:31;;;;;;;;;;;;;;;;;;;;;;;;;9124:32;9035:121;9031:225;;;9187:4;9163:21;;:28;;;;;;;;;;;;;;;;;;9196:21;9209:7;9196:12;:21::i;:::-;9246:5;9222:21;;:29;;;;;;;;;;;;;;;;;;9031:225;9260:48;9275:4;9281:2;9285:6;9293:14;9260;:48::i;:::-;7888:1424;;7819:1493;;;:::o;6921:143::-;6963:7;6977:15;6994;7013:19;:17;:19::i;:::-;6976:56;;;;7053:7;7043;:17;;;;:::i;:::-;7036:24;;;;6921:143;:::o;2034:169:6:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;10267:691:5:-;2074:4;2050:21;;:28;;;;;;;;;;;;;;;;;;10329:14:::1;10384:4;:17;;;10364:4;:17;;;10346:4;:15;;;:35;;;;:::i;:::-;:55;;;;:::i;:::-;10329:72;;10419:1;10409:6;:11;10405:24;;;10422:7;;;10405:24;10433;10487:6;10469:4;:15;;;10460:6;:24;;;;:::i;:::-;:33;;;;:::i;:::-;10433:60;;10497:26;10555:6;10535:4;:17;;;10526:6;:26;;;;:::i;:::-;:35;;;;:::i;:::-;10497:64;;10565:26;10622:18;10603:16;10594:6;:25;;;;:::i;:::-;:46;;;;:::i;:::-;10565:75;;10645:33;10659:18;10645:13;:33::i;:::-;10683:17;10703:61;10745:18;10726:16;:37;;;;:::i;:::-;10703:22;:61::i;:::-;10683:81;;10768:21;10841:4;:17;;;10823:4;:15;;;:35;;;;:::i;:::-;10804:4;:15;;;10792:9;:27;;;;:::i;:::-;:67;;;;:::i;:::-;10768:91;;10864:14;;;;;;;;;;;:23;;:38;10888:13;10864:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10906:16;;;;;;;;;;;:25;;:48;10932:21;10906:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10325:633;;;;;;2082:1;2111:5:::0;2087:21;;:29;;;;;;;;;;;;;;;;;;10267:691;:::o;9613:651::-;9722:26;9751:35;9762:7;9771:14;9751:10;:35::i;:::-;9722:64;;9795:21;:29;9817:6;9795:29;;;;;;;;;;;;;;;;;;;;;;;;;9791:70;;;9849:7;9831:6;:14;9838:6;9831:14;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9791:70;9869:21;:32;9891:9;9869:32;;;;;;;;;;;;;;;;;;;;;;;;;9865:88;;;9929:3;:19;;;9908:6;:17;9915:9;9908:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;9865:88;9975:3;:11;;;9957:6;:14;9964:6;9957:14;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;10011:3;:19;;;9990:6;:17;9997:9;9990:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;10039:14;10035:168;;;10060:33;10077:3;:15;;;10060:16;:33::i;:::-;10098:44;10113:3;:13;;;10128:3;:13;;;10098:14;:44::i;:::-;10177:4;10152:46;;10161:6;10152:46;;;10184:3;:13;;;10152:46;;;;;;:::i;:::-;;;;;;;;10035:168;10229:9;10212:48;;10221:6;10212:48;;;10240:3;:19;;;10212:48;;;;;;:::i;:::-;;;;;;;;9718:546;9613:651;;;;:::o;7067:438::-;7118:7;7127;7140:15;7158:6;;7140:24;;7168:15;7186:6;;7168:24;;7202:9;7197:217;7221:8;:15;;;;7217:1;:19;7197:217;;;7274:7;7252:6;:19;7259:8;7268:1;7259:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7252:19;;;;;;;;;;;;;;;;:29;:62;;;;7307:7;7285:6;:19;7292:8;7301:1;7292:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7285:19;;;;;;;;;;;;;;;;:29;7252:62;7248:91;;;7324:6;;7332;;7316:23;;;;;;;;;7248:91;7355:6;:19;7362:8;7371:1;7362:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7355:19;;;;;;;;;;;;;;;;7344:30;;;;;:::i;:::-;;;7390:6;:19;7397:8;7406:1;7397:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7390:19;;;;;;;;;;;;;;;;7379:30;;;;;:::i;:::-;;;7238:3;;;;;:::i;:::-;;;;7197:217;;;;7441:6;;7432;;:15;;;;:::i;:::-;7422:7;:25;7418:54;;;7457:6;;7465;;7449:23;;;;;;;;7418:54;7484:7;7493;7476:25;;;;;;7067:438;;;:::o;10961:402::-;11012:12;11035:4;11012:28;;11045:20;11077:1;11068:6;:10;;;;:::i;:::-;11045:33;;11082:26;11120:12;11111:6;:21;;;;:::i;:::-;11082:50;;11137:23;11163:36;11186:12;11163:22;:36::i;:::-;11137:62;;11204:41;11213:4;11227:6;;;;;;;;;;;433:12;11204:8;:41::i;:::-;11249:6;;;;;;;;;;;:22;;;11280:15;11297:4;11303:18;11323:1;11326;621:5;11343:15;11249:110;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11008:355;;;;10961:402;:::o;11366:435::-;11433:7;11446:12;11469:4;11446:28;;11479:21;11517:1;11503:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11479:40;;11533:4;11523;11528:1;11523:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;11551:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11541:4;11546:1;11541:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;11569:41;11578:4;11592:6;;;;;;;;;;;433:12;11569:8;:41::i;:::-;11615:23;11641:4;:12;;;11615:38;;11657:6;;;;;;;;;;;:57;;;11715:8;11725:1;11728:4;11734;11740:15;11657:99;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11782:15;11767:4;:12;;;:30;;;;:::i;:::-;11760:37;;;;;11366:435;;;:::o;5719:277::-;5792:26;;:::i;:::-;5830:29;5842:7;5851;5830:11;:29::i;:::-;5824:35;;5932:46;5944:3;5949:7;5958;5967:10;:8;:10::i;:::-;5932:11;:46::i;:::-;5864:3;:11;;5877:3;:19;;5898:3;:15;;5915:3;:13;;5863:115;;;;;;;;;;;;;;;;;;;;5719:277;;;;:::o;9315:84::-;9384:11;9374:6;;:21;;;;;;;:::i;:::-;;;;;;;;9315:84;:::o;9402:208::-;9476:12;9499:4;9476:28;;9525:9;9509:6;:12;9516:4;9509:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9543:21;:27;9565:4;9543:27;;;;;;;;;;;;;;;;;;;;;;;;;9539:68;;;9593:9;9577:6;:12;9584:4;9577:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9539:68;9472:138;9402:208;;:::o;5999:406::-;6073:26;;:::i;:::-;6110:7;6105:68;;6146:7;6124:3;:19;;:29;;;;;6158:10;;6105:68;6223:3;6205:4;:15;;;6195:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;6177:3;:15;;:49;;;;;6316:3;6295:4;:17;;;6275:4;:17;;;6257:4;:15;;;:35;;;;:::i;:::-;:55;;;;:::i;:::-;6246:7;:67;;;;:::i;:::-;:73;;;;:::i;:::-;6230:3;:13;;:89;;;;;6373:3;:13;;;6355:3;:15;;;6345:7;:25;;;;:::i;:::-;:41;;;;:::i;:::-;6323:3;:19;;:63;;;;;5999:406;;;;;:::o;6408:510::-;6531:15;6548:23;6573:19;6594:17;6637:11;6627:7;:21;;;;:::i;:::-;6617:31;;6658:7;6653:55;;6680:7;6689;6698:1;6701;6672:31;;;;;;;;;;6653:55;6744:11;6726:3;:15;;;:29;;;;:::i;:::-;6712:43;;6787:11;6771:3;:13;;;:27;;;;:::i;:::-;6759:39;;6844:9;6830:11;6820:7;:21;;;;:::i;:::-;:33;;;;:::i;:::-;6802:51;;6408:510;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:7:-;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:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:307::-;2020:1;2030:113;2044:6;2041:1;2038:13;2030:113;;;2129:1;2124:3;2120:11;2114:18;2110:1;2105:3;2101:11;2094:39;2066:2;2063:1;2059:10;2054:15;;2030:113;;;2161:6;2158:1;2155:13;2152:101;;;2241:1;2232:6;2227:3;2223:16;2216:27;2152:101;2001:258;1952:307;;;:::o;2265:102::-;2306:6;2357:2;2353:7;2348:2;2341:5;2337:14;2333:28;2323:38;;2265:102;;;:::o;2373:364::-;2461:3;2489:39;2522:5;2489:39;:::i;:::-;2544:71;2608:6;2603:3;2544:71;:::i;:::-;2537:78;;2624:52;2669:6;2664:3;2657:4;2650:5;2646:16;2624:52;:::i;:::-;2701:29;2723:6;2701:29;:::i;:::-;2696:3;2692:39;2685:46;;2465:272;2373:364;;;;:::o;2743:313::-;2856:4;2894:2;2883:9;2879:18;2871:26;;2943:9;2937:4;2933:20;2929:1;2918:9;2914:17;2907:47;2971:78;3044:4;3035:6;2971:78;:::i;:::-;2963:86;;2743:313;;;;:::o;3062:77::-;3099:7;3128:5;3117:16;;3062:77;;;:::o;3145:122::-;3218:24;3236:5;3218:24;:::i;:::-;3211:5;3208:35;3198:63;;3257:1;3254;3247:12;3198:63;3145:122;:::o;3273:139::-;3319:5;3357:6;3344:20;3335:29;;3373:33;3400:5;3373:33;:::i;:::-;3273:139;;;;:::o;3418:474::-;3486:6;3494;3543:2;3531:9;3522:7;3518:23;3514:32;3511:119;;;3549:79;;:::i;:::-;3511:119;3669:1;3694:53;3739:7;3730:6;3719:9;3715:22;3694:53;:::i;:::-;3684:63;;3640:117;3796:2;3822:53;3867:7;3858:6;3847:9;3843:22;3822:53;:::i;:::-;3812:63;;3767:118;3418:474;;;;;:::o;3898:109::-;3979:21;3994:5;3979:21;:::i;:::-;3974:3;3967:34;3898:109;;:::o;4013:210::-;4100:4;4138:2;4127:9;4123:18;4115:26;;4151:65;4213:1;4202:9;4198:17;4189:6;4151:65;:::i;:::-;4013:210;;;;:::o;4229:329::-;4288:6;4337:2;4325:9;4316:7;4312:23;4308:32;4305:119;;;4343:79;;:::i;:::-;4305:119;4463:1;4488:53;4533:7;4524:6;4513:9;4509:22;4488:53;:::i;:::-;4478:63;;4434:117;4229:329;;;;:::o;4564:118::-;4651:24;4669:5;4651:24;:::i;:::-;4646:3;4639:37;4564:118;;:::o;4688:222::-;4781:4;4819:2;4808:9;4804:18;4796:26;;4832:71;4900:1;4889:9;4885:17;4876:6;4832:71;:::i;:::-;4688:222;;;;:::o;4916:619::-;4993:6;5001;5009;5058:2;5046:9;5037:7;5033:23;5029:32;5026:119;;;5064:79;;:::i;:::-;5026:119;5184:1;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5155:117;5311:2;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5282:118;5439:2;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5410:118;4916:619;;;;;:::o;5541:329::-;5600:6;5649:2;5637:9;5628:7;5624:23;5620:32;5617:119;;;5655:79;;:::i;:::-;5617:119;5775:1;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5746:117;5541:329;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:323::-;6362:6;6411:2;6399:9;6390:7;6386:23;6382:32;6379:119;;;6417:79;;:::i;:::-;6379:119;6537:1;6562:50;6604:7;6595:6;6584:9;6580:22;6562:50;:::i;:::-;6552:60;;6508:114;6306:323;;;;:::o;6635:765::-;6721:6;6729;6737;6745;6794:3;6782:9;6773:7;6769:23;6765:33;6762:120;;;6801:79;;:::i;:::-;6762:120;6921:1;6946:53;6991:7;6982:6;6971:9;6967:22;6946:53;:::i;:::-;6936:63;;6892:117;7048:2;7074:53;7119:7;7110:6;7099:9;7095:22;7074:53;:::i;:::-;7064:63;;7019:118;7176:2;7202:53;7247:7;7238:6;7227:9;7223:22;7202:53;:::i;:::-;7192:63;;7147:118;7304:2;7330:53;7375:7;7366:6;7355:9;7351:22;7330:53;:::i;:::-;7320:63;;7275:118;6635:765;;;;;;;:::o;7406:104::-;7451:7;7480:24;7498:5;7480:24;:::i;:::-;7469:35;;7406:104;;;:::o;7516:138::-;7597:32;7623:5;7597:32;:::i;:::-;7590:5;7587:43;7577:71;;7644:1;7641;7634:12;7577:71;7516:138;:::o;7660:155::-;7714:5;7752:6;7739:20;7730:29;;7768:41;7803:5;7768:41;:::i;:::-;7660:155;;;;:::o;7821:345::-;7888:6;7937:2;7925:9;7916:7;7912:23;7908:32;7905:119;;;7943:79;;:::i;:::-;7905:119;8063:1;8088:61;8141:7;8132:6;8121:9;8117:22;8088:61;:::i;:::-;8078:71;;8034:125;7821:345;;;;:::o;8172:118::-;8259:24;8277:5;8259:24;:::i;:::-;8254:3;8247:37;8172:118;;:::o;8296:222::-;8389:4;8427:2;8416:9;8412:18;8404:26;;8440:71;8508:1;8497:9;8493:17;8484:6;8440:71;:::i;:::-;8296:222;;;;:::o;8524:553::-;8701:4;8739:3;8728:9;8724:19;8716:27;;8753:71;8821:1;8810:9;8806:17;8797:6;8753:71;:::i;:::-;8834:72;8902:2;8891:9;8887:18;8878:6;8834:72;:::i;:::-;8916;8984:2;8973:9;8969:18;8960:6;8916:72;:::i;:::-;8998;9066:2;9055:9;9051:18;9042:6;8998:72;:::i;:::-;8524:553;;;;;;;:::o;9083:474::-;9151:6;9159;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9334:1;9359:53;9404:7;9395:6;9384:9;9380:22;9359:53;:::i;:::-;9349:63;;9305:117;9461:2;9487:53;9532:7;9523:6;9512:9;9508:22;9487:53;:::i;:::-;9477:63;;9432:118;9083:474;;;;;:::o;9563:::-;9631:6;9639;9688:2;9676:9;9667:7;9663:23;9659:32;9656:119;;;9694:79;;:::i;:::-;9656:119;9814:1;9839:53;9884:7;9875:6;9864:9;9860:22;9839:53;:::i;:::-;9829:63;;9785:117;9941:2;9967:53;10012:7;10003:6;9992:9;9988:22;9967:53;:::i;:::-;9957:63;;9912:118;9563:474;;;;;:::o;10043:182::-;10183:34;10179:1;10171:6;10167:14;10160:58;10043:182;:::o;10231:366::-;10373:3;10394:67;10458:2;10453:3;10394:67;:::i;:::-;10387:74;;10470:93;10559:3;10470:93;:::i;:::-;10588:2;10583:3;10579:12;10572:19;;10231:366;;;:::o;10603:419::-;10769:4;10807:2;10796:9;10792:18;10784:26;;10856:9;10850:4;10846:20;10842:1;10831:9;10827:17;10820:47;10884:131;11010:4;10884:131;:::i;:::-;10876:139;;10603:419;;;:::o;11028:223::-;11168:34;11164:1;11156:6;11152:14;11145:58;11237:6;11232:2;11224:6;11220:15;11213:31;11028:223;:::o;11257:366::-;11399:3;11420:67;11484:2;11479:3;11420:67;:::i;:::-;11413:74;;11496:93;11585:3;11496:93;:::i;:::-;11614:2;11609:3;11605:12;11598:19;;11257:366;;;:::o;11629:419::-;11795:4;11833:2;11822:9;11818:18;11810:26;;11882:9;11876:4;11872:20;11868:1;11857:9;11853:17;11846:47;11910:131;12036:4;11910:131;:::i;:::-;11902:139;;11629:419;;;:::o;12054:177::-;12194:29;12190:1;12182:6;12178:14;12171:53;12054:177;:::o;12237:366::-;12379:3;12400:67;12464:2;12459:3;12400:67;:::i;:::-;12393:74;;12476:93;12565:3;12476:93;:::i;:::-;12594:2;12589:3;12585:12;12578:19;;12237:366;;;:::o;12609:419::-;12775:4;12813:2;12802:9;12798:18;12790:26;;12862:9;12856:4;12852:20;12848:1;12837:9;12833:17;12826:47;12890:131;13016:4;12890:131;:::i;:::-;12882:139;;12609:419;;;:::o;13034:227::-;13174:34;13170:1;13162:6;13158:14;13151:58;13243:10;13238:2;13230:6;13226:15;13219:35;13034:227;:::o;13267:366::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13267:366;;;:::o;13639:419::-;13805:4;13843:2;13832:9;13828:18;13820:26;;13892:9;13886:4;13882:20;13878:1;13867:9;13863:17;13856:47;13920:131;14046:4;13920:131;:::i;:::-;13912:139;;13639:419;;;:::o;14064:180::-;14112:77;14109:1;14102:88;14209:4;14206:1;14199:15;14233:4;14230:1;14223:15;14250:180;14298:77;14295:1;14288:88;14395:4;14392:1;14385:15;14419:4;14416:1;14409:15;14436:185;14476:1;14493:20;14511:1;14493:20;:::i;:::-;14488:25;;14527:20;14545:1;14527:20;:::i;:::-;14522:25;;14566:1;14556:35;;14571:18;;:::i;:::-;14556:35;14613:1;14610;14606:9;14601:14;;14436:185;;;;:::o;14627:239::-;14767:34;14763:1;14755:6;14751:14;14744:58;14836:22;14831:2;14823:6;14819:15;14812:47;14627:239;:::o;14872:366::-;15014:3;15035:67;15099:2;15094:3;15035:67;:::i;:::-;15028:74;;15111:93;15200:3;15111:93;:::i;:::-;15229:2;15224:3;15220:12;15213:19;;14872:366;;;:::o;15244:419::-;15410:4;15448:2;15437:9;15433:18;15425:26;;15497:9;15491:4;15487:20;15483:1;15472:9;15468:17;15461:47;15525:131;15651:4;15525:131;:::i;:::-;15517:139;;15244:419;;;:::o;15669:233::-;15809:34;15805:1;15797:6;15793:14;15786:58;15878:16;15873:2;15865:6;15861:15;15854:41;15669:233;:::o;15908:366::-;16050:3;16071:67;16135:2;16130:3;16071:67;:::i;:::-;16064:74;;16147:93;16236:3;16147:93;:::i;:::-;16265:2;16260:3;16256:12;16249:19;;15908:366;;;:::o;16280:419::-;16446:4;16484:2;16473:9;16469:18;16461:26;;16533:9;16527:4;16523:20;16519:1;16508:9;16504:17;16497:47;16561:131;16687:4;16561:131;:::i;:::-;16553:139;;16280:419;;;:::o;16705:229::-;16845:34;16841:1;16833:6;16829:14;16822:58;16914:12;16909:2;16901:6;16897:15;16890:37;16705:229;:::o;16940:366::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:419::-;17478:4;17516:2;17505:9;17501:18;17493:26;;17565:9;17559:4;17555:20;17551:1;17540:9;17536:17;17529:47;17593:131;17719:4;17593:131;:::i;:::-;17585:139;;17312:419;;;:::o;17737:305::-;17777:3;17796:20;17814:1;17796:20;:::i;:::-;17791:25;;17830:20;17848:1;17830:20;:::i;:::-;17825:25;;17984:1;17916:66;17912:74;17909:1;17906:81;17903:107;;;17990:18;;:::i;:::-;17903:107;18034:1;18031;18027:9;18020:16;;17737:305;;;;:::o;18048:235::-;18188:34;18184:1;18176:6;18172:14;18165:58;18257:18;18252:2;18244:6;18240:15;18233:43;18048:235;:::o;18289:366::-;18431:3;18452:67;18516:2;18511:3;18452:67;:::i;:::-;18445:74;;18528:93;18617:3;18528:93;:::i;:::-;18646:2;18641:3;18637:12;18630:19;;18289:366;;;:::o;18661:419::-;18827:4;18865:2;18854:9;18850:18;18842:26;;18914:9;18908:4;18904:20;18900:1;18889:9;18885:17;18878:47;18942:131;19068:4;18942:131;:::i;:::-;18934:139;;18661:419;;;:::o;19086:231::-;19226:34;19222:1;19214:6;19210:14;19203:58;19295:14;19290:2;19282:6;19278:15;19271:39;19086:231;:::o;19323:366::-;19465:3;19486:67;19550:2;19545:3;19486:67;:::i;:::-;19479:74;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19323:366;;;:::o;19695:419::-;19861:4;19899:2;19888:9;19884:18;19876:26;;19948:9;19942:4;19938:20;19934:1;19923:9;19919:17;19912:47;19976:131;20102:4;19976:131;:::i;:::-;19968:139;;19695:419;;;:::o;20120:233::-;20260:34;20256:1;20248:6;20244:14;20237:58;20329:16;20324:2;20316:6;20312:15;20305:41;20120:233;:::o;20359:366::-;20501:3;20522:67;20586:2;20581:3;20522:67;:::i;:::-;20515:74;;20598:93;20687:3;20598:93;:::i;:::-;20716:2;20711:3;20707:12;20700:19;;20359:366;;;:::o;20731:419::-;20897:4;20935:2;20924:9;20920:18;20912:26;;20984:9;20978:4;20974:20;20970:1;20959:9;20955:17;20948:47;21012:131;21138:4;21012:131;:::i;:::-;21004:139;;20731:419;;;:::o;21156:243::-;21296:34;21292:1;21284:6;21280:14;21273:58;21365:26;21360:2;21352:6;21348:15;21341:51;21156:243;:::o;21405:366::-;21547:3;21568:67;21632:2;21627:3;21568:67;:::i;:::-;21561:74;;21644:93;21733:3;21644:93;:::i;:::-;21762:2;21757:3;21753:12;21746:19;;21405:366;;;:::o;21777:419::-;21943:4;21981:2;21970:9;21966:18;21958:26;;22030:9;22024:4;22020:20;22016:1;22005:9;22001:17;21994:47;22058:131;22184:4;22058:131;:::i;:::-;22050:139;;21777:419;;;:::o;22202:224::-;22342:34;22338:1;22330:6;22326:14;22319:58;22411:7;22406:2;22398:6;22394:15;22387:32;22202:224;:::o;22432:366::-;22574:3;22595:67;22659:2;22654:3;22595:67;:::i;:::-;22588:74;;22671:93;22760:3;22671:93;:::i;:::-;22789:2;22784:3;22780:12;22773:19;;22432:366;;;:::o;22804:419::-;22970:4;23008:2;22997:9;22993:18;22985:26;;23057:9;23051:4;23047:20;23043:1;23032:9;23028:17;23021:47;23085:131;23211:4;23085:131;:::i;:::-;23077:139;;22804:419;;;:::o;23229:173::-;23369:25;23365:1;23357:6;23353:14;23346:49;23229:173;:::o;23408:366::-;23550:3;23571:67;23635:2;23630:3;23571:67;:::i;:::-;23564:74;;23647:93;23736:3;23647:93;:::i;:::-;23765:2;23760:3;23756:12;23749:19;;23408:366;;;:::o;23780:419::-;23946:4;23984:2;23973:9;23969:18;23961:26;;24033:9;24027:4;24023:20;24019:1;24008:9;24004:17;23997:47;24061:131;24187:4;24061:131;:::i;:::-;24053:139;;23780:419;;;:::o;24205:180::-;24253:77;24250:1;24243:88;24350:4;24347:1;24340:15;24374:4;24371:1;24364:15;24391:191;24431:4;24451:20;24469:1;24451:20;:::i;:::-;24446:25;;24485:20;24503:1;24485:20;:::i;:::-;24480:25;;24524:1;24521;24518:8;24515:34;;;24529:18;;:::i;:::-;24515:34;24574:1;24571;24567:9;24559:17;;24391:191;;;;:::o;24588:180::-;24636:77;24633:1;24626:88;24733:4;24730:1;24723:15;24757:4;24754:1;24747:15;24774:233;24813:3;24836:24;24854:5;24836:24;:::i;:::-;24827:33;;24882:66;24875:5;24872:77;24869:103;;;24952:18;;:::i;:::-;24869:103;24999:1;24992:5;24988:13;24981:20;;24774:233;;;:::o;25013:237::-;25153:34;25149:1;25141:6;25137:14;25130:58;25222:20;25217:2;25209:6;25205:15;25198:45;25013:237;:::o;25256:366::-;25398:3;25419:67;25483:2;25478:3;25419:67;:::i;:::-;25412:74;;25495:93;25584:3;25495:93;:::i;:::-;25613:2;25608:3;25604:12;25597:19;;25256:366;;;:::o;25628:419::-;25794:4;25832:2;25821:9;25817:18;25809:26;;25881:9;25875:4;25871:20;25867:1;25856:9;25852:17;25845:47;25909:131;26035:4;25909:131;:::i;:::-;25901:139;;25628:419;;;:::o;26053:238::-;26193:34;26189:1;26181:6;26177:14;26170:58;26262:21;26257:2;26249:6;26245:15;26238:46;26053:238;:::o;26297:366::-;26439:3;26460:67;26524:2;26519:3;26460:67;:::i;:::-;26453:74;;26536:93;26625:3;26536:93;:::i;:::-;26654:2;26649:3;26645:12;26638:19;;26297:366;;;:::o;26669:419::-;26835:4;26873:2;26862:9;26858:18;26850:26;;26922:9;26916:4;26912:20;26908:1;26897:9;26893:17;26886:47;26950:131;27076:4;26950:131;:::i;:::-;26942:139;;26669:419;;;:::o;27094:225::-;27234:34;27230:1;27222:6;27218:14;27211:58;27303:8;27298:2;27290:6;27286:15;27279:33;27094:225;:::o;27325:366::-;27467:3;27488:67;27552:2;27547:3;27488:67;:::i;:::-;27481:74;;27564:93;27653:3;27564:93;:::i;:::-;27682:2;27677:3;27673:12;27666:19;;27325:366;;;:::o;27697:419::-;27863:4;27901:2;27890:9;27886:18;27878:26;;27950:9;27944:4;27940:20;27936:1;27925:9;27921:17;27914:47;27978:131;28104:4;27978:131;:::i;:::-;27970:139;;27697:419;;;:::o;28122:223::-;28262:34;28258:1;28250:6;28246:14;28239:58;28331:6;28326:2;28318:6;28314:15;28307:31;28122:223;:::o;28351:366::-;28493:3;28514:67;28578:2;28573:3;28514:67;:::i;:::-;28507:74;;28590:93;28679:3;28590:93;:::i;:::-;28708:2;28703:3;28699:12;28692:19;;28351:366;;;:::o;28723:419::-;28889:4;28927:2;28916:9;28912:18;28904:26;;28976:9;28970:4;28966:20;28962:1;28951:9;28947:17;28940:47;29004:131;29130:4;29004:131;:::i;:::-;28996:139;;28723:419;;;:::o;29148:221::-;29288:34;29284:1;29276:6;29272:14;29265:58;29357:4;29352:2;29344:6;29340:15;29333:29;29148:221;:::o;29375:366::-;29517:3;29538:67;29602:2;29597:3;29538:67;:::i;:::-;29531:74;;29614:93;29703:3;29614:93;:::i;:::-;29732:2;29727:3;29723:12;29716:19;;29375:366;;;:::o;29747:419::-;29913:4;29951:2;29940:9;29936:18;29928:26;;30000:9;29994:4;29990:20;29986:1;29975:9;29971:17;29964:47;30028:131;30154:4;30028:131;:::i;:::-;30020:139;;29747:419;;;:::o;30172:224::-;30312:34;30308:1;30300:6;30296:14;30289:58;30381:7;30376:2;30368:6;30364:15;30357:32;30172:224;:::o;30402:366::-;30544:3;30565:67;30629:2;30624:3;30565:67;:::i;:::-;30558:74;;30641:93;30730:3;30641:93;:::i;:::-;30759:2;30754:3;30750:12;30743:19;;30402:366;;;:::o;30774:419::-;30940:4;30978:2;30967:9;30963:18;30955:26;;31027:9;31021:4;31017:20;31013:1;31002:9;30998:17;30991:47;31055:131;31181:4;31055:131;:::i;:::-;31047:139;;30774:419;;;:::o;31199:222::-;31339:34;31335:1;31327:6;31323:14;31316:58;31408:5;31403:2;31395:6;31391:15;31384:30;31199:222;:::o;31427:366::-;31569:3;31590:67;31654:2;31649:3;31590:67;:::i;:::-;31583:74;;31666:93;31755:3;31666:93;:::i;:::-;31784:2;31779:3;31775:12;31768:19;;31427:366;;;:::o;31799:419::-;31965:4;32003:2;31992:9;31988:18;31980:26;;32052:9;32046:4;32042:20;32038:1;32027:9;32023:17;32016:47;32080:131;32206:4;32080:131;:::i;:::-;32072:139;;31799:419;;;:::o;32224:182::-;32364:34;32360:1;32352:6;32348:14;32341:58;32224:182;:::o;32412:366::-;32554:3;32575:67;32639:2;32634:3;32575:67;:::i;:::-;32568:74;;32651:93;32740:3;32651:93;:::i;:::-;32769:2;32764:3;32760:12;32753:19;;32412:366;;;:::o;32784:419::-;32950:4;32988:2;32977:9;32973:18;32965:26;;33037:9;33031:4;33027:20;33023:1;33012:9;33008:17;33001:47;33065:131;33191:4;33065:131;:::i;:::-;33057:139;;32784:419;;;:::o;33209:228::-;33349:34;33345:1;33337:6;33333:14;33326:58;33418:11;33413:2;33405:6;33401:15;33394:36;33209:228;:::o;33443:366::-;33585:3;33606:67;33670:2;33665:3;33606:67;:::i;:::-;33599:74;;33682:93;33771:3;33682:93;:::i;:::-;33800:2;33795:3;33791:12;33784:19;;33443:366;;;:::o;33815:419::-;33981:4;34019:2;34008:9;34004:18;33996:26;;34068:9;34062:4;34058:20;34054:1;34043:9;34039:17;34032:47;34096:131;34222:4;34096:131;:::i;:::-;34088:139;;33815:419;;;:::o;34240:236::-;34380:34;34376:1;34368:6;34364:14;34357:58;34449:19;34444:2;34436:6;34432:15;34425:44;34240:236;:::o;34482:366::-;34624:3;34645:67;34709:2;34704:3;34645:67;:::i;:::-;34638:74;;34721:93;34810:3;34721:93;:::i;:::-;34839:2;34834:3;34830:12;34823:19;;34482:366;;;:::o;34854:419::-;35020:4;35058:2;35047:9;35043:18;35035:26;;35107:9;35101:4;35097:20;35093:1;35082:9;35078:17;35071:47;35135:131;35261:4;35135:131;:::i;:::-;35127:139;;34854:419;;;:::o;35279:245::-;35419:34;35415:1;35407:6;35403:14;35396:58;35488:28;35483:2;35475:6;35471:15;35464:53;35279:245;:::o;35530:366::-;35672:3;35693:67;35757:2;35752:3;35693:67;:::i;:::-;35686:74;;35769:93;35858:3;35769:93;:::i;:::-;35887:2;35882:3;35878:12;35871:19;;35530:366;;;:::o;35902:419::-;36068:4;36106:2;36095:9;36091:18;36083:26;;36155:9;36149:4;36145:20;36141:1;36130:9;36126:17;36119:47;36183:131;36309:4;36183:131;:::i;:::-;36175:139;;35902:419;;;:::o;36327:229::-;36467:34;36463:1;36455:6;36451:14;36444:58;36536:12;36531:2;36523:6;36519:15;36512:37;36327:229;:::o;36562:366::-;36704:3;36725:67;36789:2;36784:3;36725:67;:::i;:::-;36718:74;;36801:93;36890:3;36801:93;:::i;:::-;36919:2;36914:3;36910:12;36903:19;;36562:366;;;:::o;36934:419::-;37100:4;37138:2;37127:9;37123:18;37115:26;;37187:9;37181:4;37177:20;37173:1;37162:9;37158:17;37151:47;37215:131;37341:4;37215:131;:::i;:::-;37207:139;;36934:419;;;:::o;37359:348::-;37399:7;37422:20;37440:1;37422:20;:::i;:::-;37417:25;;37456:20;37474:1;37456:20;:::i;:::-;37451:25;;37644:1;37576:66;37572:74;37569:1;37566:81;37561:1;37554:9;37547:17;37543:105;37540:131;;;37651:18;;:::i;:::-;37540:131;37699:1;37696;37692:9;37681:20;;37359:348;;;;:::o;37713:85::-;37758:7;37787:5;37776:16;;37713:85;;;:::o;37804:60::-;37832:3;37853:5;37846:12;;37804:60;;;:::o;37870:158::-;37928:9;37961:61;37979:42;37988:32;38014:5;37988:32;:::i;:::-;37979:42;:::i;:::-;37961:61;:::i;:::-;37948:74;;37870:158;;;:::o;38034:147::-;38129:45;38168:5;38129:45;:::i;:::-;38124:3;38117:58;38034:147;;:::o;38187:807::-;38436:4;38474:3;38463:9;38459:19;38451:27;;38488:71;38556:1;38545:9;38541:17;38532:6;38488:71;:::i;:::-;38569:72;38637:2;38626:9;38622:18;38613:6;38569:72;:::i;:::-;38651:80;38727:2;38716:9;38712:18;38703:6;38651:80;:::i;:::-;38741;38817:2;38806:9;38802:18;38793:6;38741:80;:::i;:::-;38831:73;38899:3;38888:9;38884:19;38875:6;38831:73;:::i;:::-;38914;38982:3;38971:9;38967:19;38958:6;38914:73;:::i;:::-;38187:807;;;;;;;;;:::o;39000:143::-;39057:5;39088:6;39082:13;39073:22;;39104:33;39131:5;39104:33;:::i;:::-;39000:143;;;;:::o;39149:663::-;39237:6;39245;39253;39302:2;39290:9;39281:7;39277:23;39273:32;39270:119;;;39308:79;;:::i;:::-;39270:119;39428:1;39453:64;39509:7;39500:6;39489:9;39485:22;39453:64;:::i;:::-;39443:74;;39399:128;39566:2;39592:64;39648:7;39639:6;39628:9;39624:22;39592:64;:::i;:::-;39582:74;;39537:129;39705:2;39731:64;39787:7;39778:6;39767:9;39763:22;39731:64;:::i;:::-;39721:74;;39676:129;39149:663;;;;;:::o;39818:180::-;39866:77;39863:1;39856:88;39963:4;39960:1;39953:15;39987:4;39984:1;39977:15;40004:143;40061:5;40092:6;40086:13;40077:22;;40108:33;40135:5;40108:33;:::i;:::-;40004:143;;;;:::o;40153:351::-;40223:6;40272:2;40260:9;40251:7;40247:23;40243:32;40240:119;;;40278:79;;:::i;:::-;40240:119;40398:1;40423:64;40479:7;40470:6;40459:9;40455:22;40423:64;:::i;:::-;40413:74;;40369:128;40153:351;;;;:::o;40510:114::-;40577:6;40611:5;40605:12;40595:22;;40510:114;;;:::o;40630:184::-;40729:11;40763:6;40758:3;40751:19;40803:4;40798:3;40794:14;40779:29;;40630:184;;;;:::o;40820:132::-;40887:4;40910:3;40902:11;;40940:4;40935:3;40931:14;40923:22;;40820:132;;;:::o;40958:108::-;41035:24;41053:5;41035:24;:::i;:::-;41030:3;41023:37;40958:108;;:::o;41072:179::-;41141:10;41162:46;41204:3;41196:6;41162:46;:::i;:::-;41240:4;41235:3;41231:14;41217:28;;41072:179;;;;:::o;41257:113::-;41327:4;41359;41354:3;41350:14;41342:22;;41257:113;;;:::o;41406:732::-;41525:3;41554:54;41602:5;41554:54;:::i;:::-;41624:86;41703:6;41698:3;41624:86;:::i;:::-;41617:93;;41734:56;41784:5;41734:56;:::i;:::-;41813:7;41844:1;41829:284;41854:6;41851:1;41848:13;41829:284;;;41930:6;41924:13;41957:63;42016:3;42001:13;41957:63;:::i;:::-;41950:70;;42043:60;42096:6;42043:60;:::i;:::-;42033:70;;41889:224;41876:1;41873;41869:9;41864:14;;41829:284;;;41833:14;42129:3;42122:10;;41530:608;;;41406:732;;;;:::o;42144:831::-;42407:4;42445:3;42434:9;42430:19;42422:27;;42459:71;42527:1;42516:9;42512:17;42503:6;42459:71;:::i;:::-;42540:80;42616:2;42605:9;42601:18;42592:6;42540:80;:::i;:::-;42667:9;42661:4;42657:20;42652:2;42641:9;42637:18;42630:48;42695:108;42798:4;42789:6;42695:108;:::i;:::-;42687:116;;42813:72;42881:2;42870:9;42866:18;42857:6;42813:72;:::i;:::-;42895:73;42963:3;42952:9;42948:19;42939:6;42895:73;:::i;:::-;42144:831;;;;;;;;:::o

Swarm Source

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