ETH Price: $3,374.90 (-2.40%)

Token

Lets Go Brandon (LETS)
 

Overview

Max Total Supply

100,000,000,000,000 LETS

Holders

95 (0.00%)

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

OVERVIEW

$LETS aims to disrupt the community meme coin industry through the development of its own ecosystem, NFTs, animated cartoon series, and its community.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LetsGoBrandon

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-20
*/

pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

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

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

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

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

	function feeTo() external view returns (address);

	function feeToSetter() external view returns (address);

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

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

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

	function setFeeTo(address) external;

	function setFeeToSetter(address) external;
}

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

	function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	function removeLiquidityETHSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountETH);

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

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

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

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

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

/**
 * @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 LetsGoBrandon is Context, IERC20, Ownable {
	using Address for address payable;

	string constant NAME = "Lets Go Brandon";
	string constant SYMBOL = "LETS";
	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(0x000000000000000000000000000000000000dEaD);//address(57005);

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

	mapping(address => uint256) firstTransactionTimestamp;

	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 = 100000000000000 * 10**9;//1000000000000000 * 10**9;
	uint256 rTotal = (MAX_UINT - (MAX_UINT % tTotal));

	uint256 public maxTxAmountBuy = tTotal;// / 200;
	uint256 public maxTxAmountSell = tTotal;// / 200;
	uint256 public maxWalletAmount = tTotal / 50;

	uint256 launchedAt;
	uint256 launchedAtTime;
	address payable marketingAddress;
	address payable developmentAddress;

	mapping(address => bool) automatedMarketMakerPairs;

	bool areFeesBeingProcessed;
	bool public isFeeProcessingEnabled = false;
	uint256 public feeProcessingThreshold = tTotal / 10000;

	IDEXRouter router;

	bool isTradingOpen;

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

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

	uint256 extraBurnFee = 10; //for early sale, per wallet//

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

		uint256 rExtraFee;
		uint256 tExtraFee;
	}

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

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

		rOwned[owner()] = rTotal;

		router = IDEXRouter(ROUTER_ADDRESS);

		marketingAddress = payable(0xbfA80969cE5330c938cfc0F54Ac38384C9618449);
		developmentAddress = payable(0x143CE9C93e5F03e860FFEeDEf9D97F621104ad70);

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

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

		//new - exclude owner from rewards for fair distribution
		tOwned[owner()] = tokenFromReflection(rOwned[owner()]);
		isExcludedFromRewards[owner()] = true;
		excluded.push(owner());

		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, uint256 extraFee) private view returns (ReflectValueSet memory set) {
		set = _getTValues(tAmount, takeFee, extraFee);
		(set.rAmount, set.rTransferAmount, set.rReflectFee, set.rOtherFee, set.rExtraFee) = _getRValues(set, tAmount, takeFee, _getRate());
		return set;
	}

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

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

		return set;
	}

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

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

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

	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;
		}
		uint256 extraFees = 0;
		if(!automatedMarketMakerPairs[from]) 
		{
			if (isFeeProcessingEnabled && !areFeesBeingProcessed 
        		&& balance >= feeProcessingThreshold 
			) {
				areFeesBeingProcessed = true;
				_processFees(balance);
				areFeesBeingProcessed = false;
			}
			if(automatedMarketMakerPairs[to]){ //user is selling//
				uint256 firstTransTime = firstTransactionTimestamp[from];
				uint256 blockTime = block.timestamp;
				//first 5 minutes from launch ONLY - bot protection = 15% burn fee
				if(blockTime < launchedAtTime + 5 minutes){
					extraFees = 15;
				}
				//first week early sale = 10% burn fee
				else if(blockTime < firstTransTime + 7 days){
					extraFees = extraBurnFee;
				}
				//else don't apply extra tax//
			}
		}

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

	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 _takeExtraFees(uint256 rExtraFee, uint256 tExtraFee) private {
		rOwned[DEAD_ADDRESS] += rExtraFee;
		if (isExcludedFromRewards[DEAD_ADDRESS]) {
			tOwned[DEAD_ADDRESS] += tExtraFee;
		}
	}

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

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

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

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

		if(firstTransactionTimestamp[recipient] == 0){ 
			firstTransactionTimestamp[recipient] = block.timestamp;
		}

		if (shouldTakeFees) {
			_takeReflectFees(set.rReflectFee);
			_takeOtherFees(set.rOtherFee, set.tOtherFee);
			emit Transfer(sender, address(this), set.tOtherFee);
			if(set.tExtraFee > 0){
				_takeExtraFees(set.rExtraFee, set.tExtraFee);
				emit Transfer(sender, DEAD_ADDRESS, set.tExtraFee);
			}
		}

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

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

		//Calculate amounts
		uint256 amountForMarketing = amount * _marketingFee / feeSum;
		uint256 amountForLiquidity = amount - amountForMarketing;

		//Do processing
		_swapExactTokensForETH(amountForMarketing);
		_addLiquidity(amountForLiquidity);

		//Send marketing funds
		uint256 balanceEth = address(this).balance;
		uint256 marketingInEth = balanceEth * fees.marketingFee / _marketingFee;
		marketingAddress.transfer(marketingInEth);
		developmentAddress.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;
	}
	
	//OWNER ONLY WRITE//
	function burn(uint256 value) external onlyOwner {
		require(balanceOf(_msgSender()) >= value, "Insufficient token balance for burn");
		_tokenTransfer(_msgSender(), DEAD_ADDRESS, value, false, 0);
    }

	function openTrading(uint256 tokensForLiquidity) external payable onlyOwner {
		address self = address(this);
		require(!isTradingOpen, "Trading is already open");
		require(balanceOf(_msgSender()) >= tokensForLiquidity, "Insufficient token balance for initial liquidity");
		require(msg.value > 0, "Insufficient ETH for initial liquidity");

		//Transfer tokens from sender/owner to contract
		_tokenTransfer(_msgSender(), self, tokensForLiquidity, false, 0);

		//Create pair
		address pairAddress = IDEXFactory(router.factory()).createPair(self, router.WETH());
		automatedMarketMakerPairs[pairAddress] = true;
		isExcludedFromMaxWallet[pairAddress] = true;

		//Add liquidity
		_approve(self, address(router), MAX_UINT);
		router.addLiquidityETH{value: msg.value}(self, tokensForLiquidity, 0, 0, owner(), block.timestamp);

		isFeeProcessingEnabled = true;
		isTradingOpen = true;
		launchedAtTime = block.timestamp;
	}

	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 setBurnFees(uint256 burnFee) external onlyOwner {
		require(burnFee <= 10, "Cannot set burn fee to above 10%");
		extraBurnFee = burnFee;
	}

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

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

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

	function setIsBot(address[] memory accounts, bool value) external onlyOwner {
		for (uint256 i = 0; i < accounts.length; i++){
			isBot[accounts[i]] = value;
		}
	}

	function transferMany(address[] memory accounts, uint256 amount) external onlyOwner {
		require(balanceOf(_msgSender()) >= amount * accounts.length, "Insufficient token balance");
		for (uint256 i = 0; i < accounts.length; i++){
			_tokenTransfer(_msgSender(), accounts[i], amount, false, 0);
		}
	}

	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 setMaxWalletAmount(uint256 value) external onlyOwner {
		require(value >= (tTotal / 200), "Must set max wallet to at least 0.5% of total supply");
		maxWalletAmount = value;
	}

	function manuallyProcessFees() external onlyOwner{
		uint256 balance = balanceOf(address(this));
		_tokenTransfer(address(this), _msgSender(), balance, false, 0);
	}

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

	function getExtraSalesFee(address account) public view returns (uint256) {
		uint256 extraFees = 0;
		uint256 firstTransTime = firstTransactionTimestamp[account];
		uint256 blockTime = block.timestamp;
		if(blockTime < launchedAtTime + 5 minutes){
			extraFees = 15;
		}
		else if(blockTime < firstTransTime + 7 days){
			extraFees = extraBurnFee;
		}
		return extraFees;
	}

	receive() external payable {}
}

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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getExtraSalesFee","outputs":[{"internalType":"uint256","name":"","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":"manuallyProcessFees","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"payable","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":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"value","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setFeeProcessingThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBot","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":"accounts","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269152d02c7e14af6800000600a55600a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000042919062000d4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200006f919062000db3565b600b55600a54600c55600a54600d556032600a546200008f919062000dee565b600e556000601460016101000a81548160ff021916908315150217905550612710600a54620000bf919062000dee565b601555604051806080016040528060028152602001600381526020016002815260200160038152506017600082015181600001556020820151816001015560408201518160020155606082015181600301555050600a601b553480156200012557600080fd5b50620001466200013a620008c360201b60201c565b620008cb60201b60201c565b6000309050600b5460016000620001626200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bfa80969ce5330c938cfc0f54ac38384c9618449601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073143ce9c93e5f03e860ffeedef9d97f621104ad70601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000620002b56200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620004c26200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200071860016000620006d16200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620009b860201b60201c565b600260006200072c6200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620007806200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008620007e36200098f60201b60201c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620008536200098f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620008b4919062000e37565b60405180910390a35062000f7a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b5482111562000a02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f99062000edb565b60405180910390fd5b600062000a1462000a2c60201b60201c565b9050808362000a24919062000dee565b915050919050565b600080600062000a4162000a5a60201b60201c565b91509150808262000a53919062000dee565b9250505090565b6000806000600b5490506000600a54905060005b60088054905081101562000cd95782600160006008848154811062000a985762000a9762000efd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000b8a575081600260006008848154811062000b225762000b2162000efd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000ba357600b54600a549450945050505062000d0f565b600160006008838154811062000bbe5762000bbd62000efd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000c31919062000db3565b9250600260006008838154811062000c4e5762000c4d62000efd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548262000cc1919062000db3565b9150808062000cd09062000f2c565b91505062000a6e565b50600a54600b5462000cec919062000dee565b82101562000d0657600b54600a5493509350505062000d0f565b81819350935050505b9091565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d598262000d13565b915062000d668362000d13565b92508262000d795762000d7862000d1d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc08262000d13565b915062000dcd8362000d13565b92508282101562000de35762000de262000d84565b5b828203905092915050565b600062000dfb8262000d13565b915062000e088362000d13565b92508262000e1b5762000e1a62000d1d565b5b828204905092915050565b62000e318162000d13565b82525050565b600060208201905062000e4e600083018462000e26565b92915050565b600082825260208201905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600062000ec3602a8362000e54565b915062000ed08262000e65565b604082019050919050565b6000602082019050818103600083015262000ef68162000eb4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000f398262000d13565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000f6f5762000f6e62000d84565b5b600182019050919050565b615eea8062000f8a6000396000f3fe60806040526004361061024a5760003560e01c80636dd3d39f11610139578063aa4bde28116100b6578063d16336491161007a578063d1633649146108d2578063d3bc2e95146108ee578063d44e586e14610917578063d6c180bf14610942578063dd62ed3e1461096d578063f2fde38b146109aa57610251565b8063aa4bde2814610813578063b609995e1461083e578063b6f7f68114610867578063b733599814610890578063bfb693fe146108a757610251565b806395d89b41116100fd57806395d89b41146107175780639a7a23d6146107425780639af1d35a1461076b578063a457c2d714610799578063a9059cbb146107d657610251565b80636dd3d39f1461063257806370a082311461066f578063715018a6146106ac5780638da5cb5b146106c3578063906e9dd0146106ee57610251565b80632d838119116101c757806342966c681161018b57806342966c681461053d5780634f7ffae1146105665780634fbee193146105a357806355724b87146105e0578063637930dd1461060957610251565b80632d83811914610432578063313ce5671461046f578063395093511461049a5780633bbac579146104d75780634225d2bc1461051457610251565b8063131447441161020e578063131447441461034d57806318160ddd1461037857806323b872dd146103a357806327a14fc2146103e057806329b1c15c1461040957610251565b806306fdde0314610256578063095ea7b3146102815780630a8e30d9146102be5780630e832273146102e7578063111e03761461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109d3565b60405161027891906144da565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906145a4565b610a10565b6040516102b591906145ff565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190614762565b610a2e565b005b3480156102f357600080fd5b5061030e600480360381019061030991906147be565b610b5b565b60405161031b91906145ff565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906147be565b610b7b565b005b34801561035957600080fd5b50610362610e16565b60405161036f91906147fa565b60405180910390f35b34801561038457600080fd5b5061038d610e1c565b60405161039a91906147fa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c59190614815565b610e26565b6040516103d791906145ff565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190614868565b610f1e565b005b34801561041557600080fd5b50610430600480360381019061042b91906148d3565b610ff5565b005b34801561043e57600080fd5b5061045960048036038101906104549190614868565b611146565b60405161046691906147fa565b60405180910390f35b34801561047b57600080fd5b506104846111ad565b604051610491919061491c565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906145a4565b6111b6565b6040516104ce91906145ff565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f991906147be565b611262565b60405161050b91906145ff565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190614868565b611282565b005b34801561054957600080fd5b50610564600480360381019061055f9190614868565b61134c565b005b34801561057257600080fd5b5061058d600480360381019061058891906147be565b611434565b60405161059a91906147fa565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147be565b6114cc565b6040516105d791906145ff565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190614963565b6114ec565b005b34801561061557600080fd5b50610630600480360381019061062b9190614868565b611585565b005b34801561063e57600080fd5b50610659600480360381019061065491906147be565b61160b565b60405161066691906145ff565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906147be565b61162b565b6040516106a391906147fa565b60405180910390f35b3480156106b857600080fd5b506106c1611716565b005b3480156106cf57600080fd5b506106d861179e565b6040516106e5919061499f565b60405180910390f35b3480156106fa57600080fd5b50610715600480360381019061071091906148d3565b6117c7565b005b34801561072357600080fd5b5061072c611918565b60405161073991906144da565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149ba565b611955565b005b34801561077757600080fd5b50610780611b1e565b60405161079094939291906149fa565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906145a4565b611b3c565b6040516107cd91906145ff565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906145a4565b611c27565b60405161080a91906145ff565b60405180910390f35b34801561081f57600080fd5b50610828611c45565b60405161083591906147fa565b60405180910390f35b34801561084a57600080fd5b50610865600480360381019061086091906147be565b611c4b565b005b34801561087357600080fd5b5061088e60048036038101906108899190614a3f565b611f81565b005b34801561089c57600080fd5b506108a56120b3565b005b3480156108b357600080fd5b506108bc612154565b6040516108c991906145ff565b60405180910390f35b6108ec60048036038101906108e79190614868565b612167565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614a7f565b6126b3565b005b34801561092357600080fd5b5061092c6127c4565b60405161093991906147fa565b60405180910390f35b34801561094e57600080fd5b506109576127ca565b60405161096491906147fa565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614adb565b6127d0565b6040516109a191906147fa565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc91906147be565b612857565b005b60606040518060400160405280600f81526020017f4c65747320476f204272616e646f6e0000000000000000000000000000000000815250905090565b6000610a24610a1d61294f565b8484612957565b6001905092915050565b610a3661294f565b73ffffffffffffffffffffffffffffffffffffffff16610a5461179e565b73ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614b67565b60405180910390fd5b815181610ab79190614bb6565b610ac7610ac261294f565b61162b565b1015610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90614c5c565b60405180910390fd5b60005b8251811015610b5657610b43610b1f61294f565b848381518110610b3257610b31614c7c565b5b602002602001015184600080612b22565b8080610b4e90614cab565b915050610b0b565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b610b8361294f565b73ffffffffffffffffffffffffffffffffffffffff16610ba161179e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90614b67565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90614d40565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d5857610d14600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611146565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000600a54905090565b6000610e33848484612f56565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e7e61294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590614dd2565b60405180910390fd5b610f1285610f0a61294f565b858403612957565b60019150509392505050565b610f2661294f565b73ffffffffffffffffffffffffffffffffffffffff16610f4461179e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614b67565b60405180910390fd5b60c8600a54610fa99190614e21565b811015610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290614ec4565b60405180910390fd5b80600e8190555050565b610ffd61294f565b73ffffffffffffffffffffffffffffffffffffffff1661101b61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614f56565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b5482111561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490614fe8565b60405180910390fd5b60006111976136ad565b905080836111a59190614e21565b915050919050565b60006009905090565b60006112586111c361294f565b8484600460006111d161294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112539190615008565b612957565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b61128a61294f565b73ffffffffffffffffffffffffffffffffffffffff166112a861179e565b73ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614b67565b60405180910390fd5b600a811115611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906150aa565b60405180910390fd5b80601b8190555050565b61135461294f565b73ffffffffffffffffffffffffffffffffffffffff1661137261179e565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614b67565b60405180910390fd5b806113d96113d461294f565b61162b565b101561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114119061513c565b60405180910390fd5b61143161142561294f565b61dead83600080612b22565b50565b600080600090506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061012c6010546114949190615008565b8110156114a457600f92506114c1565b62093a80826114b39190615008565b8110156114c057601b5492505b5b829350505050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6114f461294f565b73ffffffffffffffffffffffffffffffffffffffff1661151261179e565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614b67565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61158d61294f565b73ffffffffffffffffffffffffffffffffffffffff166115ab61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614b67565b60405180910390fd5b8060158190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611711565b61170e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611146565b90505b919050565b61171e61294f565b73ffffffffffffffffffffffffffffffffffffffff1661173c61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990614b67565b60405180910390fd5b61179c60006136d1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117cf61294f565b73ffffffffffffffffffffffffffffffffffffffff166117ed61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614b67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb906151ce565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600481526020017f4c45545300000000000000000000000000000000000000000000000000000000815250905090565b61195d61294f565b73ffffffffffffffffffffffffffffffffffffffff1661197b61179e565b73ffffffffffffffffffffffffffffffffffffffff16146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890614b67565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90615260565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611b1a576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60178060000154908060010154908060020154908060030154905084565b60008060046000611b4b61294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff906152f2565b60405180910390fd5b611c1c611c1361294f565b85858403612957565b600191505092915050565b6000611c3b611c3461294f565b8484612f56565b6001905092915050565b600e5481565b611c5361294f565b73ffffffffffffffffffffffffffffffffffffffff16611c7161179e565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614b67565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061535e565b60405180910390fd5b60005b600880549050811015611f7d578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611d8e57611d8d614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6a5760086001600880549050611de9919061537e565b81548110611dfa57611df9614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611e3957611e38614c7c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611f3057611f2f6153b2565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f7d565b8080611f7590614cab565b915050611d56565b5050565b611f8961294f565b73ffffffffffffffffffffffffffffffffffffffff16611fa761179e565b73ffffffffffffffffffffffffffffffffffffffff1614611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614b67565b60405180910390fd5b610190600a5461200d9190614e21565b82101561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690615453565b60405180910390fd5b610190600a5461205f9190614e21565b8110156120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906154e5565b60405180910390fd5b81600c8190555080600d819055505050565b6120bb61294f565b73ffffffffffffffffffffffffffffffffffffffff166120d961179e565b73ffffffffffffffffffffffffffffffffffffffff161461212f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212690614b67565b60405180910390fd5b600061213a3061162b565b90506121513061214861294f565b83600080612b22565b50565b601460019054906101000a900460ff1681565b61216f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661218d61179e565b73ffffffffffffffffffffffffffffffffffffffff16146121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614b67565b60405180910390fd5b6000309050601660149054906101000a900460ff1615612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90615551565b60405180910390fd5b8161224961224461294f565b61162b565b101561228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906155e3565b60405180910390fd5b600034116122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490615675565b60405180910390fd5b6122e26122d861294f565b8284600080612b22565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561234c57600080fd5b505afa158015612360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238491906156aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539683601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561240857600080fd5b505afa15801561241c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244091906156aa565b6040518363ffffffff1660e01b815260040161245d9291906156d7565b602060405180830381600087803b15801561247757600080fd5b505af115801561248b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124af91906156aa565b90506001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125ae82601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193484866000806125fa61179e565b426040518863ffffffff1660e01b815260040161261c96959493929190615745565b6060604051808303818588803b15801561263557600080fd5b505af1158015612649573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061266e91906157bb565b5050506001601460016101000a81548160ff0219169083151502179055506001601660146101000a81548160ff02191690831515021790555042601081905550505050565b6126bb61294f565b73ffffffffffffffffffffffffffffffffffffffff166126d961179e565b73ffffffffffffffffffffffffffffffffffffffff161461272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614b67565b60405180910390fd5b60005b82518110156127bf57816009600085848151811061275357612752614c7c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127b790614cab565b915050612732565b505050565b600d5481565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61285f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661287d61179e565b73ffffffffffffffffffffffffffffffffffffffff16146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90615880565b60405180910390fd5b61294c816136d1565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90615912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e906159a4565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1591906147fa565b60405180910390a3505050565b6000612b2f848484613795565b9050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bda5783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd2919061537e565b925050819055505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c87578060800151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7f9190615008565b925050819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cda919061537e565b925050819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d349190615008565b925050819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dc85742600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8215612ee557612ddb81604001516137f1565b612ded81606001518260c0015161380d565b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612e4e91906147fa565b60405180910390a360008161010001511115612ee457612e778160e00151826101000151613916565b61dead73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612edb91906147fa565b60405180910390a35b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612f4691906147fa565b60405180910390a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbd90615a36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90615ac8565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ba90615b34565b60405180910390fd5b60008111613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd90615bc6565b60405180910390fd5b61310f8361162b565b811115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615c58565b60405180910390fd5b6000600e541180156131ad5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132035750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326157600e54816132158461162b565b61321f9190615008565b1115613260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325790615cea565b60405180910390fd5b5b6000600f541480156132bc5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c95743600f819055505b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561336f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905080156134d057601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d057600d546133d4565b600c545b821115613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d90615d7c565b60405180910390fd5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134715750600f544311155b156134cf576001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b60006134db3061162b565b9050600d548111156134ed57600d5490505b6000601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661369857601460019054906101000a900460ff1680156135695750601460009054906101000a900460ff16155b801561357757506015548210155b156135bc576001601460006101000a81548160ff0219169083151502179055506135a082613a1f565b6000601460006101000a81548160ff0219169083151502179055505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613697576000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061012c6010546136679190615008565b81101561367757600f9250613694565b62093a80826136869190615008565b81101561369357601b5492505b5b50505b5b6136a58686868685612b22565b505050505050565b60008060006136ba613bd3565b9150915080826136ca9190614e21565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61379d6143f5565b6137a8848484613e71565b90506137bd8185856137b86136ad565b613f5b565b856000018660200187604001886060018960e001858152508581525085815250858152508581525050505050509392505050565b80600b6000828254613803919061537e565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138619190615008565b92505081905550600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139115781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139099190615008565b925050819055505b505050565b816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139679190615008565b925050819055506006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1b57806002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a139190615008565b925050819055505b5050565b6001601460006101000a81548160ff0219169083151502179055506000601760020154601760010154613a529190615008565b9050600060176003015482613a679190615008565b90506000811415613a79575050613bb5565b6000818385613a889190614bb6565b613a929190614e21565b905060008185613aa2919061537e565b9050613aad82613ff3565b50613ab7816142b0565b600047905060008560176001015483613ad09190614bb6565b613ada9190614e21565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b44573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613bad573d6000803e3d6000fd5b505050505050505b6000601460006101000a81548160ff02191690831515021790555050565b6000806000600b5490506000600a54905060005b600880549050811015613e3b57826001600060088481548110613c0d57613c0c614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613cfb5750816002600060088481548110613c9357613c92614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d1257600b54600a5494509450505050613e6d565b6001600060088381548110613d2a57613d29614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d9b919061537e565b92506002600060088381548110613db557613db4614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613e26919061537e565b91508080613e3390614cab565b915050613be7565b50600a54600b54613e4c9190614e21565b821015613e6457600b54600a54935093505050613e6d565b81819350935050505b9091565b613e796143f5565b82613e8d5783816080018181525050613f54565b606460176000015485613ea09190614bb6565b613eaa9190614e21565b8160a001818152505060648285613ec19190614bb6565b613ecb9190614e21565b816101000181815250506064601760020154601760030154601760010154613ef39190615008565b613efd9190615008565b85613f089190614bb6565b613f129190614e21565b8160c00181815250508061010001518160c001518260a0015186613f36919061537e565b613f40919061537e565b613f4a919061537e565b8160800181815250505b9392505050565b60008060008060008588613f6f9190614bb6565b945086613f8c578485600080600094509450945094509450613fe8565b858960a00151613f9c9190614bb6565b9250858960c00151613fae9190614bb6565b915085896101000151613fc19190614bb6565b905080828487613fd1919061537e565b613fdb919061537e565b613fe5919061537e565b93505b945094509450945094565b6000803090506000600267ffffffffffffffff8111156140165761401561461f565b5b6040519080825280602002602001820160405280156140445781602001602082028036833780820191505090505b509050818160008151811061405c5761405b614c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140fe57600080fd5b505afa158015614112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413691906156aa565b8160018151811061414a57614149614c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d182601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b8152600401614251959493929190615e5a565b600060405180830381600087803b15801561426b57600080fd5b505af115801561427f573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff16316142a6919061537e565b9350505050919050565b600030905060006002836142c49190614e21565b9050600081846142d4919061537e565b905060006142e183613ff3565b905061433084601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b815260040161439996959493929190615745565b6060604051808303818588803b1580156143b257600080fd5b505af11580156143c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143eb91906157bb565b5050505050505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561447b578082015181840152602081019050614460565b8381111561448a576000848401525b50505050565b6000601f19601f8301169050919050565b60006144ac82614441565b6144b6818561444c565b93506144c681856020860161445d565b6144cf81614490565b840191505092915050565b600060208201905081810360008301526144f481846144a1565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061453b82614510565b9050919050565b61454b81614530565b811461455657600080fd5b50565b60008135905061456881614542565b92915050565b6000819050919050565b6145818161456e565b811461458c57600080fd5b50565b60008135905061459e81614578565b92915050565b600080604083850312156145bb576145ba614506565b5b60006145c985828601614559565b92505060206145da8582860161458f565b9150509250929050565b60008115159050919050565b6145f9816145e4565b82525050565b600060208201905061461460008301846145f0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465782614490565b810181811067ffffffffffffffff821117156146765761467561461f565b5b80604052505050565b60006146896144fc565b9050614695828261464e565b919050565b600067ffffffffffffffff8211156146b5576146b461461f565b5b602082029050602081019050919050565b600080fd5b60006146de6146d98461469a565b61467f565b90508083825260208201905060208402830185811115614701576147006146c6565b5b835b8181101561472a57806147168882614559565b845260208401935050602081019050614703565b5050509392505050565b600082601f8301126147495761474861461a565b5b81356147598482602086016146cb565b91505092915050565b6000806040838503121561477957614778614506565b5b600083013567ffffffffffffffff8111156147975761479661450b565b5b6147a385828601614734565b92505060206147b48582860161458f565b9150509250929050565b6000602082840312156147d4576147d3614506565b5b60006147e284828501614559565b91505092915050565b6147f48161456e565b82525050565b600060208201905061480f60008301846147eb565b92915050565b60008060006060848603121561482e5761482d614506565b5b600061483c86828701614559565b935050602061484d86828701614559565b925050604061485e8682870161458f565b9150509250925092565b60006020828403121561487e5761487d614506565b5b600061488c8482850161458f565b91505092915050565b60006148a082614510565b9050919050565b6148b081614895565b81146148bb57600080fd5b50565b6000813590506148cd816148a7565b92915050565b6000602082840312156148e9576148e8614506565b5b60006148f7848285016148be565b91505092915050565b600060ff82169050919050565b61491681614900565b82525050565b6000602082019050614931600083018461490d565b92915050565b614940816145e4565b811461494b57600080fd5b50565b60008135905061495d81614937565b92915050565b60006020828403121561497957614978614506565b5b60006149878482850161494e565b91505092915050565b61499981614530565b82525050565b60006020820190506149b46000830184614990565b92915050565b600080604083850312156149d1576149d0614506565b5b60006149df85828601614559565b92505060206149f08582860161494e565b9150509250929050565b6000608082019050614a0f60008301876147eb565b614a1c60208301866147eb565b614a2960408301856147eb565b614a3660608301846147eb565b95945050505050565b60008060408385031215614a5657614a55614506565b5b6000614a648582860161458f565b9250506020614a758582860161458f565b9150509250929050565b60008060408385031215614a9657614a95614506565b5b600083013567ffffffffffffffff811115614ab457614ab361450b565b5b614ac085828601614734565b9250506020614ad18582860161494e565b9150509250929050565b60008060408385031215614af257614af1614506565b5b6000614b0085828601614559565b9250506020614b1185828601614559565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b5160208361444c565b9150614b5c82614b1b565b602082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc18261456e565b9150614bcc8361456e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0557614c04614b87565b5b828202905092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b6000614c46601a8361444c565b9150614c5182614c10565b602082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cb68261456e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ce957614ce8614b87565b5b600182019050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614d2a601b8361444c565b9150614d3582614cf4565b602082019050919050565b60006020820190508181036000830152614d5981614d1d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614dbc60288361444c565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2c8261456e565b9150614e378361456e565b925082614e4757614e46614df2565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000614eae60348361444c565b9150614eb982614e52565b604082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f446576656c6f706d656e74206164647265737320697320616c7265616479207360008201527f657420746f20746869732076616c756500000000000000000000000000000000602082015250565b6000614f4060308361444c565b9150614f4b82614ee4565b604082019050919050565b60006020820190508181036000830152614f6f81614f33565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614fd2602a8361444c565b9150614fdd82614f76565b604082019050919050565b6000602082019050818103600083015261500181614fc5565b9050919050565b60006150138261456e565b915061501e8361456e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561505357615052614b87565b5b828201905092915050565b7f43616e6e6f7420736574206275726e2066656520746f2061626f766520313025600082015250565b600061509460208361444c565b915061509f8261505e565b602082019050919050565b600060208201905081810360008301526150c381615087565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206260008201527f75726e0000000000000000000000000000000000000000000000000000000000602082015250565b600061512660238361444c565b9150615131826150ca565b604082019050919050565b6000602082019050818103600083015261515581615119565b9050919050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b60006151b8602e8361444c565b91506151c38261515c565b604082019050919050565b600060208201905081810360008301526151e7816151ab565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061524a60388361444c565b9150615255826151ee565b604082019050919050565b600060208201905081810360008301526152798161523d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006152dc60258361444c565b91506152e782615280565b604082019050919050565b6000602082019050818103600083015261530b816152cf565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b600061534860178361444c565b915061535382615312565b602082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b60006153898261456e565b91506153948361456e565b9250828210156153a7576153a6614b87565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b600061543d60328361444c565b9150615448826153e1565b604082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b60006154cf60338361444c565b91506154da82615473565b604082019050919050565b600060208201905081810360008301526154fe816154c2565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061553b60178361444c565b915061554682615505565b602082019050919050565b6000602082019050818103600083015261556a8161552e565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206960008201527f6e697469616c206c697175696469747900000000000000000000000000000000602082015250565b60006155cd60308361444c565b91506155d882615571565b604082019050919050565b600060208201905081810360008301526155fc816155c0565b9050919050565b7f496e73756666696369656e742045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b600061565f60268361444c565b915061566a82615603565b604082019050919050565b6000602082019050818103600083015261568e81615652565b9050919050565b6000815190506156a481614542565b92915050565b6000602082840312156156c0576156bf614506565b5b60006156ce84828501615695565b91505092915050565b60006040820190506156ec6000830185614990565b6156f96020830184614990565b9392505050565b6000819050919050565b6000819050919050565b600061572f61572a61572584615700565b61570a565b61456e565b9050919050565b61573f81615714565b82525050565b600060c08201905061575a6000830189614990565b61576760208301886147eb565b6157746040830187615736565b6157816060830186615736565b61578e6080830185614990565b61579b60a08301846147eb565b979650505050505050565b6000815190506157b581614578565b92915050565b6000806000606084860312156157d4576157d3614506565b5b60006157e2868287016157a6565b93505060206157f3868287016157a6565b9250506040615804868287016157a6565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061586a60268361444c565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158fc60248361444c565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061598e60228361444c565b915061599982615932565b604082019050919050565b600060208201905081810360008301526159bd81615981565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a2060258361444c565b9150615a2b826159c4565b604082019050919050565b60006020820190508181036000830152615a4f81615a13565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615ab260238361444c565b9150615abd82615a56565b604082019050919050565b60006020820190508181036000830152615ae181615aa5565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000615b1e60208361444c565b9150615b2982615ae8565b602082019050919050565b60006020820190508181036000830152615b4d81615b11565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615bb060298361444c565b9150615bbb82615b54565b604082019050919050565b60006020820190508181036000830152615bdf81615ba3565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000615c4260318361444c565b9150615c4d82615be6565b604082019050919050565b60006020820190508181036000830152615c7181615c35565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b6000615cd4603a8361444c565b9150615cdf82615c78565b604082019050919050565b60006020820190508181036000830152615d0381615cc7565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b6000615d66602a8361444c565b9150615d7182615d0a565b604082019050919050565b60006020820190508181036000830152615d9581615d59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615dd181614530565b82525050565b6000615de38383615dc8565b60208301905092915050565b6000602082019050919050565b6000615e0782615d9c565b615e118185615da7565b9350615e1c83615db8565b8060005b83811015615e4d578151615e348882615dd7565b9750615e3f83615def565b925050600181019050615e20565b5085935050505092915050565b600060a082019050615e6f60008301886147eb565b615e7c6020830187615736565b8181036040830152615e8e8186615dfc565b9050615e9d6060830185614990565b615eaa60808301846147eb565b969550505050505056fea2646970667358221220f609cf76acd6063e8aaad535f9de451439839a83d3b5efaefed5d9b4c3aec70864736f6c63430008090033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636dd3d39f11610139578063aa4bde28116100b6578063d16336491161007a578063d1633649146108d2578063d3bc2e95146108ee578063d44e586e14610917578063d6c180bf14610942578063dd62ed3e1461096d578063f2fde38b146109aa57610251565b8063aa4bde2814610813578063b609995e1461083e578063b6f7f68114610867578063b733599814610890578063bfb693fe146108a757610251565b806395d89b41116100fd57806395d89b41146107175780639a7a23d6146107425780639af1d35a1461076b578063a457c2d714610799578063a9059cbb146107d657610251565b80636dd3d39f1461063257806370a082311461066f578063715018a6146106ac5780638da5cb5b146106c3578063906e9dd0146106ee57610251565b80632d838119116101c757806342966c681161018b57806342966c681461053d5780634f7ffae1146105665780634fbee193146105a357806355724b87146105e0578063637930dd1461060957610251565b80632d83811914610432578063313ce5671461046f578063395093511461049a5780633bbac579146104d75780634225d2bc1461051457610251565b8063131447441161020e578063131447441461034d57806318160ddd1461037857806323b872dd146103a357806327a14fc2146103e057806329b1c15c1461040957610251565b806306fdde0314610256578063095ea7b3146102815780630a8e30d9146102be5780630e832273146102e7578063111e03761461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109d3565b60405161027891906144da565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906145a4565b610a10565b6040516102b591906145ff565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190614762565b610a2e565b005b3480156102f357600080fd5b5061030e600480360381019061030991906147be565b610b5b565b60405161031b91906145ff565b60405180910390f35b34801561033057600080fd5b5061034b600480360381019061034691906147be565b610b7b565b005b34801561035957600080fd5b50610362610e16565b60405161036f91906147fa565b60405180910390f35b34801561038457600080fd5b5061038d610e1c565b60405161039a91906147fa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c59190614815565b610e26565b6040516103d791906145ff565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190614868565b610f1e565b005b34801561041557600080fd5b50610430600480360381019061042b91906148d3565b610ff5565b005b34801561043e57600080fd5b5061045960048036038101906104549190614868565b611146565b60405161046691906147fa565b60405180910390f35b34801561047b57600080fd5b506104846111ad565b604051610491919061491c565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906145a4565b6111b6565b6040516104ce91906145ff565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f991906147be565b611262565b60405161050b91906145ff565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190614868565b611282565b005b34801561054957600080fd5b50610564600480360381019061055f9190614868565b61134c565b005b34801561057257600080fd5b5061058d600480360381019061058891906147be565b611434565b60405161059a91906147fa565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147be565b6114cc565b6040516105d791906145ff565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190614963565b6114ec565b005b34801561061557600080fd5b50610630600480360381019061062b9190614868565b611585565b005b34801561063e57600080fd5b50610659600480360381019061065491906147be565b61160b565b60405161066691906145ff565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906147be565b61162b565b6040516106a391906147fa565b60405180910390f35b3480156106b857600080fd5b506106c1611716565b005b3480156106cf57600080fd5b506106d861179e565b6040516106e5919061499f565b60405180910390f35b3480156106fa57600080fd5b50610715600480360381019061071091906148d3565b6117c7565b005b34801561072357600080fd5b5061072c611918565b60405161073991906144da565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149ba565b611955565b005b34801561077757600080fd5b50610780611b1e565b60405161079094939291906149fa565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906145a4565b611b3c565b6040516107cd91906145ff565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906145a4565b611c27565b60405161080a91906145ff565b60405180910390f35b34801561081f57600080fd5b50610828611c45565b60405161083591906147fa565b60405180910390f35b34801561084a57600080fd5b50610865600480360381019061086091906147be565b611c4b565b005b34801561087357600080fd5b5061088e60048036038101906108899190614a3f565b611f81565b005b34801561089c57600080fd5b506108a56120b3565b005b3480156108b357600080fd5b506108bc612154565b6040516108c991906145ff565b60405180910390f35b6108ec60048036038101906108e79190614868565b612167565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614a7f565b6126b3565b005b34801561092357600080fd5b5061092c6127c4565b60405161093991906147fa565b60405180910390f35b34801561094e57600080fd5b506109576127ca565b60405161096491906147fa565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614adb565b6127d0565b6040516109a191906147fa565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc91906147be565b612857565b005b60606040518060400160405280600f81526020017f4c65747320476f204272616e646f6e0000000000000000000000000000000000815250905090565b6000610a24610a1d61294f565b8484612957565b6001905092915050565b610a3661294f565b73ffffffffffffffffffffffffffffffffffffffff16610a5461179e565b73ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614b67565b60405180910390fd5b815181610ab79190614bb6565b610ac7610ac261294f565b61162b565b1015610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90614c5c565b60405180910390fd5b60005b8251811015610b5657610b43610b1f61294f565b848381518110610b3257610b31614c7c565b5b602002602001015184600080612b22565b8080610b4e90614cab565b915050610b0b565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b610b8361294f565b73ffffffffffffffffffffffffffffffffffffffff16610ba161179e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90614b67565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90614d40565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d5857610d14600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611146565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000600a54905090565b6000610e33848484612f56565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e7e61294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590614dd2565b60405180910390fd5b610f1285610f0a61294f565b858403612957565b60019150509392505050565b610f2661294f565b73ffffffffffffffffffffffffffffffffffffffff16610f4461179e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190614b67565b60405180910390fd5b60c8600a54610fa99190614e21565b811015610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290614ec4565b60405180910390fd5b80600e8190555050565b610ffd61294f565b73ffffffffffffffffffffffffffffffffffffffff1661101b61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890614b67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990614f56565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b5482111561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490614fe8565b60405180910390fd5b60006111976136ad565b905080836111a59190614e21565b915050919050565b60006009905090565b60006112586111c361294f565b8484600460006111d161294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112539190615008565b612957565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b61128a61294f565b73ffffffffffffffffffffffffffffffffffffffff166112a861179e565b73ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614b67565b60405180910390fd5b600a811115611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906150aa565b60405180910390fd5b80601b8190555050565b61135461294f565b73ffffffffffffffffffffffffffffffffffffffff1661137261179e565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614b67565b60405180910390fd5b806113d96113d461294f565b61162b565b101561141a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114119061513c565b60405180910390fd5b61143161142561294f565b61dead83600080612b22565b50565b600080600090506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061012c6010546114949190615008565b8110156114a457600f92506114c1565b62093a80826114b39190615008565b8110156114c057601b5492505b5b829350505050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6114f461294f565b73ffffffffffffffffffffffffffffffffffffffff1661151261179e565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614b67565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61158d61294f565b73ffffffffffffffffffffffffffffffffffffffff166115ab61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f890614b67565b60405180910390fd5b8060158190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c657600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611711565b61170e600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611146565b90505b919050565b61171e61294f565b73ffffffffffffffffffffffffffffffffffffffff1661173c61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990614b67565b60405180910390fd5b61179c60006136d1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117cf61294f565b73ffffffffffffffffffffffffffffffffffffffff166117ed61179e565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614b67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb906151ce565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600481526020017f4c45545300000000000000000000000000000000000000000000000000000000815250905090565b61195d61294f565b73ffffffffffffffffffffffffffffffffffffffff1661197b61179e565b73ffffffffffffffffffffffffffffffffffffffff16146119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890614b67565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90615260565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611b1a576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60178060000154908060010154908060020154908060030154905084565b60008060046000611b4b61294f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff906152f2565b60405180910390fd5b611c1c611c1361294f565b85858403612957565b600191505092915050565b6000611c3b611c3461294f565b8484612f56565b6001905092915050565b600e5481565b611c5361294f565b73ffffffffffffffffffffffffffffffffffffffff16611c7161179e565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614b67565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061535e565b60405180910390fd5b60005b600880549050811015611f7d578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611d8e57611d8d614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6a5760086001600880549050611de9919061537e565b81548110611dfa57611df9614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611e3957611e38614c7c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611f3057611f2f6153b2565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f7d565b8080611f7590614cab565b915050611d56565b5050565b611f8961294f565b73ffffffffffffffffffffffffffffffffffffffff16611fa761179e565b73ffffffffffffffffffffffffffffffffffffffff1614611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614b67565b60405180910390fd5b610190600a5461200d9190614e21565b82101561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690615453565b60405180910390fd5b610190600a5461205f9190614e21565b8110156120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906154e5565b60405180910390fd5b81600c8190555080600d819055505050565b6120bb61294f565b73ffffffffffffffffffffffffffffffffffffffff166120d961179e565b73ffffffffffffffffffffffffffffffffffffffff161461212f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212690614b67565b60405180910390fd5b600061213a3061162b565b90506121513061214861294f565b83600080612b22565b50565b601460019054906101000a900460ff1681565b61216f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661218d61179e565b73ffffffffffffffffffffffffffffffffffffffff16146121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da90614b67565b60405180910390fd5b6000309050601660149054906101000a900460ff1615612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90615551565b60405180910390fd5b8161224961224461294f565b61162b565b101561228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906155e3565b60405180910390fd5b600034116122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490615675565b60405180910390fd5b6122e26122d861294f565b8284600080612b22565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561234c57600080fd5b505afa158015612360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238491906156aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539683601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561240857600080fd5b505afa15801561241c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244091906156aa565b6040518363ffffffff1660e01b815260040161245d9291906156d7565b602060405180830381600087803b15801561247757600080fd5b505af115801561248b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124af91906156aa565b90506001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125ae82601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193484866000806125fa61179e565b426040518863ffffffff1660e01b815260040161261c96959493929190615745565b6060604051808303818588803b15801561263557600080fd5b505af1158015612649573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061266e91906157bb565b5050506001601460016101000a81548160ff0219169083151502179055506001601660146101000a81548160ff02191690831515021790555042601081905550505050565b6126bb61294f565b73ffffffffffffffffffffffffffffffffffffffff166126d961179e565b73ffffffffffffffffffffffffffffffffffffffff161461272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614b67565b60405180910390fd5b60005b82518110156127bf57816009600085848151811061275357612752614c7c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127b790614cab565b915050612732565b505050565b600d5481565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61285f61294f565b73ffffffffffffffffffffffffffffffffffffffff1661287d61179e565b73ffffffffffffffffffffffffffffffffffffffff16146128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293a90615880565b60405180910390fd5b61294c816136d1565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90615912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e906159a4565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1591906147fa565b60405180910390a3505050565b6000612b2f848484613795565b9050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bda5783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd2919061537e565b925050819055505b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c87578060800151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c7f9190615008565b925050819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cda919061537e565b925050819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d349190615008565b925050819055506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dc85742600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8215612ee557612ddb81604001516137f1565b612ded81606001518260c0015161380d565b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612e4e91906147fa565b60405180910390a360008161010001511115612ee457612e778160e00151826101000151613916565b61dead73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612edb91906147fa565b60405180910390a35b5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051612f4691906147fa565b60405180910390a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbd90615a36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90615ac8565b60405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156130c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ba90615b34565b60405180910390fd5b60008111613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd90615bc6565b60405180910390fd5b61310f8361162b565b811115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615c58565b60405180910390fd5b6000600e541180156131ad5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132035750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326157600e54816132158461162b565b61321f9190615008565b1115613260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325790615cea565b60405180910390fd5b5b6000600f541480156132bc5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c95743600f819055505b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561336f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905080156134d057601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d057600d546133d4565b600c545b821115613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d90615d7c565b60405180910390fd5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134715750600f544311155b156134cf576001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b60006134db3061162b565b9050600d548111156134ed57600d5490505b6000601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661369857601460019054906101000a900460ff1680156135695750601460009054906101000a900460ff16155b801561357757506015548210155b156135bc576001601460006101000a81548160ff0219169083151502179055506135a082613a1f565b6000601460006101000a81548160ff0219169083151502179055505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613697576000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600042905061012c6010546136679190615008565b81101561367757600f9250613694565b62093a80826136869190615008565b81101561369357601b5492505b5b50505b5b6136a58686868685612b22565b505050505050565b60008060006136ba613bd3565b9150915080826136ca9190614e21565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61379d6143f5565b6137a8848484613e71565b90506137bd8185856137b86136ad565b613f5b565b856000018660200187604001886060018960e001858152508581525085815250858152508581525050505050509392505050565b80600b6000828254613803919061537e565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138619190615008565b92505081905550600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139115781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139099190615008565b925050819055505b505050565b816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139679190615008565b925050819055506006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1b57806002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a139190615008565b925050819055505b5050565b6001601460006101000a81548160ff0219169083151502179055506000601760020154601760010154613a529190615008565b9050600060176003015482613a679190615008565b90506000811415613a79575050613bb5565b6000818385613a889190614bb6565b613a929190614e21565b905060008185613aa2919061537e565b9050613aad82613ff3565b50613ab7816142b0565b600047905060008560176001015483613ad09190614bb6565b613ada9190614e21565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b44573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613bad573d6000803e3d6000fd5b505050505050505b6000601460006101000a81548160ff02191690831515021790555050565b6000806000600b5490506000600a54905060005b600880549050811015613e3b57826001600060088481548110613c0d57613c0c614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613cfb5750816002600060088481548110613c9357613c92614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d1257600b54600a5494509450505050613e6d565b6001600060088381548110613d2a57613d29614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d9b919061537e565b92506002600060088381548110613db557613db4614c7c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613e26919061537e565b91508080613e3390614cab565b915050613be7565b50600a54600b54613e4c9190614e21565b821015613e6457600b54600a54935093505050613e6d565b81819350935050505b9091565b613e796143f5565b82613e8d5783816080018181525050613f54565b606460176000015485613ea09190614bb6565b613eaa9190614e21565b8160a001818152505060648285613ec19190614bb6565b613ecb9190614e21565b816101000181815250506064601760020154601760030154601760010154613ef39190615008565b613efd9190615008565b85613f089190614bb6565b613f129190614e21565b8160c00181815250508061010001518160c001518260a0015186613f36919061537e565b613f40919061537e565b613f4a919061537e565b8160800181815250505b9392505050565b60008060008060008588613f6f9190614bb6565b945086613f8c578485600080600094509450945094509450613fe8565b858960a00151613f9c9190614bb6565b9250858960c00151613fae9190614bb6565b915085896101000151613fc19190614bb6565b905080828487613fd1919061537e565b613fdb919061537e565b613fe5919061537e565b93505b945094509450945094565b6000803090506000600267ffffffffffffffff8111156140165761401561461f565b5b6040519080825280602002602001820160405280156140445781602001602082028036833780820191505090505b509050818160008151811061405c5761405b614c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156140fe57600080fd5b505afa158015614112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413691906156aa565b8160018151811061414a57614149614c7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d182601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b8152600401614251959493929190615e5a565b600060405180830381600087803b15801561426b57600080fd5b505af115801561427f573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff16316142a6919061537e565b9350505050919050565b600030905060006002836142c49190614e21565b9050600081846142d4919061537e565b905060006142e183613ff3565b905061433084601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612957565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b815260040161439996959493929190615745565b6060604051808303818588803b1580156143b257600080fd5b505af11580156143c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143eb91906157bb565b5050505050505050565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561447b578082015181840152602081019050614460565b8381111561448a576000848401525b50505050565b6000601f19601f8301169050919050565b60006144ac82614441565b6144b6818561444c565b93506144c681856020860161445d565b6144cf81614490565b840191505092915050565b600060208201905081810360008301526144f481846144a1565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061453b82614510565b9050919050565b61454b81614530565b811461455657600080fd5b50565b60008135905061456881614542565b92915050565b6000819050919050565b6145818161456e565b811461458c57600080fd5b50565b60008135905061459e81614578565b92915050565b600080604083850312156145bb576145ba614506565b5b60006145c985828601614559565b92505060206145da8582860161458f565b9150509250929050565b60008115159050919050565b6145f9816145e4565b82525050565b600060208201905061461460008301846145f0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465782614490565b810181811067ffffffffffffffff821117156146765761467561461f565b5b80604052505050565b60006146896144fc565b9050614695828261464e565b919050565b600067ffffffffffffffff8211156146b5576146b461461f565b5b602082029050602081019050919050565b600080fd5b60006146de6146d98461469a565b61467f565b90508083825260208201905060208402830185811115614701576147006146c6565b5b835b8181101561472a57806147168882614559565b845260208401935050602081019050614703565b5050509392505050565b600082601f8301126147495761474861461a565b5b81356147598482602086016146cb565b91505092915050565b6000806040838503121561477957614778614506565b5b600083013567ffffffffffffffff8111156147975761479661450b565b5b6147a385828601614734565b92505060206147b48582860161458f565b9150509250929050565b6000602082840312156147d4576147d3614506565b5b60006147e284828501614559565b91505092915050565b6147f48161456e565b82525050565b600060208201905061480f60008301846147eb565b92915050565b60008060006060848603121561482e5761482d614506565b5b600061483c86828701614559565b935050602061484d86828701614559565b925050604061485e8682870161458f565b9150509250925092565b60006020828403121561487e5761487d614506565b5b600061488c8482850161458f565b91505092915050565b60006148a082614510565b9050919050565b6148b081614895565b81146148bb57600080fd5b50565b6000813590506148cd816148a7565b92915050565b6000602082840312156148e9576148e8614506565b5b60006148f7848285016148be565b91505092915050565b600060ff82169050919050565b61491681614900565b82525050565b6000602082019050614931600083018461490d565b92915050565b614940816145e4565b811461494b57600080fd5b50565b60008135905061495d81614937565b92915050565b60006020828403121561497957614978614506565b5b60006149878482850161494e565b91505092915050565b61499981614530565b82525050565b60006020820190506149b46000830184614990565b92915050565b600080604083850312156149d1576149d0614506565b5b60006149df85828601614559565b92505060206149f08582860161494e565b9150509250929050565b6000608082019050614a0f60008301876147eb565b614a1c60208301866147eb565b614a2960408301856147eb565b614a3660608301846147eb565b95945050505050565b60008060408385031215614a5657614a55614506565b5b6000614a648582860161458f565b9250506020614a758582860161458f565b9150509250929050565b60008060408385031215614a9657614a95614506565b5b600083013567ffffffffffffffff811115614ab457614ab361450b565b5b614ac085828601614734565b9250506020614ad18582860161494e565b9150509250929050565b60008060408385031215614af257614af1614506565b5b6000614b0085828601614559565b9250506020614b1185828601614559565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b5160208361444c565b9150614b5c82614b1b565b602082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc18261456e565b9150614bcc8361456e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0557614c04614b87565b5b828202905092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b6000614c46601a8361444c565b9150614c5182614c10565b602082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cb68261456e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ce957614ce8614b87565b5b600182019050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614d2a601b8361444c565b9150614d3582614cf4565b602082019050919050565b60006020820190508181036000830152614d5981614d1d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614dbc60288361444c565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2c8261456e565b9150614e378361456e565b925082614e4757614e46614df2565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000614eae60348361444c565b9150614eb982614e52565b604082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f446576656c6f706d656e74206164647265737320697320616c7265616479207360008201527f657420746f20746869732076616c756500000000000000000000000000000000602082015250565b6000614f4060308361444c565b9150614f4b82614ee4565b604082019050919050565b60006020820190508181036000830152614f6f81614f33565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614fd2602a8361444c565b9150614fdd82614f76565b604082019050919050565b6000602082019050818103600083015261500181614fc5565b9050919050565b60006150138261456e565b915061501e8361456e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561505357615052614b87565b5b828201905092915050565b7f43616e6e6f7420736574206275726e2066656520746f2061626f766520313025600082015250565b600061509460208361444c565b915061509f8261505e565b602082019050919050565b600060208201905081810360008301526150c381615087565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206260008201527f75726e0000000000000000000000000000000000000000000000000000000000602082015250565b600061512660238361444c565b9150615131826150ca565b604082019050919050565b6000602082019050818103600083015261515581615119565b9050919050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b60006151b8602e8361444c565b91506151c38261515c565b604082019050919050565b600060208201905081810360008301526151e7816151ab565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061524a60388361444c565b9150615255826151ee565b604082019050919050565b600060208201905081810360008301526152798161523d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006152dc60258361444c565b91506152e782615280565b604082019050919050565b6000602082019050818103600083015261530b816152cf565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b600061534860178361444c565b915061535382615312565b602082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b60006153898261456e565b91506153948361456e565b9250828210156153a7576153a6614b87565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b600061543d60328361444c565b9150615448826153e1565b604082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b60006154cf60338361444c565b91506154da82615473565b604082019050919050565b600060208201905081810360008301526154fe816154c2565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061553b60178361444c565b915061554682615505565b602082019050919050565b6000602082019050818103600083015261556a8161552e565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206960008201527f6e697469616c206c697175696469747900000000000000000000000000000000602082015250565b60006155cd60308361444c565b91506155d882615571565b604082019050919050565b600060208201905081810360008301526155fc816155c0565b9050919050565b7f496e73756666696369656e742045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b600061565f60268361444c565b915061566a82615603565b604082019050919050565b6000602082019050818103600083015261568e81615652565b9050919050565b6000815190506156a481614542565b92915050565b6000602082840312156156c0576156bf614506565b5b60006156ce84828501615695565b91505092915050565b60006040820190506156ec6000830185614990565b6156f96020830184614990565b9392505050565b6000819050919050565b6000819050919050565b600061572f61572a61572584615700565b61570a565b61456e565b9050919050565b61573f81615714565b82525050565b600060c08201905061575a6000830189614990565b61576760208301886147eb565b6157746040830187615736565b6157816060830186615736565b61578e6080830185614990565b61579b60a08301846147eb565b979650505050505050565b6000815190506157b581614578565b92915050565b6000806000606084860312156157d4576157d3614506565b5b60006157e2868287016157a6565b93505060206157f3868287016157a6565b9250506040615804868287016157a6565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061586a60268361444c565b91506158758261580e565b604082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158fc60248361444c565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061598e60228361444c565b915061599982615932565b604082019050919050565b600060208201905081810360008301526159bd81615981565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615a2060258361444c565b9150615a2b826159c4565b604082019050919050565b60006020820190508181036000830152615a4f81615a13565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615ab260238361444c565b9150615abd82615a56565b604082019050919050565b60006020820190508181036000830152615ae181615aa5565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000615b1e60208361444c565b9150615b2982615ae8565b602082019050919050565b60006020820190508181036000830152615b4d81615b11565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615bb060298361444c565b9150615bbb82615b54565b604082019050919050565b60006020820190508181036000830152615bdf81615ba3565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000615c4260318361444c565b9150615c4d82615be6565b604082019050919050565b60006020820190508181036000830152615c7181615c35565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b6000615cd4603a8361444c565b9150615cdf82615c78565b604082019050919050565b60006020820190508181036000830152615d0381615cc7565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b6000615d66602a8361444c565b9150615d7182615d0a565b604082019050919050565b60006020820190508181036000830152615d9581615d59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615dd181614530565b82525050565b6000615de38383615dc8565b60208301905092915050565b6000602082019050919050565b6000615e0782615d9c565b615e118185615da7565b9350615e1c83615db8565b8060005b83811015615e4d578151615e348882615dd7565b9750615e3f83615def565b925050600181019050615e20565b5085935050505092915050565b600060a082019050615e6f60008301886147eb565b615e7c6020830187615736565b8181036040830152615e8e8186615dfc565b9050615e9d6060830185614990565b615eaa60808301846147eb565b969550505050505056fea2646970667358221220f609cf76acd6063e8aaad535f9de451439839a83d3b5efaefed5d9b4c3aec70864736f6c63430008090033

Deployed Bytecode Sourcemap

17916:18049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21129:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21948:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34049:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18662:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23321:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19378:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21367:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22099:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34700:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33669:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23088:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21289:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22507:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18802:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33089:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31615:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35543:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18608:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33246:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33355:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18719:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21457:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17287:94;;;;;;;;;;;;;:::i;:::-;;16636:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33469:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21207:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32774:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19609:113;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;22711:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21653:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19072:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23639:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34358:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34893:168;;;;;;;;;;;;;:::i;:::-;;19332:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31825:944;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33876:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19020:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18969:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21810:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17536:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21129:73;21166:13;21193:4;;;;;;;;;;;;;;;;;21186:11;;21129:73;:::o;21948:146::-;22023:4;22034:39;22043:12;:10;:12::i;:::-;22057:7;22066:6;22034:8;:39::i;:::-;22085:4;22078:11;;21948:146;;;;:::o;34049:304::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34182:8:::1;:15;34173:6;:24;;;;:::i;:::-;34146:23;34156:12;:10;:12::i;:::-;34146:9;:23::i;:::-;:51;;34138:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34238:9;34233:116;34257:8;:15;34253:1;:19;34233:116;;;34284:59;34299:12;:10;:12::i;:::-;34313:8;34322:1;34313:11;;;;;;;;:::i;:::-;;;;;;;;34326:6;34334:5;34341:1:::0;34284:14:::1;:59::i;:::-;34274:3;;;;;:::i;:::-;;;;34233:116;;;;34049:304:::0;;:::o;18662:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;23321:313::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23399:21:::1;:30;23421:7;23399:30;;;;;;;;;;;;;;;;;;;;;;;;;23398:31;23390:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23490:1;23472:6;:15;23479:7;23472:15;;;;;;;;;;;;;;;;:19;23468:91;;;23517:36;23537:6;:15;23544:7;23537:15;;;;;;;;;;;;;;;;23517:19;:36::i;:::-;23499:6;:15;23506:7;23499:15;;;;;;;;;;;;;;;:54;;;;23468:91;23598:4;23565:21;:30;23587:7;23565:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23607:8;23621:7;23607:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23321:313:::0;:::o;19378:54::-;;;;:::o;21367:85::-;21420:7;21441:6;;21434:13;;21367:85;:::o;22099:403::-;22197:4;22208:36;22218:6;22226:9;22237:6;22208:9;:36::i;:::-;22251:24;22278:10;:18;22289:6;22278:18;;;;;;;;;;;;;;;:32;22297:12;:10;:12::i;:::-;22278:32;;;;;;;;;;;;;;;;22251:59;;22343:6;22323:16;:26;;22315:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22417:57;22426:6;22434:12;:10;:12::i;:::-;22467:6;22448:16;:25;22417:8;:57::i;:::-;22493:4;22486:11;;;22099:403;;;;;:::o;34700:188::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34794:3:::1;34785:6;;:12;;;;:::i;:::-;34775:5;:23;;34767:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34878:5;34860:15;:23;;;;34700:188:::0;:::o;33669:202::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33777:5:::1;33755:27;;:18;;;;;;;;;;;:27;;;;33747:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;33861:5;33840:18;;:26;;;;;;;;;;;;;;;;;;33669:202:::0;:::o;23088:228::-;23155:7;23188:6;;23177:7;:17;;23169:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23246:19;23268:10;:8;:10::i;:::-;23246:32;;23300:11;23290:7;:21;;;;:::i;:::-;23283:28;;;23088:228;;;:::o;21289:73::-;21330:5;18115:1;21342:15;;21289:73;:::o;22507:199::-;22595:4;22606:79;22615:12;:10;:12::i;:::-;22629:7;22674:10;22638;:24;22649:12;:10;:12::i;:::-;22638:24;;;;;;;;;;;;;;;:33;22663:7;22638:33;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;22606:8;:79::i;:::-;22697:4;22690:11;;22507:199;;;;:::o;18802:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;33089:152::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33170:2:::1;33159:7;:13;;33151:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:7;33214:12;:22;;;;33089:152:::0;:::o;31615:205::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31703:5:::1;31676:23;31686:12;:10;:12::i;:::-;31676:9;:23::i;:::-;:32;;31668:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;31753:59;31768:12;:10;:12::i;:::-;18341:42;31796:5;31803;31810:1:::0;31753:14:::1;:59::i;:::-;31615:205:::0;:::o;35543:385::-;35607:7;35621:17;35641:1;35621:21;;35647:22;35672:25;:34;35698:7;35672:34;;;;;;;;;;;;;;;;35647:59;;35711:17;35731:15;35711:35;;35783:9;35766:14;;:26;;;;:::i;:::-;35754:9;:38;35751:152;;;35811:2;35799:14;;35751:152;;;35860:6;35843:14;:23;;;;:::i;:::-;35831:9;:35;35828:75;;;35885:12;;35873:24;;35828:75;35751:152;35914:9;35907:16;;;;;35543:385;;;:::o;18608:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;33246:104::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:5:::1;33315:22;;:30;;;;;;;;;;;;;;;;;;33246:104:::0;:::o;33355:109::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33454:5:::1;33429:22;:30;;;;33355:109:::0;:::o;18719:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;21457:191::-;21523:7;21541:21;:30;21563:7;21541:30;;;;;;;;;;;;;;;;;;;;;;;;;21537:58;;;21580:6;:15;21587:7;21580:15;;;;;;;;;;;;;;;;21573:22;;;;21537:58;21607:36;21627:6;:15;21634:7;21627:15;;;;;;;;;;;;;;;;21607:19;:36::i;:::-;21600:43;;21457:191;;;;:::o;17287:94::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17352:21:::1;17370:1;17352:9;:21::i;:::-;17287:94::o:0;16636:87::-;16682:7;16709:6;;;;;;;;;;;16702:13;;16636:87;:::o;33469:194::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33573:5:::1;33553:25;;:16;;;;;;;;;;;:25;;;;33545:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;33653:5;33634:16;;:24;;;;;;;;;;;;;;;;;;33469:194:::0;:::o;21207:77::-;21246:13;21273:6;;;;;;;;;;;;;;;;;21266:13;;21207:77;:::o;32774:310::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32904:5:::1;32869:40;;:25;:31;32895:4;32869:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;32861:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33009:5;32975:25;:31;33001:4;32975:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33025:5;33021:59;;;33070:4;33038:23;:29;33062:4;33038:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;33021:59;32774:310:::0;;:::o;19609:113::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;22711:372::-;22804:4;22815:24;22842:10;:24;22853:12;:10;:12::i;:::-;22842:24;;;;;;;;;;;;;;;:33;22867:7;22842:33;;;;;;;;;;;;;;;;22815:60;;22908:15;22888:16;:35;;22880:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:67;22997:12;:10;:12::i;:::-;23011:7;23039:15;23020:16;:34;22988:8;:67::i;:::-;23074:4;23067:11;;;22711:372;;;;:::o;21653:152::-;21731:4;21742:42;21752:12;:10;:12::i;:::-;21766:9;21777:6;21742:9;:42::i;:::-;21796:4;21789:11;;21653:152;;;;:::o;19072:44::-;;;;:::o;23639:390::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23714:21:::1;:30;23736:7;23714:30;;;;;;;;;;;;;;;;;;;;;;;;;23706:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:9;23779:246;23803:8;:15;;;;23799:1;:19;23779:246;;;23850:7;23835:22;;:8;23844:1;23835:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:22;;;23831:189;;;23880:8;23907:1;23889:8;:15;;;;:19;;;;:::i;:::-;23880:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23866:8;23875:1;23866:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;23934:1;23916:6;:15;23923:7;23916:15;;;;;;;;;;;;;;;:19;;;;23975:5;23942:21;:30;23964:7;23942:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23987:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24008:5;;23831:189;23820:3;;;;;:::i;:::-;;;;23779:246;;;;23639:390:::0;:::o;34358:337::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:3:::1;34468:6;;:12;;;;:::i;:::-;34457:6;:24;;34449:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34570:3;34561:6;;:12;;;;:::i;:::-;34549:7;:25;;34541:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;34654:6;34637:14;:23;;;;34683:7;34665:15;:25;;;;34358:337:::0;;:::o;34893:168::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34947:15:::1;34965:24;34983:4;34965:9;:24::i;:::-;34947:42;;34994:62;35017:4;35024:12;:10;:12::i;:::-;35038:7;35047:5;35054:1:::0;34994:14:::1;:62::i;:::-;34942:119;34893:168::o:0;19332:42::-;;;;;;;;;;;;;:::o;31825:944::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31906:12:::1;31929:4;31906:28;;31948:13;;;;;;;;;;;31947:14;31939:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;32029:18;32002:23;32012:12;:10;:12::i;:::-;32002:9;:23::i;:::-;:45;;31994:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;32125:1;32113:9;:13;32105:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32227;32242:12;:10;:12::i;:::-;32256:4;32262:18;32282:5;32289:1:::0;32227:14:::1;:64::i;:::-;32315:19;32349:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32337:40;;;32378:4;32384:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32337:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32315:83;;32444:4;32403:25;:38;32429:11;32403:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;32492:4;32453:23;:36;32477:11;32453:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;32522:41;32531:4;32545:6;;;;;;;;;;;18150:12;32522:8;:41::i;:::-;32568:6;;;;;;;;;;;:22;;;32598:9;32609:4;32615:18;32635:1;32638::::0;32641:7:::1;:5;:7::i;:::-;32650:15;32568:98;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32698:4;32673:22;;:29;;;;;;;;;;;;;;;;;;32723:4;32707:13;;:20;;;;;;;;;;;;;;;;;;32749:15;32732:14;:32;;;;31901:868;;31825:944:::0;:::o;33876:168::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33962:9:::1;33957:83;33981:8;:15;33977:1;:19;33957:83;;;34029:5;34008;:18;34014:8;34023:1;34014:11;;;;;;;;:::i;:::-;;;;;;;;34008:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;33998:3;;;;;:::i;:::-;;;;33957:83;;;;33876:168:::0;;:::o;19020:39::-;;;;:::o;18969:38::-;;;;:::o;21810:133::-;21891:7;21912:10;:17;21923:5;21912:17;;;;;;;;;;;;;;;:26;21930:7;21912:26;;;;;;;;;;;;;;;;21905:33;;21810:133;;;;:::o;17536:192::-;16867:12;:10;:12::i;:::-;16856:23;;:7;:5;:7::i;:::-;:23;;;16848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17645:1:::1;17625:22;;:8;:22;;;;17617:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17701:19;17711:8;17701:9;:19::i;:::-;17536:192:::0;:::o;8035:98::-;8088:7;8115:10;8108:17;;8035:98;:::o;26089:315::-;18295:1;26176:21;;:5;:21;;;;26168:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18295:1;26251:23;;:7;:23;;;;26243:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26349:6;26320:10;:17;26331:5;26320:17;;;;;;;;;;;;;;;:26;26338:7;26320:26;;;;;;;;;;;;;;;:35;;;;26383:7;26367:32;;26376:5;26367:32;;;26392:6;26367:32;;;;;;:::i;:::-;;;;;;;;26089:315;;;:::o;29027:959::-;29155:26;29184:45;29195:7;29204:14;29220:8;29184:10;:45::i;:::-;29155:74;;29240:21;:29;29262:6;29240:29;;;;;;;;;;;;;;;;;;;;;;;;;29236:72;;;29295:7;29277:6;:14;29284:6;29277:14;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;29236:72;29318:21;:32;29340:9;29318:32;;;;;;;;;;;;;;;;;;;;;;;;;29314:90;;;29379:3;:19;;;29358:6;:17;29365:9;29358:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;29314:90;29428:3;:11;;;29410:6;:14;29417:6;29410:14;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;29465:3;:19;;;29444:6;:17;29451:9;29444:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;29534:1;29494:25;:36;29520:9;29494:36;;;;;;;;;;;;;;;;:41;29491:112;;;29582:15;29543:25;:36;29569:9;29543:36;;;;;;;;;;;;;;;:54;;;;29491:112;29613:14;29609:313;;;29635:33;29652:3;:15;;;29635:16;:33::i;:::-;29674:44;29689:3;:13;;;29704:3;:13;;;29674:14;:44::i;:::-;29754:4;29729:46;;29738:6;29729:46;;;29761:3;:13;;;29729:46;;;;;;:::i;:::-;;;;;;;;29800:1;29784:3;:13;;;:17;29781:136;;;29809:44;29824:3;:13;;;29839:3;:13;;;29809:14;:44::i;:::-;18341:42;29865:45;;29874:6;29865:45;;;29896:3;:13;;;29865:45;;;;;;:::i;:::-;;;;;;;;29781:136;29609:313;29950:9;29933:48;;29942:6;29933:48;;;29961:3;:19;;;29933:48;;;;;;:::i;:::-;;;;;;;;29150:836;29027:959;;;;;:::o;26409:2093::-;18295:1;26491:20;;:4;:20;;;;26483:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18295:1;26566:18;;:2;:18;;;;26558:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:5;:11;26644:4;26638:11;;;;;;;;;;;;;;;;;;;;;;;;;26637:12;26629:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26708:1;26699:6;:10;26691:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:15;26788:4;26778:9;:15::i;:::-;26768:6;:25;;26760:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26876:1;26858:15;;:19;:53;;;;;26882:25;:29;26908:2;26882:29;;;;;;;;;;;;;;;;;;;;;;;;;26881:30;26858:53;:85;;;;;26916:23;:27;26940:2;26916:27;;;;;;;;;;;;;;;;;;;;;;;;;26915:28;26858:85;26854:217;;;26987:15;;26976:6;26960:13;26970:2;26960:9;:13::i;:::-;:22;;;;:::i;:::-;26959:43;;26951:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;26854:217;27095:1;27081:10;;:15;:48;;;;;27100:25;:29;27126:2;27100:29;;;;;;;;;;;;;;;;;;;;;;;;;27081:48;27077:91;;;27150:12;27137:10;:25;;;;27077:91;27174:19;27197:18;:24;27216:4;27197:24;;;;;;;;;;;;;;;;;;;;;;;;;27196:25;:52;;;;;27226:18;:22;27245:2;27226:22;;;;;;;;;;;;;;;;;;;;;;;;;27225:23;27196:52;27174:74;;27257:14;27253:269;;;27298:25;:31;27324:4;27298:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;27349:15;;27298:66;;;27332:14;;27298:66;27287:6;:78;;27279:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;27424:25;:31;27450:4;27424:31;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;27475:10;;27459:12;:26;;27424:61;27420:97;;;27506:4;27494:5;:9;27500:2;27494:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;27420:97;27253:269;27528:15;27546:24;27564:4;27546:9;:24::i;:::-;27528:42;;27591:15;;27581:7;:25;27577:68;;;27624:15;;27614:25;;27577:68;27649:17;27679:25;:31;27705:4;27679:31;;;;;;;;;;;;;;;;;;;;;;;;;27675:757;;27726:22;;;;;;;;;;;:48;;;;;27753:21;;;;;;;;;;;27752:22;27726:48;:97;;;;;27801:22;;27790:7;:33;;27726:97;27722:215;;;27862:4;27838:21;;:28;;;;;;;;;;;;;;;;;;27873:21;27886:7;27873:12;:21::i;:::-;27925:5;27901:21;;:29;;;;;;;;;;;;;;;;;;27722:215;27945:25;:29;27971:2;27945:29;;;;;;;;;;;;;;;;;;;;;;;;;27942:485;;;28002:22;28027:25;:31;28053:4;28027:31;;;;;;;;;;;;;;;;28002:56;;28065:17;28085:15;28065:35;;28211:9;28194:14;;:26;;;;:::i;:::-;28182:9;:38;28179:206;;;28241:2;28229:14;;28179:206;;;28338:6;28321:14;:23;;;;:::i;:::-;28309:9;:35;28306:79;;;28365:12;;28353:24;;28306:79;28179:206;27975:452;;27942:485;27675:757;28438:59;28453:4;28459:2;28463:6;28471:14;28487:9;28438:14;:59::i;:::-;26478:2024;;;26409:2093;;;:::o;25483:146::-;25525:7;25540:15;25557;25576:19;:17;:19::i;:::-;25539:56;;;;25617:7;25607;:17;;;;:::i;:::-;25600:24;;;;25483:146;:::o;17736:173::-;17792:16;17811:6;;;;;;;;;;;17792:25;;17837:8;17828:6;;:17;;;;;;;;;;;;;;;;;;17892:8;17861:40;;17882:8;17861:40;;;;;;;;;;;;17781:128;17736:173;:::o;24034:324::-;24125:26;;:::i;:::-;24164:39;24176:7;24185;24194:8;24164:11;:39::i;:::-;24158:45;;24292:46;24304:3;24309:7;24318;24327:10;:8;:10::i;:::-;24292:11;:46::i;:::-;24209:3;:11;;24222:3;:19;;24243:3;:15;;24260:3;:13;;24275:3;:13;;24208:130;;;;;;;;;;;;;;;;;;;;;;;;;24034:324;;;;;:::o;28507:86::-;28577:11;28567:6;;:21;;;;;;;:::i;:::-;;;;;;;;28507:86;:::o;28598:216::-;28673:12;28696:4;28673:28;;28724:9;28708:6;:12;28715:4;28708:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;28744:21;:27;28766:4;28744:27;;;;;;;;;;;;;;;;;;;;;;;;;28740:70;;;28795:9;28779:6;:12;28786:4;28779:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;28740:70;28668:146;28598:216;;:::o;28819:203::-;28918:9;28894:6;:20;18341:42;28894:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;28936:21;:35;18341:42;28936:35;;;;;;;;;;;;;;;;;;;;;;;;;28932:86;;;29003:9;28979:6;:20;18341:42;28979:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;28932:86;28819:203;;:::o;29991:727::-;20087:4;20063:21;;:28;;;;;;;;;;;;;;;;;;30054:21:::1;30098:4;:19;;;30078:4;:17;;;:39;;;;:::i;:::-;30054:63;;30122:14;30155:4;:17;;;30139:13;:33;;;;:::i;:::-;30122:50;;30195:1;30185:6;:11;30181:24;;;30198:7;;;;30181:24;30234:26;30288:6;30272:13;30263:6;:22;;;;:::i;:::-;:31;;;;:::i;:::-;30234:60;;30299:26;30337:18;30328:6;:27;;;;:::i;:::-;30299:56;;30381:42;30404:18;30381:22;:42::i;:::-;;30428:33;30442:18;30428:13;:33::i;:::-;30494:18;30515:21;30494:42;;30541:22;30599:13;30579:4;:17;;;30566:10;:30;;;;:::i;:::-;:46;;;;:::i;:::-;30541:71;;30617:16;;;;;;;;;;;:25;;:41;30643:14;30617:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30663:18;;;;;;;;;;;:27;;:50;30691:21;30663:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30049:669;;;;;;20096:1;20126:5:::0;20102:21;;:29;;;;;;;;;;;;;;;;;;29991:727;:::o;25634:450::-;25685:7;25694;25708:15;25726:6;;25708:24;;25737:15;25755:6;;25737:24;;25773:9;25768:221;25792:8;:15;;;;25788:1;:19;25768:221;;;25846:7;25824:6;:19;25831:8;25840:1;25831:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25824:19;;;;;;;;;;;;;;;;:29;:62;;;;25879:7;25857:6;:19;25864:8;25873:1;25864:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25857:19;;;;;;;;;;;;;;;;:29;25824:62;25820:91;;;25896:6;;25904;;25888:23;;;;;;;;;25820:91;25928:6;:19;25935:8;25944:1;25935:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25928:19;;;;;;;;;;;;;;;;25917:30;;;;;:::i;:::-;;;25964:6;:19;25971:8;25980:1;25971:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25964:19;;;;;;;;;;;;;;;;25953:30;;;;;:::i;:::-;;;25809:3;;;;;:::i;:::-;;;;25768:221;;;;26018:6;;26009;;:15;;;;:::i;:::-;25999:7;:25;25995:54;;;26034:6;;26042;;26026:23;;;;;;;;25995:54;26062:7;26071;26054:25;;;;;;25634:450;;;:::o;24363:500::-;24455:26;;:::i;:::-;24493:7;24488:71;;24530:7;24508:3;:19;;:29;;;;;24543:10;;24488:71;24611:3;24593:4;:15;;;24583:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;24565:3;:15;;:49;;;;;24656:3;24645:8;24635:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;24619:3;:13;;:40;;;;;24754:3;24731:4;:19;;;24711:4;:17;;;24691:4;:17;;;:37;;;;:::i;:::-;:59;;;;:::i;:::-;24680:7;:71;;;;:::i;:::-;:77;;;;:::i;:::-;24664:3;:13;;:93;;;;;24828:3;:13;;;24812:3;:13;;;24794:3;:15;;;24784:7;:25;;;;:::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;:::-;24762:3;:19;;:79;;;;;24363:500;;;;;;:::o;24868:610::-;24991:15;25008:23;25033:19;25054:17;25073;25117:11;25107:7;:21;;;;:::i;:::-;25097:31;;25140:7;25135:60;;25163:7;25172;25181:1;25184;25187;25155:34;;;;;;;;;;;;25135:60;25233:11;25215:3;:15;;;:29;;;;:::i;:::-;25201:43;;25277:11;25261:3;:13;;;:27;;;;:::i;:::-;25249:39;;25321:11;25305:3;:13;;;:27;;;;:::i;:::-;25293:39;;25391:9;25379;25365:11;25355:7;:21;;;;:::i;:::-;:33;;;;:::i;:::-;:45;;;;:::i;:::-;25337:63;;24868:610;;;;;;;;;;:::o;31139:447::-;31206:7;31220:12;31243:4;31220:28;;31255:21;31293:1;31279:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31255:40;;31310:4;31300;31305:1;31300:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;31329:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31319:4;31324:1;31319:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31349:41;31358:4;31372:6;;;;;;;;;;;18150:12;31349:8;:41::i;:::-;31397:23;31423:4;:12;;;31397:38;;31440:6;;;;;;;;;;;:57;;;31498:8;31508:1;31511:4;31517;31523:15;31440:99;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31566:15;31551:4;:12;;;:30;;;;:::i;:::-;31544:37;;;;;31139:447;;;:::o;30723:411::-;30775:12;30798:4;30775:28;;30810:20;30842:1;30833:6;:10;;;;:::i;:::-;30810:33;;30848:26;30886:12;30877:6;:21;;;;:::i;:::-;30848:50;;30905:23;30931:36;30954:12;30931:22;:36::i;:::-;30905:62;;30974:41;30983:4;30997:6;;;;;;;;;;;18150:12;30974:8;:41::i;:::-;31020:6;;;;;;;;;;;:22;;;31050:15;31067:4;31073:18;31093:1;31096;18341:42;31113:15;31020:109;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30770:364;;;;30723:411;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:117::-;3603:1;3600;3593:12;3617:180;3665:77;3662:1;3655:88;3762:4;3759:1;3752:15;3786:4;3783:1;3776:15;3803:281;3886:27;3908:4;3886:27;:::i;:::-;3878:6;3874:40;4016:6;4004:10;4001:22;3980:18;3968:10;3965:34;3962:62;3959:88;;;4027:18;;:::i;:::-;3959:88;4067:10;4063:2;4056:22;3846:238;3803:281;;:::o;4090:129::-;4124:6;4151:20;;:::i;:::-;4141:30;;4180:33;4208:4;4200:6;4180:33;:::i;:::-;4090:129;;;:::o;4225:311::-;4302:4;4392:18;4384:6;4381:30;4378:56;;;4414:18;;:::i;:::-;4378:56;4464:4;4456:6;4452:17;4444:25;;4524:4;4518;4514:15;4506:23;;4225:311;;;:::o;4542:117::-;4651:1;4648;4641:12;4682:710;4778:5;4803:81;4819:64;4876:6;4819:64;:::i;:::-;4803:81;:::i;:::-;4794:90;;4904:5;4933:6;4926:5;4919:21;4967:4;4960:5;4956:16;4949:23;;5020:4;5012:6;5008:17;5000:6;4996:30;5049:3;5041:6;5038:15;5035:122;;;5068:79;;:::i;:::-;5035:122;5183:6;5166:220;5200:6;5195:3;5192:15;5166:220;;;5275:3;5304:37;5337:3;5325:10;5304:37;:::i;:::-;5299:3;5292:50;5371:4;5366:3;5362:14;5355:21;;5242:144;5226:4;5221:3;5217:14;5210:21;;5166:220;;;5170:21;4784:608;;4682:710;;;;;:::o;5415:370::-;5486:5;5535:3;5528:4;5520:6;5516:17;5512:27;5502:122;;5543:79;;:::i;:::-;5502:122;5660:6;5647:20;5685:94;5775:3;5767:6;5760:4;5752:6;5748:17;5685:94;:::i;:::-;5676:103;;5492:293;5415:370;;;;:::o;5791:684::-;5884:6;5892;5941:2;5929:9;5920:7;5916:23;5912:32;5909:119;;;5947:79;;:::i;:::-;5909:119;6095:1;6084:9;6080:17;6067:31;6125:18;6117:6;6114:30;6111:117;;;6147:79;;:::i;:::-;6111:117;6252:78;6322:7;6313:6;6302:9;6298:22;6252:78;:::i;:::-;6242:88;;6038:302;6379:2;6405:53;6450:7;6441:6;6430:9;6426:22;6405:53;:::i;:::-;6395:63;;6350:118;5791:684;;;;;:::o;6481:329::-;6540:6;6589:2;6577:9;6568:7;6564:23;6560:32;6557:119;;;6595:79;;:::i;:::-;6557:119;6715:1;6740:53;6785:7;6776:6;6765:9;6761:22;6740:53;:::i;:::-;6730:63;;6686:117;6481:329;;;;:::o;6816:118::-;6903:24;6921:5;6903:24;:::i;:::-;6898:3;6891:37;6816:118;;:::o;6940:222::-;7033:4;7071:2;7060:9;7056:18;7048:26;;7084:71;7152:1;7141:9;7137:17;7128:6;7084:71;:::i;:::-;6940:222;;;;:::o;7168:619::-;7245:6;7253;7261;7310:2;7298:9;7289:7;7285:23;7281:32;7278:119;;;7316:79;;:::i;:::-;7278:119;7436:1;7461:53;7506:7;7497:6;7486:9;7482:22;7461:53;:::i;:::-;7451:63;;7407:117;7563:2;7589:53;7634:7;7625:6;7614:9;7610:22;7589:53;:::i;:::-;7579:63;;7534:118;7691:2;7717:53;7762:7;7753:6;7742:9;7738:22;7717:53;:::i;:::-;7707:63;;7662:118;7168:619;;;;;:::o;7793:329::-;7852:6;7901:2;7889:9;7880:7;7876:23;7872:32;7869:119;;;7907:79;;:::i;:::-;7869:119;8027:1;8052:53;8097:7;8088:6;8077:9;8073:22;8052:53;:::i;:::-;8042:63;;7998:117;7793:329;;;;:::o;8128:104::-;8173:7;8202:24;8220:5;8202:24;:::i;:::-;8191:35;;8128:104;;;:::o;8238:138::-;8319:32;8345:5;8319:32;:::i;:::-;8312:5;8309:43;8299:71;;8366:1;8363;8356:12;8299:71;8238:138;:::o;8382:155::-;8436:5;8474:6;8461:20;8452:29;;8490:41;8525:5;8490:41;:::i;:::-;8382:155;;;;:::o;8543:345::-;8610:6;8659:2;8647:9;8638:7;8634:23;8630:32;8627:119;;;8665:79;;:::i;:::-;8627:119;8785:1;8810:61;8863:7;8854:6;8843:9;8839:22;8810:61;:::i;:::-;8800:71;;8756:125;8543:345;;;;:::o;8894:86::-;8929:7;8969:4;8962:5;8958:16;8947:27;;8894:86;;;:::o;8986:112::-;9069:22;9085:5;9069:22;:::i;:::-;9064:3;9057:35;8986:112;;:::o;9104:214::-;9193:4;9231:2;9220:9;9216:18;9208:26;;9244:67;9308:1;9297:9;9293:17;9284:6;9244:67;:::i;:::-;9104:214;;;;:::o;9324:116::-;9394:21;9409:5;9394:21;:::i;:::-;9387:5;9384:32;9374:60;;9430:1;9427;9420:12;9374:60;9324:116;:::o;9446:133::-;9489:5;9527:6;9514:20;9505:29;;9543:30;9567:5;9543:30;:::i;:::-;9446:133;;;;:::o;9585:323::-;9641:6;9690:2;9678:9;9669:7;9665:23;9661:32;9658:119;;;9696:79;;:::i;:::-;9658:119;9816:1;9841:50;9883:7;9874:6;9863:9;9859:22;9841:50;:::i;:::-;9831:60;;9787:114;9585:323;;;;:::o;9914:118::-;10001:24;10019:5;10001:24;:::i;:::-;9996:3;9989:37;9914:118;;:::o;10038:222::-;10131:4;10169:2;10158:9;10154:18;10146:26;;10182:71;10250:1;10239:9;10235:17;10226:6;10182:71;:::i;:::-;10038:222;;;;:::o;10266:468::-;10331:6;10339;10388:2;10376:9;10367:7;10363:23;10359:32;10356:119;;;10394:79;;:::i;:::-;10356:119;10514:1;10539:53;10584:7;10575:6;10564:9;10560:22;10539:53;:::i;:::-;10529:63;;10485:117;10641:2;10667:50;10709:7;10700:6;10689:9;10685:22;10667:50;:::i;:::-;10657:60;;10612:115;10266:468;;;;;:::o;10740:553::-;10917:4;10955:3;10944:9;10940:19;10932:27;;10969:71;11037:1;11026:9;11022:17;11013:6;10969:71;:::i;:::-;11050:72;11118:2;11107:9;11103:18;11094:6;11050:72;:::i;:::-;11132;11200:2;11189:9;11185:18;11176:6;11132:72;:::i;:::-;11214;11282:2;11271:9;11267:18;11258:6;11214:72;:::i;:::-;10740:553;;;;;;;:::o;11299:474::-;11367:6;11375;11424:2;11412:9;11403:7;11399:23;11395:32;11392:119;;;11430:79;;:::i;:::-;11392:119;11550:1;11575:53;11620:7;11611:6;11600:9;11596:22;11575:53;:::i;:::-;11565:63;;11521:117;11677:2;11703:53;11748:7;11739:6;11728:9;11724:22;11703:53;:::i;:::-;11693:63;;11648:118;11299:474;;;;;:::o;11779:678::-;11869:6;11877;11926:2;11914:9;11905:7;11901:23;11897:32;11894:119;;;11932:79;;:::i;:::-;11894:119;12080:1;12069:9;12065:17;12052:31;12110:18;12102:6;12099:30;12096:117;;;12132:79;;:::i;:::-;12096:117;12237:78;12307:7;12298:6;12287:9;12283:22;12237:78;:::i;:::-;12227:88;;12023:302;12364:2;12390:50;12432:7;12423:6;12412:9;12408:22;12390:50;:::i;:::-;12380:60;;12335:115;11779:678;;;;;:::o;12463:474::-;12531:6;12539;12588:2;12576:9;12567:7;12563:23;12559:32;12556:119;;;12594:79;;:::i;:::-;12556:119;12714:1;12739:53;12784:7;12775:6;12764:9;12760:22;12739:53;:::i;:::-;12729:63;;12685:117;12841:2;12867:53;12912:7;12903:6;12892:9;12888:22;12867:53;:::i;:::-;12857:63;;12812:118;12463:474;;;;;:::o;12943:182::-;13083:34;13079:1;13071:6;13067:14;13060:58;12943:182;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13131:366;;;:::o;13503:419::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13756:9;13750:4;13746:20;13742:1;13731:9;13727:17;13720:47;13784:131;13910:4;13784:131;:::i;:::-;13776:139;;13503:419;;;:::o;13928:180::-;13976:77;13973:1;13966:88;14073:4;14070:1;14063:15;14097:4;14094:1;14087:15;14114:348;14154:7;14177:20;14195:1;14177:20;:::i;:::-;14172:25;;14211:20;14229:1;14211:20;:::i;:::-;14206:25;;14399:1;14331:66;14327:74;14324:1;14321:81;14316:1;14309:9;14302:17;14298:105;14295:131;;;14406:18;;:::i;:::-;14295:131;14454:1;14451;14447:9;14436:20;;14114:348;;;;:::o;14468:176::-;14608:28;14604:1;14596:6;14592:14;14585:52;14468:176;:::o;14650:366::-;14792:3;14813:67;14877:2;14872:3;14813:67;:::i;:::-;14806:74;;14889:93;14978:3;14889:93;:::i;:::-;15007:2;15002:3;14998:12;14991:19;;14650:366;;;:::o;15022:419::-;15188:4;15226:2;15215:9;15211:18;15203:26;;15275:9;15269:4;15265:20;15261:1;15250:9;15246:17;15239:47;15303:131;15429:4;15303:131;:::i;:::-;15295:139;;15022:419;;;:::o;15447:180::-;15495:77;15492:1;15485:88;15592:4;15589:1;15582:15;15616:4;15613:1;15606:15;15633:233;15672:3;15695:24;15713:5;15695:24;:::i;:::-;15686:33;;15741:66;15734:5;15731:77;15728:103;;;15811:18;;:::i;:::-;15728:103;15858:1;15851:5;15847:13;15840:20;;15633:233;;;:::o;15872:177::-;16012:29;16008:1;16000:6;15996:14;15989:53;15872:177;:::o;16055:366::-;16197:3;16218:67;16282:2;16277:3;16218:67;:::i;:::-;16211:74;;16294:93;16383:3;16294:93;:::i;:::-;16412:2;16407:3;16403:12;16396:19;;16055:366;;;:::o;16427:419::-;16593:4;16631:2;16620:9;16616:18;16608:26;;16680:9;16674:4;16670:20;16666:1;16655:9;16651:17;16644:47;16708:131;16834:4;16708:131;:::i;:::-;16700:139;;16427:419;;;:::o;16852:227::-;16992:34;16988:1;16980:6;16976:14;16969:58;17061:10;17056:2;17048:6;17044:15;17037:35;16852:227;:::o;17085:366::-;17227:3;17248:67;17312:2;17307:3;17248:67;:::i;:::-;17241:74;;17324:93;17413:3;17324:93;:::i;:::-;17442:2;17437:3;17433:12;17426:19;;17085:366;;;:::o;17457:419::-;17623:4;17661:2;17650:9;17646:18;17638:26;;17710:9;17704:4;17700:20;17696:1;17685:9;17681:17;17674:47;17738:131;17864:4;17738:131;:::i;:::-;17730:139;;17457:419;;;:::o;17882:180::-;17930:77;17927:1;17920:88;18027:4;18024:1;18017:15;18051:4;18048:1;18041:15;18068:185;18108:1;18125:20;18143:1;18125:20;:::i;:::-;18120:25;;18159:20;18177:1;18159:20;:::i;:::-;18154:25;;18198:1;18188:35;;18203:18;;:::i;:::-;18188:35;18245:1;18242;18238:9;18233:14;;18068:185;;;;:::o;18259:239::-;18399:34;18395:1;18387:6;18383:14;18376:58;18468:22;18463:2;18455:6;18451:15;18444:47;18259:239;:::o;18504:366::-;18646:3;18667:67;18731:2;18726:3;18667:67;:::i;:::-;18660:74;;18743:93;18832:3;18743:93;:::i;:::-;18861:2;18856:3;18852:12;18845:19;;18504:366;;;:::o;18876:419::-;19042:4;19080:2;19069:9;19065:18;19057:26;;19129:9;19123:4;19119:20;19115:1;19104:9;19100:17;19093:47;19157:131;19283:4;19157:131;:::i;:::-;19149:139;;18876:419;;;:::o;19301:235::-;19441:34;19437:1;19429:6;19425:14;19418:58;19510:18;19505:2;19497:6;19493:15;19486:43;19301:235;:::o;19542:366::-;19684:3;19705:67;19769:2;19764:3;19705:67;:::i;:::-;19698:74;;19781:93;19870:3;19781:93;:::i;:::-;19899:2;19894:3;19890:12;19883:19;;19542:366;;;:::o;19914:419::-;20080:4;20118:2;20107:9;20103:18;20095:26;;20167:9;20161:4;20157:20;20153:1;20142:9;20138:17;20131:47;20195:131;20321:4;20195:131;:::i;:::-;20187:139;;19914:419;;;:::o;20339:229::-;20479:34;20475:1;20467:6;20463:14;20456:58;20548:12;20543:2;20535:6;20531:15;20524:37;20339:229;:::o;20574:366::-;20716:3;20737:67;20801:2;20796:3;20737:67;:::i;:::-;20730:74;;20813:93;20902:3;20813:93;:::i;:::-;20931:2;20926:3;20922:12;20915:19;;20574:366;;;:::o;20946:419::-;21112:4;21150:2;21139:9;21135:18;21127:26;;21199:9;21193:4;21189:20;21185:1;21174:9;21170:17;21163:47;21227:131;21353:4;21227:131;:::i;:::-;21219:139;;20946:419;;;:::o;21371:305::-;21411:3;21430:20;21448:1;21430:20;:::i;:::-;21425:25;;21464:20;21482:1;21464:20;:::i;:::-;21459:25;;21618:1;21550:66;21546:74;21543:1;21540:81;21537:107;;;21624:18;;:::i;:::-;21537:107;21668:1;21665;21661:9;21654:16;;21371:305;;;;:::o;21682:182::-;21822:34;21818:1;21810:6;21806:14;21799:58;21682:182;:::o;21870:366::-;22012:3;22033:67;22097:2;22092:3;22033:67;:::i;:::-;22026:74;;22109:93;22198:3;22109:93;:::i;:::-;22227:2;22222:3;22218:12;22211:19;;21870:366;;;:::o;22242:419::-;22408:4;22446:2;22435:9;22431:18;22423:26;;22495:9;22489:4;22485:20;22481:1;22470:9;22466:17;22459:47;22523:131;22649:4;22523:131;:::i;:::-;22515:139;;22242:419;;;:::o;22667:222::-;22807:34;22803:1;22795:6;22791:14;22784:58;22876:5;22871:2;22863:6;22859:15;22852:30;22667:222;:::o;22895:366::-;23037:3;23058:67;23122:2;23117:3;23058:67;:::i;:::-;23051:74;;23134:93;23223:3;23134:93;:::i;:::-;23252:2;23247:3;23243:12;23236:19;;22895:366;;;:::o;23267:419::-;23433:4;23471:2;23460:9;23456:18;23448:26;;23520:9;23514:4;23510:20;23506:1;23495:9;23491:17;23484:47;23548:131;23674:4;23548:131;:::i;:::-;23540:139;;23267:419;;;:::o;23692:233::-;23832:34;23828:1;23820:6;23816:14;23809:58;23901:16;23896:2;23888:6;23884:15;23877:41;23692:233;:::o;23931:366::-;24073:3;24094:67;24158:2;24153:3;24094:67;:::i;:::-;24087:74;;24170:93;24259:3;24170:93;:::i;:::-;24288:2;24283:3;24279:12;24272:19;;23931:366;;;:::o;24303:419::-;24469:4;24507:2;24496:9;24492:18;24484:26;;24556:9;24550:4;24546:20;24542:1;24531:9;24527:17;24520:47;24584:131;24710:4;24584:131;:::i;:::-;24576:139;;24303:419;;;:::o;24728:243::-;24868:34;24864:1;24856:6;24852:14;24845:58;24937:26;24932:2;24924:6;24920:15;24913:51;24728:243;:::o;24977:366::-;25119:3;25140:67;25204:2;25199:3;25140:67;:::i;:::-;25133:74;;25216:93;25305:3;25216:93;:::i;:::-;25334:2;25329:3;25325:12;25318:19;;24977:366;;;:::o;25349:419::-;25515:4;25553:2;25542:9;25538:18;25530:26;;25602:9;25596:4;25592:20;25588:1;25577:9;25573:17;25566:47;25630:131;25756:4;25630:131;:::i;:::-;25622:139;;25349:419;;;:::o;25774:224::-;25914:34;25910:1;25902:6;25898:14;25891:58;25983:7;25978:2;25970:6;25966:15;25959:32;25774:224;:::o;26004:366::-;26146:3;26167:67;26231:2;26226:3;26167:67;:::i;:::-;26160:74;;26243:93;26332:3;26243:93;:::i;:::-;26361:2;26356:3;26352:12;26345:19;;26004:366;;;:::o;26376:419::-;26542:4;26580:2;26569:9;26565:18;26557:26;;26629:9;26623:4;26619:20;26615:1;26604:9;26600:17;26593:47;26657:131;26783:4;26657:131;:::i;:::-;26649:139;;26376:419;;;:::o;26801:173::-;26941:25;26937:1;26929:6;26925:14;26918:49;26801:173;:::o;26980:366::-;27122:3;27143:67;27207:2;27202:3;27143:67;:::i;:::-;27136:74;;27219:93;27308:3;27219:93;:::i;:::-;27337:2;27332:3;27328:12;27321:19;;26980:366;;;:::o;27352:419::-;27518:4;27556:2;27545:9;27541:18;27533:26;;27605:9;27599:4;27595:20;27591:1;27580:9;27576:17;27569:47;27633:131;27759:4;27633:131;:::i;:::-;27625:139;;27352:419;;;:::o;27777:191::-;27817:4;27837:20;27855:1;27837:20;:::i;:::-;27832:25;;27871:20;27889:1;27871:20;:::i;:::-;27866:25;;27910:1;27907;27904:8;27901:34;;;27915:18;;:::i;:::-;27901:34;27960:1;27957;27953:9;27945:17;;27777:191;;;;:::o;27974:180::-;28022:77;28019:1;28012:88;28119:4;28116:1;28109:15;28143:4;28140:1;28133:15;28160:237;28300:34;28296:1;28288:6;28284:14;28277:58;28369:20;28364:2;28356:6;28352:15;28345:45;28160:237;:::o;28403:366::-;28545:3;28566:67;28630:2;28625:3;28566:67;:::i;:::-;28559:74;;28642:93;28731:3;28642:93;:::i;:::-;28760:2;28755:3;28751:12;28744:19;;28403:366;;;:::o;28775:419::-;28941:4;28979:2;28968:9;28964:18;28956:26;;29028:9;29022:4;29018:20;29014:1;29003:9;28999:17;28992:47;29056:131;29182:4;29056:131;:::i;:::-;29048:139;;28775:419;;;:::o;29200:238::-;29340:34;29336:1;29328:6;29324:14;29317:58;29409:21;29404:2;29396:6;29392:15;29385:46;29200:238;:::o;29444:366::-;29586:3;29607:67;29671:2;29666:3;29607:67;:::i;:::-;29600:74;;29683:93;29772:3;29683:93;:::i;:::-;29801:2;29796:3;29792:12;29785:19;;29444:366;;;:::o;29816:419::-;29982:4;30020:2;30009:9;30005:18;29997:26;;30069:9;30063:4;30059:20;30055:1;30044:9;30040:17;30033:47;30097:131;30223:4;30097:131;:::i;:::-;30089:139;;29816:419;;;:::o;30241:173::-;30381:25;30377:1;30369:6;30365:14;30358:49;30241:173;:::o;30420:366::-;30562:3;30583:67;30647:2;30642:3;30583:67;:::i;:::-;30576:74;;30659:93;30748:3;30659:93;:::i;:::-;30777:2;30772:3;30768:12;30761:19;;30420:366;;;:::o;30792:419::-;30958:4;30996:2;30985:9;30981:18;30973:26;;31045:9;31039:4;31035:20;31031:1;31020:9;31016:17;31009:47;31073:131;31199:4;31073:131;:::i;:::-;31065:139;;30792:419;;;:::o;31217:235::-;31357:34;31353:1;31345:6;31341:14;31334:58;31426:18;31421:2;31413:6;31409:15;31402:43;31217:235;:::o;31458:366::-;31600:3;31621:67;31685:2;31680:3;31621:67;:::i;:::-;31614:74;;31697:93;31786:3;31697:93;:::i;:::-;31815:2;31810:3;31806:12;31799:19;;31458:366;;;:::o;31830:419::-;31996:4;32034:2;32023:9;32019:18;32011:26;;32083:9;32077:4;32073:20;32069:1;32058:9;32054:17;32047:47;32111:131;32237:4;32111:131;:::i;:::-;32103:139;;31830:419;;;:::o;32255:225::-;32395:34;32391:1;32383:6;32379:14;32372:58;32464:8;32459:2;32451:6;32447:15;32440:33;32255:225;:::o;32486:366::-;32628:3;32649:67;32713:2;32708:3;32649:67;:::i;:::-;32642:74;;32725:93;32814:3;32725:93;:::i;:::-;32843:2;32838:3;32834:12;32827:19;;32486:366;;;:::o;32858:419::-;33024:4;33062:2;33051:9;33047:18;33039:26;;33111:9;33105:4;33101:20;33097:1;33086:9;33082:17;33075:47;33139:131;33265:4;33139:131;:::i;:::-;33131:139;;32858:419;;;:::o;33283:143::-;33340:5;33371:6;33365:13;33356:22;;33387:33;33414:5;33387:33;:::i;:::-;33283:143;;;;:::o;33432:351::-;33502:6;33551:2;33539:9;33530:7;33526:23;33522:32;33519:119;;;33557:79;;:::i;:::-;33519:119;33677:1;33702:64;33758:7;33749:6;33738:9;33734:22;33702:64;:::i;:::-;33692:74;;33648:128;33432:351;;;;:::o;33789:332::-;33910:4;33948:2;33937:9;33933:18;33925:26;;33961:71;34029:1;34018:9;34014:17;34005:6;33961:71;:::i;:::-;34042:72;34110:2;34099:9;34095:18;34086:6;34042:72;:::i;:::-;33789:332;;;;;:::o;34127:85::-;34172:7;34201:5;34190:16;;34127:85;;;:::o;34218:60::-;34246:3;34267:5;34260:12;;34218:60;;;:::o;34284:158::-;34342:9;34375:61;34393:42;34402:32;34428:5;34402:32;:::i;:::-;34393:42;:::i;:::-;34375:61;:::i;:::-;34362:74;;34284:158;;;:::o;34448:147::-;34543:45;34582:5;34543:45;:::i;:::-;34538:3;34531:58;34448:147;;:::o;34601:807::-;34850:4;34888:3;34877:9;34873:19;34865:27;;34902:71;34970:1;34959:9;34955:17;34946:6;34902:71;:::i;:::-;34983:72;35051:2;35040:9;35036:18;35027:6;34983:72;:::i;:::-;35065:80;35141:2;35130:9;35126:18;35117:6;35065:80;:::i;:::-;35155;35231:2;35220:9;35216:18;35207:6;35155:80;:::i;:::-;35245:73;35313:3;35302:9;35298:19;35289:6;35245:73;:::i;:::-;35328;35396:3;35385:9;35381:19;35372:6;35328:73;:::i;:::-;34601:807;;;;;;;;;:::o;35414:143::-;35471:5;35502:6;35496:13;35487:22;;35518:33;35545:5;35518:33;:::i;:::-;35414:143;;;;:::o;35563:663::-;35651:6;35659;35667;35716:2;35704:9;35695:7;35691:23;35687:32;35684:119;;;35722:79;;:::i;:::-;35684:119;35842:1;35867:64;35923:7;35914:6;35903:9;35899:22;35867:64;:::i;:::-;35857:74;;35813:128;35980:2;36006:64;36062:7;36053:6;36042:9;36038:22;36006:64;:::i;:::-;35996:74;;35951:129;36119:2;36145:64;36201:7;36192:6;36181:9;36177:22;36145:64;:::i;:::-;36135:74;;36090:129;35563:663;;;;;:::o;36232:225::-;36372:34;36368:1;36360:6;36356:14;36349:58;36441:8;36436:2;36428:6;36424:15;36417:33;36232:225;:::o;36463:366::-;36605:3;36626:67;36690:2;36685:3;36626:67;:::i;:::-;36619:74;;36702:93;36791:3;36702:93;:::i;:::-;36820:2;36815:3;36811:12;36804:19;;36463:366;;;:::o;36835:419::-;37001:4;37039:2;37028:9;37024:18;37016:26;;37088:9;37082:4;37078:20;37074:1;37063:9;37059:17;37052:47;37116:131;37242:4;37116:131;:::i;:::-;37108:139;;36835:419;;;:::o;37260:223::-;37400:34;37396:1;37388:6;37384:14;37377:58;37469:6;37464:2;37456:6;37452:15;37445:31;37260:223;:::o;37489:366::-;37631:3;37652:67;37716:2;37711:3;37652:67;:::i;:::-;37645:74;;37728:93;37817:3;37728:93;:::i;:::-;37846:2;37841:3;37837:12;37830:19;;37489:366;;;:::o;37861:419::-;38027:4;38065:2;38054:9;38050:18;38042:26;;38114:9;38108:4;38104:20;38100:1;38089:9;38085:17;38078:47;38142:131;38268:4;38142:131;:::i;:::-;38134:139;;37861:419;;;:::o;38286:221::-;38426:34;38422:1;38414:6;38410:14;38403:58;38495:4;38490:2;38482:6;38478:15;38471:29;38286:221;:::o;38513:366::-;38655:3;38676:67;38740:2;38735:3;38676:67;:::i;:::-;38669:74;;38752:93;38841:3;38752:93;:::i;:::-;38870:2;38865:3;38861:12;38854:19;;38513:366;;;:::o;38885:419::-;39051:4;39089:2;39078:9;39074:18;39066:26;;39138:9;39132:4;39128:20;39124:1;39113:9;39109:17;39102:47;39166:131;39292:4;39166:131;:::i;:::-;39158:139;;38885:419;;;:::o;39310:224::-;39450:34;39446:1;39438:6;39434:14;39427:58;39519:7;39514:2;39506:6;39502:15;39495:32;39310:224;:::o;39540:366::-;39682:3;39703:67;39767:2;39762:3;39703:67;:::i;:::-;39696:74;;39779:93;39868:3;39779:93;:::i;:::-;39897:2;39892:3;39888:12;39881:19;;39540:366;;;:::o;39912:419::-;40078:4;40116:2;40105:9;40101:18;40093:26;;40165:9;40159:4;40155:20;40151:1;40140:9;40136:17;40129:47;40193:131;40319:4;40193:131;:::i;:::-;40185:139;;39912:419;;;:::o;40337:222::-;40477:34;40473:1;40465:6;40461:14;40454:58;40546:5;40541:2;40533:6;40529:15;40522:30;40337:222;:::o;40565:366::-;40707:3;40728:67;40792:2;40787:3;40728:67;:::i;:::-;40721:74;;40804:93;40893:3;40804:93;:::i;:::-;40922:2;40917:3;40913:12;40906:19;;40565:366;;;:::o;40937:419::-;41103:4;41141:2;41130:9;41126:18;41118:26;;41190:9;41184:4;41180:20;41176:1;41165:9;41161:17;41154:47;41218:131;41344:4;41218:131;:::i;:::-;41210:139;;40937:419;;;:::o;41362:182::-;41502:34;41498:1;41490:6;41486:14;41479:58;41362:182;:::o;41550:366::-;41692:3;41713:67;41777:2;41772:3;41713:67;:::i;:::-;41706:74;;41789:93;41878:3;41789:93;:::i;:::-;41907:2;41902:3;41898:12;41891:19;;41550:366;;;:::o;41922:419::-;42088:4;42126:2;42115:9;42111:18;42103:26;;42175:9;42169:4;42165:20;42161:1;42150:9;42146:17;42139:47;42203:131;42329:4;42203:131;:::i;:::-;42195:139;;41922:419;;;:::o;42347:228::-;42487:34;42483:1;42475:6;42471:14;42464:58;42556:11;42551:2;42543:6;42539:15;42532:36;42347:228;:::o;42581:366::-;42723:3;42744:67;42808:2;42803:3;42744:67;:::i;:::-;42737:74;;42820:93;42909:3;42820:93;:::i;:::-;42938:2;42933:3;42929:12;42922:19;;42581:366;;;:::o;42953:419::-;43119:4;43157:2;43146:9;43142:18;43134:26;;43206:9;43200:4;43196:20;43192:1;43181:9;43177:17;43170:47;43234:131;43360:4;43234:131;:::i;:::-;43226:139;;42953:419;;;:::o;43378:236::-;43518:34;43514:1;43506:6;43502:14;43495:58;43587:19;43582:2;43574:6;43570:15;43563:44;43378:236;:::o;43620:366::-;43762:3;43783:67;43847:2;43842:3;43783:67;:::i;:::-;43776:74;;43859:93;43948:3;43859:93;:::i;:::-;43977:2;43972:3;43968:12;43961:19;;43620:366;;;:::o;43992:419::-;44158:4;44196:2;44185:9;44181:18;44173:26;;44245:9;44239:4;44235:20;44231:1;44220:9;44216:17;44209:47;44273:131;44399:4;44273:131;:::i;:::-;44265:139;;43992:419;;;:::o;44417:245::-;44557:34;44553:1;44545:6;44541:14;44534:58;44626:28;44621:2;44613:6;44609:15;44602:53;44417:245;:::o;44668:366::-;44810:3;44831:67;44895:2;44890:3;44831:67;:::i;:::-;44824:74;;44907:93;44996:3;44907:93;:::i;:::-;45025:2;45020:3;45016:12;45009:19;;44668:366;;;:::o;45040:419::-;45206:4;45244:2;45233:9;45229:18;45221:26;;45293:9;45287:4;45283:20;45279:1;45268:9;45264:17;45257:47;45321:131;45447:4;45321:131;:::i;:::-;45313:139;;45040:419;;;:::o;45465:229::-;45605:34;45601:1;45593:6;45589:14;45582:58;45674:12;45669:2;45661:6;45657:15;45650:37;45465:229;:::o;45700:366::-;45842:3;45863:67;45927:2;45922:3;45863:67;:::i;:::-;45856:74;;45939:93;46028:3;45939:93;:::i;:::-;46057:2;46052:3;46048:12;46041:19;;45700:366;;;:::o;46072:419::-;46238:4;46276:2;46265:9;46261:18;46253:26;;46325:9;46319:4;46315:20;46311:1;46300:9;46296:17;46289:47;46353:131;46479:4;46353:131;:::i;:::-;46345:139;;46072:419;;;:::o;46497:114::-;46564:6;46598:5;46592:12;46582:22;;46497:114;;;:::o;46617:184::-;46716:11;46750:6;46745:3;46738:19;46790:4;46785:3;46781:14;46766:29;;46617:184;;;;:::o;46807:132::-;46874:4;46897:3;46889:11;;46927:4;46922:3;46918:14;46910:22;;46807:132;;;:::o;46945:108::-;47022:24;47040:5;47022:24;:::i;:::-;47017:3;47010:37;46945:108;;:::o;47059:179::-;47128:10;47149:46;47191:3;47183:6;47149:46;:::i;:::-;47227:4;47222:3;47218:14;47204:28;;47059:179;;;;:::o;47244:113::-;47314:4;47346;47341:3;47337:14;47329:22;;47244:113;;;:::o;47393:732::-;47512:3;47541:54;47589:5;47541:54;:::i;:::-;47611:86;47690:6;47685:3;47611:86;:::i;:::-;47604:93;;47721:56;47771:5;47721:56;:::i;:::-;47800:7;47831:1;47816:284;47841:6;47838:1;47835:13;47816:284;;;47917:6;47911:13;47944:63;48003:3;47988:13;47944:63;:::i;:::-;47937:70;;48030:60;48083:6;48030:60;:::i;:::-;48020:70;;47876:224;47863:1;47860;47856:9;47851:14;;47816:284;;;47820:14;48116:3;48109:10;;47517:608;;;47393:732;;;;:::o;48131:831::-;48394:4;48432:3;48421:9;48417:19;48409:27;;48446:71;48514:1;48503:9;48499:17;48490:6;48446:71;:::i;:::-;48527:80;48603:2;48592:9;48588:18;48579:6;48527:80;:::i;:::-;48654:9;48648:4;48644:20;48639:2;48628:9;48624:18;48617:48;48682:108;48785:4;48776:6;48682:108;:::i;:::-;48674:116;;48800:72;48868:2;48857:9;48853:18;48844:6;48800:72;:::i;:::-;48882:73;48950:3;48939:9;48935:19;48926:6;48882:73;:::i;:::-;48131:831;;;;;;;;:::o

Swarm Source

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