Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 $HINU
Holders
34
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.008048883711670803 $HINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-01 */ // SPDX-License-Identifier: MIT // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity 0.8.20; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } contract Token is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; bool isTradingEnabled; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Hybrid Inu"; string private _symbol = "$HINU"; uint8 private _decimals = 18; struct BuyFee { uint16 marketingFee; uint16 reflectionFee; } struct SellFee { uint16 marketingFee; uint16 reflectionFee; } struct TransferFee { uint16 marketingFee; uint16 reflectionFee; } BuyFee public buyFee; SellFee public sellFee; TransferFee public transferFee; uint16 private _reflectionFee; uint16 private _marketingFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public marketingWallet; address public constant deadWallet = address(0xdead); bool internal inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 private swapTokensAtAmount = 1000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; buyFee.marketingFee = 3; buyFee.reflectionFee = 2; transferFee.marketingFee =3; transferFee.reflectionFee = 2; sellFee.marketingFee = 3; sellFee.reflectionFee = 2; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //uniswap Router ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; marketingWallet = 0xe7E4a3986E9d60Fb397887e54EB7EFE7bB2B45DF; // marketing wallet //exclude owner, marketing, dead address and this contract from fee/limits _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[deadWallet] = true; _isExcludedFromFee[marketingWallet] = true; emit Transfer(address(0), _msgSender(), _tTotal ); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[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); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } ///@notice Returns if a address is exlcluded from rewards or not function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } ///@notice Returns total fees reflected till date function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } ///@dev exclude a particular address from reward ///@param account: address to be excluded from reward function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } ///@dev include a address in reward ///@param account: address to be added in reward mapping again function includeInReward (address account) external onlyOwner { require(_isExcluded [account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account){ //updating _rOwned to make sure the balances stay the same if (_tOwned [account] > 0) { uint256 newrOwned = _tOwned [account].mul(_getRate()); _rTotal = _rTotal.sub(_rOwned [account]-newrOwned); _rOwned[account] = newrOwned; } else{ _rOwned [account] = 0; } _tOwned[account]= 0; _excluded [i] = _excluded [_excluded.length-1]; _isExcluded [account] = false; _excluded.pop(); break; } } } ///@dev exclude a address from fees/limits ///@param account - address or wallet to be excluded function excludeFromFee(address account) external onlyOwner { require (!_isExcludedFromFee[account], "already excluded"); _isExcludedFromFee[account] = true; } ///@dev include a address in fees if it's excluded ///@param account - wallet or account address to include in fee function includeInFee(address account) external onlyOwner { require (_isExcludedFromFee[account], "already included"); _isExcludedFromFee[account] = false; } ///@dev set buy fees ///@param marketing - set marketing fees ///@param ref - set reflection fees ///Requirements -- /// total buy fees must be less than equal to 5 percent. function setBuyFee( uint16 marketing, uint16 ref) external onlyOwner { buyFee.marketingFee = marketing; buyFee.reflectionFee = ref; uint256 totalBuyFee = marketing + ref ; require(totalBuyFee <= 5, "max buy fees limit is 5%"); } ///@dev set sell fees ///@param marketing - set marketing fees ///@param ref - set reflection fees ///Requirements -- /// total sell fees must be less than equal to 5 percent. function setSellFee( uint16 marketing, uint16 ref ) external onlyOwner { sellFee.marketingFee = marketing; sellFee.reflectionFee = ref; uint256 totalSellFee = ref + marketing; require(totalSellFee <= 5, "max sell fees limit is 5%"); } ///@dev set transfer fees ///@param marketing - set marketing fees ///@param ref - set reflection fees ///Requirements -- /// total transfer fees must be less than equal to 5 percent. function setTransferFees( uint16 marketing, uint16 ref ) external onlyOwner { sellFee.marketingFee = marketing; sellFee.reflectionFee = ref; uint256 totalTransferFee = ref + marketing; require(totalTransferFee <= 5, "max transfer fees limit is 5%"); } ///@dev update the marketing wallet ///@param wallet -- new wallet for marketing to receive eth ///Requirements -- /// zero address is not allowed function updateMarketingWallet (address wallet) external onlyOwner { require (wallet != address(0)); marketingWallet = wallet; } ///@dev set minimum threshold after which collected fees will be swapped for eth ///@param numTokens - number of tokens function setSwapTokensAtAmount(uint256 numTokens) external onlyOwner { swapTokensAtAmount = numTokens * 10**18; } ///@dev enabled or disable marketing fees to eth conversion ///@param _enabled - bool value, true means tokens get swapped for eth, else not function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } ///@notice owner can claim stucked erc20 token from smartcontract ///@param _token - address of token to be rescued function claimStuckTokens(address _token) external onlyOwner { IERC20 erc20token = IERC20(_token); uint256 balance = erc20token.balanceOf(address(this)); erc20token.transfer(owner(), balance); } ///@notice owner can claim any stucked ether from smartcontract function claimETH() external onlyOwner { (bool sent,) = owner().call{value: address(this).balance}(""); require (sent, "eth transfer failed"); } //to recieve ETH from uniswapV2Router when swaping receive() external payable { this; } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tMarketing, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateReflectionFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); tTransferAmount = tTransferAmount; return (tTransferAmount, tFee, tMarketing); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(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 = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } ///@notice owner enable the trading, once enabled it can never be turned off function enableTrading () external onlyOwner { require (!isTradingEnabled, "already enabled"); isTradingEnabled = true; } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div(10**2); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div(10**2); } function removeAllFee() private { _reflectionFee = 0; _marketingFee = 0; } function setBuy() private { _reflectionFee = buyFee.reflectionFee; _marketingFee = buyFee.marketingFee; } function setSell() private { _reflectionFee = sellFee.reflectionFee; _marketingFee = sellFee.marketingFee; } function setTransfer() private { _reflectionFee = transferFee.reflectionFee; _marketingFee = transferFee.reflectionFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() || !_isExcludedFromFee[from] ){ require (isTradingEnabled, "trading is not live"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { swapTokensForEth(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take reflection, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, marketingWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { removeAllFee(); if (takeFee) { ///buy if (sender == uniswapV2Pair) { setBuy(); } ///sell else if (recipient == uniswapV2Pair) { setSell(); } ///transfer else { setTransfer(); } } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"reflectionFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"reflectionFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":[],"name":"transferFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"reflectionFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526c0c9f2c9cd04674edea400000006008556008545f19620000269190620007b9565b5f196200003491906200081d565b6009556040518060400160405280600a81526020017f48796272696420496e7500000000000000000000000000000000000000000000815250600b90816200007d919062000ab2565b506040518060400160405280600581526020017f2448494e55000000000000000000000000000000000000000000000000000000815250600c9081620000c4919062000ab2565b506012600d5f6101000a81548160ff021916908360ff1602179055506001601360156101000a81548160ff021916908315150217905550683635c9adc5dea0000060145534801562000114575f80fd5b5062000135620001296200069460201b60201c565b6200069b60201b60201c565b60095460015f6200014b6200069460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506003600e5f015f6101000a81548161ffff021916908361ffff1602179055506002600e5f0160026101000a81548161ffff021916908361ffff160217905550600360105f015f6101000a81548161ffff021916908361ffff160217905550600260105f0160026101000a81548161ffff021916908361ffff1602179055506003600f5f015f6101000a81548161ffff021916908361ffff1602179055506002600f5f0160026101000a81548161ffff021916908361ffff1602179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002cd919062000bfb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000333573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000359919062000bfb565b6040518363ffffffff1660e01b81526004016200037892919062000c3c565b6020604051808303815f875af115801562000395573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003bb919062000bfb565b60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e7e4a3986e9d60fb397887e54eb7efe7bb2b45df60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160045f620004a46200075c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160045f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620006256200069460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000685919062000c78565b60405180910390a35062000c93565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620007c58262000783565b9150620007d28362000783565b925082620007e557620007e46200078c565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620008298262000783565b9150620008368362000783565b9250828203905081811115620008515762000850620007f0565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620008d357607f821691505b602082108103620008e957620008e86200088e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200094d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000910565b62000959868362000910565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200099a620009946200098e8462000783565b62000971565b62000783565b9050919050565b5f819050919050565b620009b5836200097a565b620009cd620009c482620009a1565b8484546200091c565b825550505050565b5f90565b620009e3620009d5565b620009f0818484620009aa565b505050565b5b8181101562000a175762000a0b5f82620009d9565b600181019050620009f6565b5050565b601f82111562000a665762000a3081620008ef565b62000a3b8462000901565b8101602085101562000a4b578190505b62000a6362000a5a8562000901565b830182620009f5565b50505b505050565b5f82821c905092915050565b5f62000a885f198460080262000a6b565b1980831691505092915050565b5f62000aa2838362000a77565b9150826002028217905092915050565b62000abd8262000857565b67ffffffffffffffff81111562000ad95762000ad862000861565b5b62000ae58254620008bb565b62000af282828562000a1b565b5f60209050601f83116001811462000b28575f841562000b13578287015190505b62000b1f858262000a95565b86555062000b8e565b601f19841662000b3886620008ef565b5f5b8281101562000b615784890151825560018201915060208501945060208101905062000b3a565b8683101562000b81578489015162000b7d601f89168262000a77565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bc58262000b9a565b9050919050565b62000bd78162000bb9565b811462000be2575f80fd5b50565b5f8151905062000bf58162000bcc565b92915050565b5f6020828403121562000c135762000c1262000b96565b5b5f62000c228482850162000be5565b91505092915050565b62000c368162000bb9565b82525050565b5f60408201905062000c515f83018562000c2b565b62000c60602083018462000c2b565b9392505050565b62000c728162000783565b82525050565b5f60208201905062000c8d5f83018462000c67565b92915050565b61587a8062000ca15f395ff3fe608060405260043610610249575f3560e01c806370a0823111610138578063a9059cbb116100b5578063c49b9a8011610079578063c49b9a801461087d578063dd62ed3e146108a5578063ea2f0b37146108e1578063ec2a520a14610909578063f2fde38b14610931578063f9d0831a1461095957610250565b8063a9059cbb1461079e578063aacebbe3146107da578063acb2ad6f14610802578063afa4f3b21461082d578063b7b69ec51461085557610250565b806388f82020116100fc57806388f82020146106bc5780638a8c523c146106f85780638da5cb5b1461070e57806395d89b4114610738578063a457c2d71461076257610250565b806370a08231146105ee578063715018a61461062a57806375f0a874146106405780637afad2491461066a57806385141a771461069257610250565b806339509351116101c657806349bd5a5e1161018a57806349bd5a5e146105205780634a74bb021461054a57806352390c02146105745780635342acb41461059c57806367272999146105d857610250565b8063395093511461042d5780633bd5d17314610469578063437823ec146104915780634549b039146104b957806347062402146104f557610250565b806323b872dd1161020d57806323b872dd146103385780632b14ca56146103745780632d8381191461039f578063313ce567146103db5780633685d4191461040557610250565b806306fdde0314610254578063095ea7b31461027e57806313114a9d146102ba5780631694505e146102e457806318160ddd1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b50610268610981565b60405161027591906145d5565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190614686565b610a11565b6040516102b191906146de565b60405180910390f35b3480156102c5575f80fd5b506102ce610a2e565b6040516102db9190614706565b60405180910390f35b3480156102ef575f80fd5b506102f8610a37565b604051610305919061477a565b60405180910390f35b348015610319575f80fd5b50610322610a5d565b60405161032f9190614706565b60405180910390f35b348015610343575f80fd5b5061035e60048036038101906103599190614793565b610a66565b60405161036b91906146de565b60405180910390f35b34801561037f575f80fd5b50610388610b3a565b6040516103969291906147ff565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c09190614826565b610b65565b6040516103d29190614706565b60405180910390f35b3480156103e6575f80fd5b506103ef610bd1565b6040516103fc919061486c565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190614885565b610be6565b005b348015610438575f80fd5b50610453600480360381019061044e9190614686565b611091565b60405161046091906146de565b60405180910390f35b348015610474575f80fd5b5061048f600480360381019061048a9190614826565b61113f565b005b34801561049c575f80fd5b506104b760048036038101906104b29190614885565b6112b1565b005b3480156104c4575f80fd5b506104df60048036038101906104da91906148da565b61140f565b6040516104ec9190614706565b60405180910390f35b348015610500575f80fd5b50610509611490565b6040516105179291906147ff565b60405180910390f35b34801561052b575f80fd5b506105346114bb565b6040516105419190614927565b60405180910390f35b348015610555575f80fd5b5061055e6114e0565b60405161056b91906146de565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190614885565b6114f3565b005b3480156105a7575f80fd5b506105c260048036038101906105bd9190614885565b61177e565b6040516105cf91906146de565b60405180910390f35b3480156105e3575f80fd5b506105ec6117d0565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190614885565b6118fe565b6040516106219190614706565b60405180910390f35b348015610635575f80fd5b5061063e6119e1565b005b34801561064b575f80fd5b50610654611a68565b6040516106619190614927565b60405180910390f35b348015610675575f80fd5b50610690600480360381019061068b919061496a565b611a8d565b005b34801561069d575f80fd5b506106a6611ba2565b6040516106b39190614927565b60405180910390f35b3480156106c7575f80fd5b506106e260048036038101906106dd9190614885565b611ba8565b6040516106ef91906146de565b60405180910390f35b348015610703575f80fd5b5061070c611bfa565b005b348015610719575f80fd5b50610722611ce1565b60405161072f9190614927565b60405180910390f35b348015610743575f80fd5b5061074c611d08565b60405161075991906145d5565b60405180910390f35b34801561076d575f80fd5b5061078860048036038101906107839190614686565b611d98565b60405161079591906146de565b60405180910390f35b3480156107a9575f80fd5b506107c460048036038101906107bf9190614686565b611e60565b6040516107d191906146de565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb9190614885565b611e7d565b005b34801561080d575f80fd5b50610816611f73565b6040516108249291906147ff565b60405180910390f35b348015610838575f80fd5b50610853600480360381019061084e9190614826565b611f9e565b005b348015610860575f80fd5b5061087b6004803603810190610876919061496a565b612037565b005b348015610888575f80fd5b506108a3600480360381019061089e91906149a8565b61214c565b005b3480156108b0575f80fd5b506108cb60048036038101906108c691906149d3565b61221c565b6040516108d89190614706565b60405180910390f35b3480156108ec575f80fd5b5061090760048036038101906109029190614885565b61229e565b005b348015610914575f80fd5b5061092f600480360381019061092a919061496a565b6123fa565b005b34801561093c575f80fd5b5061095760048036038101906109529190614885565b61250f565b005b348015610964575f80fd5b5061097f600480360381019061097a9190614885565b612605565b005b6060600b805461099090614a3e565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614a3e565b8015610a075780601f106109de57610100808354040283529160200191610a07565b820191905f5260205f20905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b5f610a24610a1d612788565b848461278f565b6001905092915050565b5f600a54905090565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600854905090565b5f610a72848484612952565b610b2f84610a7e612788565b610b2a856040518060600160405280602881526020016157f86028913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ae1612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cb99092919063ffffffff16565b61278f565b600190509392505050565b600f805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b5f600954821115610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614ade565b60405180910390fd5b5f610bb4612d0d565b9050610bc98184612d3690919063ffffffff16565b915050919050565b5f600d5f9054906101000a900460ff16905090565b610bee612788565b73ffffffffffffffffffffffffffffffffffffffff16610c0c611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614b46565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290614bae565b60405180910390fd5b5f5b60078054905081101561108d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d2557610d24614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361107a575f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115610eb2575f610e05610db9612d0d565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d4b90919063ffffffff16565b9050610e648160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e539190614c26565b600954612d6090919063ffffffff16565b6009819055508060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050610ef5565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060076001600780549050610f4b9190614c26565b81548110610f5c57610f5b614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610f9857610f97614bcc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600780548061104357611042614c59565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561108d565b808061108590614c86565b915050610ced565b5050565b5f61113561109d612788565b846111308560035f6110ad612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b61278f565b6001905092915050565b5f611148612788565b905060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90614d3d565b60405180910390fd5b5f6111de83612d8a565b505050505090506112358160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061128b81600954612d6090919063ffffffff16565b6009819055506112a683600a54612d7590919063ffffffff16565b600a81905550505050565b6112b9612788565b73ffffffffffffffffffffffffffffffffffffffff166112d7611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614b46565b60405180910390fd5b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614da5565b60405180910390fd5b600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600854831115611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614e0d565b60405180910390fd5b81611474575f61146484612d8a565b505050505090508091505061148a565b5f61147e84612d8a565b50505050915050809150505b92915050565b600e805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360159054906101000a900460ff1681565b6114fb612788565b73ffffffffffffffffffffffffffffffffffffffff16611519611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690614b46565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090614bae565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156116c65761168460015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b65565b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6117d8612788565b73ffffffffffffffffffffffffffffffffffffffff166117f6611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390614b46565b60405180910390fd5b5f611855611ce1565b73ffffffffffffffffffffffffffffffffffffffff164760405161187890614e58565b5f6040518083038185875af1925050503d805f81146118b2576040519150601f19603f3d011682016040523d82523d5f602084013e6118b7565b606091505b50509050806118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614eb6565b60405180910390fd5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119935760025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506119dc565b6119d960015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b65565b90505b919050565b6119e9612788565b73ffffffffffffffffffffffffffffffffffffffff16611a07611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490614b46565b60405180910390fd5b611a665f612ddf565b565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a95612788565b73ffffffffffffffffffffffffffffffffffffffff16611ab3611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614b46565b60405180910390fd5b81600e5f015f6101000a81548161ffff021916908361ffff16021790555080600e5f0160026101000a81548161ffff021916908361ffff1602179055505f8183611b539190614ed4565b61ffff1690506005811115611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490614f53565b60405180910390fd5b505050565b61dead81565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611c02612788565b73ffffffffffffffffffffffffffffffffffffffff16611c20611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90614b46565b60405180910390fd5b60065f9054906101000a900460ff1615611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90614fbb565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611d1790614a3e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4390614a3e565b8015611d8e5780601f10611d6557610100808354040283529160200191611d8e565b820191905f5260205f20905b815481529060010190602001808311611d7157829003601f168201915b5050505050905090565b5f611e56611da4612788565b84611e51856040518060600160405280602581526020016158206025913960035f611dcd612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cb99092919063ffffffff16565b61278f565b6001905092915050565b5f611e73611e6c612788565b8484612952565b6001905092915050565b611e85612788565b73ffffffffffffffffffffffffffffffffffffffff16611ea3611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614b46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f30575f80fd5b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6010805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b611fa6612788565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614b46565b60405180910390fd5b670de0b6b3a76400008161202e9190614fd9565b60148190555050565b61203f612788565b73ffffffffffffffffffffffffffffffffffffffff1661205d611ce1565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614b46565b60405180910390fd5b81600f5f015f6101000a81548161ffff021916908361ffff16021790555080600f5f0160026101000a81548161ffff021916908361ffff1602179055505f82826120fd9190614ed4565b61ffff1690506005811115612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90615064565b60405180910390fd5b505050565b612154612788565b73ffffffffffffffffffffffffffffffffffffffff16612172611ce1565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90614b46565b60405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161221191906146de565b60405180910390a150565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122a6612788565b73ffffffffffffffffffffffffffffffffffffffff166122c4611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190614b46565b60405180910390fd5b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906150cc565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b612402612788565b73ffffffffffffffffffffffffffffffffffffffff16612420611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90614b46565b60405180910390fd5b81600f5f015f6101000a81548161ffff021916908361ffff16021790555080600f5f0160026101000a81548161ffff021916908361ffff1602179055505f82826124c09190614ed4565b61ffff169050600581111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190615134565b60405180910390fd5b505050565b612517612788565b73ffffffffffffffffffffffffffffffffffffffff16612535611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614b46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f0906151c2565b60405180910390fd5b61260281612ddf565b50565b61260d612788565b73ffffffffffffffffffffffffffffffffffffffff1661262b611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267890614b46565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126bf9190614927565b602060405180830381865afa1580156126da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fe91906151f4565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612724611ce1565b836040518363ffffffff1660e01b815260040161274292919061521f565b6020604051808303815f875af115801561275e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612782919061525a565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f4906152f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361286b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286290615383565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129459190614706565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790615411565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a259061549f565b60405180910390fd5b5f8111612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a679061552d565b60405180910390fd5b612a78611ce1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580612af9575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4d5760065f9054906101000a900460ff16612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390615595565b60405180910390fd5b5b5f612b57306118fe565b90505f6014548210159050808015612b7c5750601360149054906101000a900460ff16155b8015612bd5575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bed5750601360159054906101000a900460ff165b15612bfc57612bfb82612ea0565b5b5f6001905060045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c9c575060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ca5575f90505b612cb18686868461312f565b505050505050565b5f838311158290612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf791906145d5565b60405180910390fd5b5082840390509392505050565b5f805f612d186134e7565b91509150612d2f8183612d3690919063ffffffff16565b9250505090565b5f8183612d4391906155e0565b905092915050565b5f8183612d589190614fd9565b905092915050565b5f8183612d6d9190614c26565b905092915050565b5f8183612d829190615610565b905092915050565b5f805f805f805f805f612d9c8a613782565b9250925092505f805f612db88d8686612db3612d0d565b6137d8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612ed757612ed6615643565b5b604051908082528060200260200182016040528015612f055781602001602082028036833780820191505090505b50905030815f81518110612f1c57612f1b614bcc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fe59190615684565b81600181518110612ff957612ff8614bcc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061306030601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278f565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130e495949392919061579f565b5f604051808303815f87803b1580156130fb575f80fd5b505af115801561310d573d5f803e3d5ffd5b50505050505f601360146101000a81548160ff02191690831515021790555050565b61313761385c565b801561320a5760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361319e57613199613897565b613209565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131ff576131fa6138f5565b613208565b613207613953565b5b5b5b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132a7575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132bc576132b78484846139b2565b6134e1565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613359575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561336e57613369848484613c03565b6134e0565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561340c575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134215761341c848484613e54565b6134df565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134bd575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156134d2576134cd848484614014565b6134de565b6134dd848484613e54565b5b5b5b5b50505050565b5f805f60095490505f60085490505f5b600780549050811015613745578260015f6007848154811061351c5761351b614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061360157508160025f6007848154811061359d5761359c614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15613618576009546008549450945050505061377e565b6136a360015f6007848154811061363257613631614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612d6090919063ffffffff16565b925061373060025f600784815481106136bf576136be614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612d6090919063ffffffff16565b9150808061373d90614c86565b9150506134f7565b5061375d600854600954612d3690919063ffffffff16565b8210156137755760095460085493509350505061377e565b81819350935050505b9091565b5f805f8061378f856142f6565b90505f61379b86614337565b90505f6137c3826137b5858a612d6090919063ffffffff16565b612d6090919063ffffffff16565b90508083839550955095505050509193909250565b5f805f806137ef8589612d4b90919063ffffffff16565b90505f6138058689612d4b90919063ffffffff16565b90505f61381b8789612d4b90919063ffffffff16565b90505f613843826138358587612d6090919063ffffffff16565b612d6090919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f60115f6101000a81548161ffff021916908361ffff1602179055505f601160026101000a81548161ffff021916908361ffff160217905550565b600e5f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff160217905550600e5f015f9054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b600f5f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff160217905550600f5f015f9054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b60105f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff16021790555060105f0160029054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b5f805f805f806139c187612d8a565b955095509550955095509550613a1d8760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613aae8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b3f8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b8981614379565b613b938483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bf09190614706565b60405180910390a3505050505050505050565b5f805f805f80613c1287612d8a565b955095509550955095509550613c6e8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613cff8360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d908560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613dda81614379565b613de48483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e419190614706565b60405180910390a3505050505050505050565b5f805f805f80613e6387612d8a565b955095509550955095509550613ebf8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f508560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f9a81614379565b613fa48483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140019190614706565b60405180910390a3505050505050505050565b5f805f805f8061402387612d8a565b95509550955095509550955061407f8760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141108660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141a18360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506142328560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061427c81614379565b6142868483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142e39190614706565b60405180910390a3505050505050505050565b5f614330606461432260115f9054906101000a900461ffff1661ffff1685612d4b90919063ffffffff16565b612d3690919063ffffffff16565b9050919050565b5f6143726064614364601160029054906101000a900461ffff1661ffff1685612d4b90919063ffffffff16565b612d3690919063ffffffff16565b9050919050565b5f614382612d0d565b90505f6143988284612d4b90919063ffffffff16565b90506143ea8160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561450c576144ca8360025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61452682600954612d6090919063ffffffff16565b60098190555061454181600a54612d7590919063ffffffff16565b600a819055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614582578082015181840152602081019050614567565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6145a78261454b565b6145b18185614555565b93506145c1818560208601614565565b6145ca8161458d565b840191505092915050565b5f6020820190508181035f8301526145ed818461459d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614622826145f9565b9050919050565b61463281614618565b811461463c575f80fd5b50565b5f8135905061464d81614629565b92915050565b5f819050919050565b61466581614653565b811461466f575f80fd5b50565b5f813590506146808161465c565b92915050565b5f806040838503121561469c5761469b6145f5565b5b5f6146a98582860161463f565b92505060206146ba85828601614672565b9150509250929050565b5f8115159050919050565b6146d8816146c4565b82525050565b5f6020820190506146f15f8301846146cf565b92915050565b61470081614653565b82525050565b5f6020820190506147195f8301846146f7565b92915050565b5f819050919050565b5f61474261473d614738846145f9565b61471f565b6145f9565b9050919050565b5f61475382614728565b9050919050565b5f61476482614749565b9050919050565b6147748161475a565b82525050565b5f60208201905061478d5f83018461476b565b92915050565b5f805f606084860312156147aa576147a96145f5565b5b5f6147b78682870161463f565b93505060206147c88682870161463f565b92505060406147d986828701614672565b9150509250925092565b5f61ffff82169050919050565b6147f9816147e3565b82525050565b5f6040820190506148125f8301856147f0565b61481f60208301846147f0565b9392505050565b5f6020828403121561483b5761483a6145f5565b5b5f61484884828501614672565b91505092915050565b5f60ff82169050919050565b61486681614851565b82525050565b5f60208201905061487f5f83018461485d565b92915050565b5f6020828403121561489a576148996145f5565b5b5f6148a78482850161463f565b91505092915050565b6148b9816146c4565b81146148c3575f80fd5b50565b5f813590506148d4816148b0565b92915050565b5f80604083850312156148f0576148ef6145f5565b5b5f6148fd85828601614672565b925050602061490e858286016148c6565b9150509250929050565b61492181614618565b82525050565b5f60208201905061493a5f830184614918565b92915050565b614949816147e3565b8114614953575f80fd5b50565b5f8135905061496481614940565b92915050565b5f80604083850312156149805761497f6145f5565b5b5f61498d85828601614956565b925050602061499e85828601614956565b9150509250929050565b5f602082840312156149bd576149bc6145f5565b5b5f6149ca848285016148c6565b91505092915050565b5f80604083850312156149e9576149e86145f5565b5b5f6149f68582860161463f565b9250506020614a078582860161463f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614a5557607f821691505b602082108103614a6857614a67614a11565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614ac8602a83614555565b9150614ad382614a6e565b604082019050919050565b5f6020820190508181035f830152614af581614abc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614b30602083614555565b9150614b3b82614afc565b602082019050919050565b5f6020820190508181035f830152614b5d81614b24565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614b98601b83614555565b9150614ba382614b64565b602082019050919050565b5f6020820190508181035f830152614bc581614b8c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614c3082614653565b9150614c3b83614653565b9250828203905081811115614c5357614c52614bf9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614c9082614653565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614cc257614cc1614bf9565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f614d27602c83614555565b9150614d3282614ccd565b604082019050919050565b5f6020820190508181035f830152614d5481614d1b565b9050919050565b7f616c7265616479206578636c75646564000000000000000000000000000000005f82015250565b5f614d8f601083614555565b9150614d9a82614d5b565b602082019050919050565b5f6020820190508181035f830152614dbc81614d83565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614df7601f83614555565b9150614e0282614dc3565b602082019050919050565b5f6020820190508181035f830152614e2481614deb565b9050919050565b5f81905092915050565b50565b5f614e435f83614e2b565b9150614e4e82614e35565b5f82019050919050565b5f614e6282614e38565b9150819050919050565b7f657468207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f614ea0601383614555565b9150614eab82614e6c565b602082019050919050565b5f6020820190508181035f830152614ecd81614e94565b9050919050565b5f614ede826147e3565b9150614ee9836147e3565b9250828201905061ffff811115614f0357614f02614bf9565b5b92915050565b7f6d6178206275792066656573206c696d697420697320352500000000000000005f82015250565b5f614f3d601883614555565b9150614f4882614f09565b602082019050919050565b5f6020820190508181035f830152614f6a81614f31565b9050919050565b7f616c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f614fa5600f83614555565b9150614fb082614f71565b602082019050919050565b5f6020820190508181035f830152614fd281614f99565b9050919050565b5f614fe382614653565b9150614fee83614653565b9250828202614ffc81614653565b9150828204841483151761501357615012614bf9565b5b5092915050565b7f6d6178207472616e736665722066656573206c696d69742069732035250000005f82015250565b5f61504e601d83614555565b91506150598261501a565b602082019050919050565b5f6020820190508181035f83015261507b81615042565b9050919050565b7f616c726561647920696e636c75646564000000000000000000000000000000005f82015250565b5f6150b6601083614555565b91506150c182615082565b602082019050919050565b5f6020820190508181035f8301526150e3816150aa565b9050919050565b7f6d61782073656c6c2066656573206c696d6974206973203525000000000000005f82015250565b5f61511e601983614555565b9150615129826150ea565b602082019050919050565b5f6020820190508181035f83015261514b81615112565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151ac602683614555565b91506151b782615152565b604082019050919050565b5f6020820190508181035f8301526151d9816151a0565b9050919050565b5f815190506151ee8161465c565b92915050565b5f60208284031215615209576152086145f5565b5b5f615216848285016151e0565b91505092915050565b5f6040820190506152325f830185614918565b61523f60208301846146f7565b9392505050565b5f81519050615254816148b0565b92915050565b5f6020828403121561526f5761526e6145f5565b5b5f61527c84828501615246565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152df602483614555565b91506152ea82615285565b604082019050919050565b5f6020820190508181035f83015261530c816152d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61536d602283614555565b915061537882615313565b604082019050919050565b5f6020820190508181035f83015261539a81615361565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6153fb602583614555565b9150615406826153a1565b604082019050919050565b5f6020820190508181035f830152615428816153ef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615489602383614555565b91506154948261542f565b604082019050919050565b5f6020820190508181035f8301526154b68161547d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f615517602983614555565b9150615522826154bd565b604082019050919050565b5f6020820190508181035f8301526155448161550b565b9050919050565b7f74726164696e67206973206e6f74206c697665000000000000000000000000005f82015250565b5f61557f601383614555565b915061558a8261554b565b602082019050919050565b5f6020820190508181035f8301526155ac81615573565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6155ea82614653565b91506155f583614653565b925082615605576156046155b3565b5b828204905092915050565b5f61561a82614653565b915061562583614653565b925082820190508082111561563d5761563c614bf9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061567e81614629565b92915050565b5f60208284031215615699576156986145f5565b5b5f6156a684828501615670565b91505092915050565b5f819050919050565b5f6156d26156cd6156c8846156af565b61471f565b614653565b9050919050565b6156e2816156b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61571a81614618565b82525050565b5f61572b8383615711565b60208301905092915050565b5f602082019050919050565b5f61574d826156e8565b61575781856156f2565b935061576283615702565b805f5b838110156157925781516157798882615720565b975061578483615737565b925050600181019050615765565b5085935050505092915050565b5f60a0820190506157b25f8301886146f7565b6157bf60208301876156d9565b81810360408301526157d18186615743565b90506157e06060830185614918565b6157ed60808301846146f7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208426506b27af2920bc944974afbd417b154812aefb19a25602b87f141591c8cf64736f6c63430008140033
Deployed Bytecode
0x608060405260043610610249575f3560e01c806370a0823111610138578063a9059cbb116100b5578063c49b9a8011610079578063c49b9a801461087d578063dd62ed3e146108a5578063ea2f0b37146108e1578063ec2a520a14610909578063f2fde38b14610931578063f9d0831a1461095957610250565b8063a9059cbb1461079e578063aacebbe3146107da578063acb2ad6f14610802578063afa4f3b21461082d578063b7b69ec51461085557610250565b806388f82020116100fc57806388f82020146106bc5780638a8c523c146106f85780638da5cb5b1461070e57806395d89b4114610738578063a457c2d71461076257610250565b806370a08231146105ee578063715018a61461062a57806375f0a874146106405780637afad2491461066a57806385141a771461069257610250565b806339509351116101c657806349bd5a5e1161018a57806349bd5a5e146105205780634a74bb021461054a57806352390c02146105745780635342acb41461059c57806367272999146105d857610250565b8063395093511461042d5780633bd5d17314610469578063437823ec146104915780634549b039146104b957806347062402146104f557610250565b806323b872dd1161020d57806323b872dd146103385780632b14ca56146103745780632d8381191461039f578063313ce567146103db5780633685d4191461040557610250565b806306fdde0314610254578063095ea7b31461027e57806313114a9d146102ba5780631694505e146102e457806318160ddd1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b50610268610981565b60405161027591906145d5565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190614686565b610a11565b6040516102b191906146de565b60405180910390f35b3480156102c5575f80fd5b506102ce610a2e565b6040516102db9190614706565b60405180910390f35b3480156102ef575f80fd5b506102f8610a37565b604051610305919061477a565b60405180910390f35b348015610319575f80fd5b50610322610a5d565b60405161032f9190614706565b60405180910390f35b348015610343575f80fd5b5061035e60048036038101906103599190614793565b610a66565b60405161036b91906146de565b60405180910390f35b34801561037f575f80fd5b50610388610b3a565b6040516103969291906147ff565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c09190614826565b610b65565b6040516103d29190614706565b60405180910390f35b3480156103e6575f80fd5b506103ef610bd1565b6040516103fc919061486c565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190614885565b610be6565b005b348015610438575f80fd5b50610453600480360381019061044e9190614686565b611091565b60405161046091906146de565b60405180910390f35b348015610474575f80fd5b5061048f600480360381019061048a9190614826565b61113f565b005b34801561049c575f80fd5b506104b760048036038101906104b29190614885565b6112b1565b005b3480156104c4575f80fd5b506104df60048036038101906104da91906148da565b61140f565b6040516104ec9190614706565b60405180910390f35b348015610500575f80fd5b50610509611490565b6040516105179291906147ff565b60405180910390f35b34801561052b575f80fd5b506105346114bb565b6040516105419190614927565b60405180910390f35b348015610555575f80fd5b5061055e6114e0565b60405161056b91906146de565b60405180910390f35b34801561057f575f80fd5b5061059a60048036038101906105959190614885565b6114f3565b005b3480156105a7575f80fd5b506105c260048036038101906105bd9190614885565b61177e565b6040516105cf91906146de565b60405180910390f35b3480156105e3575f80fd5b506105ec6117d0565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190614885565b6118fe565b6040516106219190614706565b60405180910390f35b348015610635575f80fd5b5061063e6119e1565b005b34801561064b575f80fd5b50610654611a68565b6040516106619190614927565b60405180910390f35b348015610675575f80fd5b50610690600480360381019061068b919061496a565b611a8d565b005b34801561069d575f80fd5b506106a6611ba2565b6040516106b39190614927565b60405180910390f35b3480156106c7575f80fd5b506106e260048036038101906106dd9190614885565b611ba8565b6040516106ef91906146de565b60405180910390f35b348015610703575f80fd5b5061070c611bfa565b005b348015610719575f80fd5b50610722611ce1565b60405161072f9190614927565b60405180910390f35b348015610743575f80fd5b5061074c611d08565b60405161075991906145d5565b60405180910390f35b34801561076d575f80fd5b5061078860048036038101906107839190614686565b611d98565b60405161079591906146de565b60405180910390f35b3480156107a9575f80fd5b506107c460048036038101906107bf9190614686565b611e60565b6040516107d191906146de565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb9190614885565b611e7d565b005b34801561080d575f80fd5b50610816611f73565b6040516108249291906147ff565b60405180910390f35b348015610838575f80fd5b50610853600480360381019061084e9190614826565b611f9e565b005b348015610860575f80fd5b5061087b6004803603810190610876919061496a565b612037565b005b348015610888575f80fd5b506108a3600480360381019061089e91906149a8565b61214c565b005b3480156108b0575f80fd5b506108cb60048036038101906108c691906149d3565b61221c565b6040516108d89190614706565b60405180910390f35b3480156108ec575f80fd5b5061090760048036038101906109029190614885565b61229e565b005b348015610914575f80fd5b5061092f600480360381019061092a919061496a565b6123fa565b005b34801561093c575f80fd5b5061095760048036038101906109529190614885565b61250f565b005b348015610964575f80fd5b5061097f600480360381019061097a9190614885565b612605565b005b6060600b805461099090614a3e565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90614a3e565b8015610a075780601f106109de57610100808354040283529160200191610a07565b820191905f5260205f20905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b5f610a24610a1d612788565b848461278f565b6001905092915050565b5f600a54905090565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600854905090565b5f610a72848484612952565b610b2f84610a7e612788565b610b2a856040518060600160405280602881526020016157f86028913960035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ae1612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cb99092919063ffffffff16565b61278f565b600190509392505050565b600f805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b5f600954821115610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614ade565b60405180910390fd5b5f610bb4612d0d565b9050610bc98184612d3690919063ffffffff16565b915050919050565b5f600d5f9054906101000a900460ff16905090565b610bee612788565b73ffffffffffffffffffffffffffffffffffffffff16610c0c611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614b46565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290614bae565b60405180910390fd5b5f5b60078054905081101561108d578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d2557610d24614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361107a575f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115610eb2575f610e05610db9612d0d565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d4b90919063ffffffff16565b9050610e648160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e539190614c26565b600954612d6090919063ffffffff16565b6009819055508060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050610ef5565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060076001600780549050610f4b9190614c26565b81548110610f5c57610f5b614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610f9857610f97614bcc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600780548061104357611042614c59565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561108d565b808061108590614c86565b915050610ced565b5050565b5f61113561109d612788565b846111308560035f6110ad612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b61278f565b6001905092915050565b5f611148612788565b905060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90614d3d565b60405180910390fd5b5f6111de83612d8a565b505050505090506112358160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061128b81600954612d6090919063ffffffff16565b6009819055506112a683600a54612d7590919063ffffffff16565b600a81905550505050565b6112b9612788565b73ffffffffffffffffffffffffffffffffffffffff166112d7611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614b46565b60405180910390fd5b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90614da5565b60405180910390fd5b600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600854831115611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614e0d565b60405180910390fd5b81611474575f61146484612d8a565b505050505090508091505061148a565b5f61147e84612d8a565b50505050915050809150505b92915050565b600e805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360159054906101000a900460ff1681565b6114fb612788565b73ffffffffffffffffffffffffffffffffffffffff16611519611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690614b46565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090614bae565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156116c65761168460015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b65565b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600781908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6117d8612788565b73ffffffffffffffffffffffffffffffffffffffff166117f6611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390614b46565b60405180910390fd5b5f611855611ce1565b73ffffffffffffffffffffffffffffffffffffffff164760405161187890614e58565b5f6040518083038185875af1925050503d805f81146118b2576040519150601f19603f3d011682016040523d82523d5f602084013e6118b7565b606091505b50509050806118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614eb6565b60405180910390fd5b50565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156119935760025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506119dc565b6119d960015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b65565b90505b919050565b6119e9612788565b73ffffffffffffffffffffffffffffffffffffffff16611a07611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490614b46565b60405180910390fd5b611a665f612ddf565b565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a95612788565b73ffffffffffffffffffffffffffffffffffffffff16611ab3611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614b46565b60405180910390fd5b81600e5f015f6101000a81548161ffff021916908361ffff16021790555080600e5f0160026101000a81548161ffff021916908361ffff1602179055505f8183611b539190614ed4565b61ffff1690506005811115611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490614f53565b60405180910390fd5b505050565b61dead81565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611c02612788565b73ffffffffffffffffffffffffffffffffffffffff16611c20611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90614b46565b60405180910390fd5b60065f9054906101000a900460ff1615611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90614fbb565b60405180910390fd5b600160065f6101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611d1790614a3e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4390614a3e565b8015611d8e5780601f10611d6557610100808354040283529160200191611d8e565b820191905f5260205f20905b815481529060010190602001808311611d7157829003601f168201915b5050505050905090565b5f611e56611da4612788565b84611e51856040518060600160405280602581526020016158206025913960035f611dcd612788565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cb99092919063ffffffff16565b61278f565b6001905092915050565b5f611e73611e6c612788565b8484612952565b6001905092915050565b611e85612788565b73ffffffffffffffffffffffffffffffffffffffff16611ea3611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614b46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f30575f80fd5b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6010805f015f9054906101000a900461ffff1690805f0160029054906101000a900461ffff16905082565b611fa6612788565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614b46565b60405180910390fd5b670de0b6b3a76400008161202e9190614fd9565b60148190555050565b61203f612788565b73ffffffffffffffffffffffffffffffffffffffff1661205d611ce1565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614b46565b60405180910390fd5b81600f5f015f6101000a81548161ffff021916908361ffff16021790555080600f5f0160026101000a81548161ffff021916908361ffff1602179055505f82826120fd9190614ed4565b61ffff1690506005811115612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90615064565b60405180910390fd5b505050565b612154612788565b73ffffffffffffffffffffffffffffffffffffffff16612172611ce1565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90614b46565b60405180910390fd5b80601360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161221191906146de565b60405180910390a150565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122a6612788565b73ffffffffffffffffffffffffffffffffffffffff166122c4611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190614b46565b60405180910390fd5b60045f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906150cc565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b612402612788565b73ffffffffffffffffffffffffffffffffffffffff16612420611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90614b46565b60405180910390fd5b81600f5f015f6101000a81548161ffff021916908361ffff16021790555080600f5f0160026101000a81548161ffff021916908361ffff1602179055505f82826124c09190614ed4565b61ffff169050600581111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190615134565b60405180910390fd5b505050565b612517612788565b73ffffffffffffffffffffffffffffffffffffffff16612535611ce1565b73ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614b46565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f0906151c2565b60405180910390fd5b61260281612ddf565b50565b61260d612788565b73ffffffffffffffffffffffffffffffffffffffff1661262b611ce1565b73ffffffffffffffffffffffffffffffffffffffff1614612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267890614b46565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126bf9190614927565b602060405180830381865afa1580156126da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fe91906151f4565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612724611ce1565b836040518363ffffffff1660e01b815260040161274292919061521f565b6020604051808303815f875af115801561275e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612782919061525a565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f4906152f5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361286b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286290615383565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129459190614706565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b790615411565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a259061549f565b60405180910390fd5b5f8111612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a679061552d565b60405180910390fd5b612a78611ce1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580612af9575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b4d5760065f9054906101000a900460ff16612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390615595565b60405180910390fd5b5b5f612b57306118fe565b90505f6014548210159050808015612b7c5750601360149054906101000a900460ff16155b8015612bd5575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bed5750601360159054906101000a900460ff165b15612bfc57612bfb82612ea0565b5b5f6001905060045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c9c575060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612ca5575f90505b612cb18686868461312f565b505050505050565b5f838311158290612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf791906145d5565b60405180910390fd5b5082840390509392505050565b5f805f612d186134e7565b91509150612d2f8183612d3690919063ffffffff16565b9250505090565b5f8183612d4391906155e0565b905092915050565b5f8183612d589190614fd9565b905092915050565b5f8183612d6d9190614c26565b905092915050565b5f8183612d829190615610565b905092915050565b5f805f805f805f805f612d9c8a613782565b9250925092505f805f612db88d8686612db3612d0d565b6137d8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115612ed757612ed6615643565b5b604051908082528060200260200182016040528015612f055781602001602082028036833780820191505090505b50905030815f81518110612f1c57612f1b614bcc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fe59190615684565b81600181518110612ff957612ff8614bcc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061306030601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278f565b601160049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130e495949392919061579f565b5f604051808303815f87803b1580156130fb575f80fd5b505af115801561310d573d5f803e3d5ffd5b50505050505f601360146101000a81548160ff02191690831515021790555050565b61313761385c565b801561320a5760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361319e57613199613897565b613209565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131ff576131fa6138f5565b613208565b613207613953565b5b5b5b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156132a7575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132bc576132b78484846139b2565b6134e1565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613359575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561336e57613369848484613c03565b6134e0565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561340c575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134215761341c848484613e54565b6134df565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134bd575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156134d2576134cd848484614014565b6134de565b6134dd848484613e54565b5b5b5b5b50505050565b5f805f60095490505f60085490505f5b600780549050811015613745578260015f6007848154811061351c5761351b614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054118061360157508160025f6007848154811061359d5761359c614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15613618576009546008549450945050505061377e565b6136a360015f6007848154811061363257613631614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612d6090919063ffffffff16565b925061373060025f600784815481106136bf576136be614bcc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612d6090919063ffffffff16565b9150808061373d90614c86565b9150506134f7565b5061375d600854600954612d3690919063ffffffff16565b8210156137755760095460085493509350505061377e565b81819350935050505b9091565b5f805f8061378f856142f6565b90505f61379b86614337565b90505f6137c3826137b5858a612d6090919063ffffffff16565b612d6090919063ffffffff16565b90508083839550955095505050509193909250565b5f805f806137ef8589612d4b90919063ffffffff16565b90505f6138058689612d4b90919063ffffffff16565b90505f61381b8789612d4b90919063ffffffff16565b90505f613843826138358587612d6090919063ffffffff16565b612d6090919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f60115f6101000a81548161ffff021916908361ffff1602179055505f601160026101000a81548161ffff021916908361ffff160217905550565b600e5f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff160217905550600e5f015f9054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b600f5f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff160217905550600f5f015f9054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b60105f0160029054906101000a900461ffff1660115f6101000a81548161ffff021916908361ffff16021790555060105f0160029054906101000a900461ffff16601160026101000a81548161ffff021916908361ffff160217905550565b5f805f805f806139c187612d8a565b955095509550955095509550613a1d8760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613aae8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b3f8560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b8981614379565b613b938483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bf09190614706565b60405180910390a3505050505050505050565b5f805f805f80613c1287612d8a565b955095509550955095509550613c6e8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613cff8360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613d908560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613dda81614379565b613de48483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e419190614706565b60405180910390a3505050505050505050565b5f805f805f80613e6387612d8a565b955095509550955095509550613ebf8660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f508560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613f9a81614379565b613fa48483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140019190614706565b60405180910390a3505050505050505050565b5f805f805f8061402387612d8a565b95509550955095509550955061407f8760025f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141108660015f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d6090919063ffffffff16565b60015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506141a18360025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506142328560015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061427c81614379565b6142868483614511565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142e39190614706565b60405180910390a3505050505050505050565b5f614330606461432260115f9054906101000a900461ffff1661ffff1685612d4b90919063ffffffff16565b612d3690919063ffffffff16565b9050919050565b5f6143726064614364601160029054906101000a900461ffff1661ffff1685612d4b90919063ffffffff16565b612d3690919063ffffffff16565b9050919050565b5f614382612d0d565b90505f6143988284612d4b90919063ffffffff16565b90506143ea8160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561450c576144ca8360025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d7590919063ffffffff16565b60025f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61452682600954612d6090919063ffffffff16565b60098190555061454181600a54612d7590919063ffffffff16565b600a819055505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614582578082015181840152602081019050614567565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6145a78261454b565b6145b18185614555565b93506145c1818560208601614565565b6145ca8161458d565b840191505092915050565b5f6020820190508181035f8301526145ed818461459d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614622826145f9565b9050919050565b61463281614618565b811461463c575f80fd5b50565b5f8135905061464d81614629565b92915050565b5f819050919050565b61466581614653565b811461466f575f80fd5b50565b5f813590506146808161465c565b92915050565b5f806040838503121561469c5761469b6145f5565b5b5f6146a98582860161463f565b92505060206146ba85828601614672565b9150509250929050565b5f8115159050919050565b6146d8816146c4565b82525050565b5f6020820190506146f15f8301846146cf565b92915050565b61470081614653565b82525050565b5f6020820190506147195f8301846146f7565b92915050565b5f819050919050565b5f61474261473d614738846145f9565b61471f565b6145f9565b9050919050565b5f61475382614728565b9050919050565b5f61476482614749565b9050919050565b6147748161475a565b82525050565b5f60208201905061478d5f83018461476b565b92915050565b5f805f606084860312156147aa576147a96145f5565b5b5f6147b78682870161463f565b93505060206147c88682870161463f565b92505060406147d986828701614672565b9150509250925092565b5f61ffff82169050919050565b6147f9816147e3565b82525050565b5f6040820190506148125f8301856147f0565b61481f60208301846147f0565b9392505050565b5f6020828403121561483b5761483a6145f5565b5b5f61484884828501614672565b91505092915050565b5f60ff82169050919050565b61486681614851565b82525050565b5f60208201905061487f5f83018461485d565b92915050565b5f6020828403121561489a576148996145f5565b5b5f6148a78482850161463f565b91505092915050565b6148b9816146c4565b81146148c3575f80fd5b50565b5f813590506148d4816148b0565b92915050565b5f80604083850312156148f0576148ef6145f5565b5b5f6148fd85828601614672565b925050602061490e858286016148c6565b9150509250929050565b61492181614618565b82525050565b5f60208201905061493a5f830184614918565b92915050565b614949816147e3565b8114614953575f80fd5b50565b5f8135905061496481614940565b92915050565b5f80604083850312156149805761497f6145f5565b5b5f61498d85828601614956565b925050602061499e85828601614956565b9150509250929050565b5f602082840312156149bd576149bc6145f5565b5b5f6149ca848285016148c6565b91505092915050565b5f80604083850312156149e9576149e86145f5565b5b5f6149f68582860161463f565b9250506020614a078582860161463f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614a5557607f821691505b602082108103614a6857614a67614a11565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614ac8602a83614555565b9150614ad382614a6e565b604082019050919050565b5f6020820190508181035f830152614af581614abc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614b30602083614555565b9150614b3b82614afc565b602082019050919050565b5f6020820190508181035f830152614b5d81614b24565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f614b98601b83614555565b9150614ba382614b64565b602082019050919050565b5f6020820190508181035f830152614bc581614b8c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614c3082614653565b9150614c3b83614653565b9250828203905081811115614c5357614c52614bf9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614c9082614653565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614cc257614cc1614bf9565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f614d27602c83614555565b9150614d3282614ccd565b604082019050919050565b5f6020820190508181035f830152614d5481614d1b565b9050919050565b7f616c7265616479206578636c75646564000000000000000000000000000000005f82015250565b5f614d8f601083614555565b9150614d9a82614d5b565b602082019050919050565b5f6020820190508181035f830152614dbc81614d83565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614df7601f83614555565b9150614e0282614dc3565b602082019050919050565b5f6020820190508181035f830152614e2481614deb565b9050919050565b5f81905092915050565b50565b5f614e435f83614e2b565b9150614e4e82614e35565b5f82019050919050565b5f614e6282614e38565b9150819050919050565b7f657468207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f614ea0601383614555565b9150614eab82614e6c565b602082019050919050565b5f6020820190508181035f830152614ecd81614e94565b9050919050565b5f614ede826147e3565b9150614ee9836147e3565b9250828201905061ffff811115614f0357614f02614bf9565b5b92915050565b7f6d6178206275792066656573206c696d697420697320352500000000000000005f82015250565b5f614f3d601883614555565b9150614f4882614f09565b602082019050919050565b5f6020820190508181035f830152614f6a81614f31565b9050919050565b7f616c726561647920656e61626c656400000000000000000000000000000000005f82015250565b5f614fa5600f83614555565b9150614fb082614f71565b602082019050919050565b5f6020820190508181035f830152614fd281614f99565b9050919050565b5f614fe382614653565b9150614fee83614653565b9250828202614ffc81614653565b9150828204841483151761501357615012614bf9565b5b5092915050565b7f6d6178207472616e736665722066656573206c696d69742069732035250000005f82015250565b5f61504e601d83614555565b91506150598261501a565b602082019050919050565b5f6020820190508181035f83015261507b81615042565b9050919050565b7f616c726561647920696e636c75646564000000000000000000000000000000005f82015250565b5f6150b6601083614555565b91506150c182615082565b602082019050919050565b5f6020820190508181035f8301526150e3816150aa565b9050919050565b7f6d61782073656c6c2066656573206c696d6974206973203525000000000000005f82015250565b5f61511e601983614555565b9150615129826150ea565b602082019050919050565b5f6020820190508181035f83015261514b81615112565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151ac602683614555565b91506151b782615152565b604082019050919050565b5f6020820190508181035f8301526151d9816151a0565b9050919050565b5f815190506151ee8161465c565b92915050565b5f60208284031215615209576152086145f5565b5b5f615216848285016151e0565b91505092915050565b5f6040820190506152325f830185614918565b61523f60208301846146f7565b9392505050565b5f81519050615254816148b0565b92915050565b5f6020828403121561526f5761526e6145f5565b5b5f61527c84828501615246565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152df602483614555565b91506152ea82615285565b604082019050919050565b5f6020820190508181035f83015261530c816152d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61536d602283614555565b915061537882615313565b604082019050919050565b5f6020820190508181035f83015261539a81615361565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6153fb602583614555565b9150615406826153a1565b604082019050919050565b5f6020820190508181035f830152615428816153ef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615489602383614555565b91506154948261542f565b604082019050919050565b5f6020820190508181035f8301526154b68161547d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f615517602983614555565b9150615522826154bd565b604082019050919050565b5f6020820190508181035f8301526155448161550b565b9050919050565b7f74726164696e67206973206e6f74206c697665000000000000000000000000005f82015250565b5f61557f601383614555565b915061558a8261554b565b602082019050919050565b5f6020820190508181035f8301526155ac81615573565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6155ea82614653565b91506155f583614653565b925082615605576156046155b3565b5b828204905092915050565b5f61561a82614653565b915061562583614653565b925082820190508082111561563d5761563c614bf9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061567e81614629565b92915050565b5f60208284031215615699576156986145f5565b5b5f6156a684828501615670565b91505092915050565b5f819050919050565b5f6156d26156cd6156c8846156af565b61471f565b614653565b9050919050565b6156e2816156b8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61571a81614618565b82525050565b5f61572b8383615711565b60208301905092915050565b5f602082019050919050565b5f61574d826156e8565b61575781856156f2565b935061576283615702565b805f5b838110156157925781516157798882615720565b975061578483615737565b925050600181019050615765565b5085935050505092915050565b5f60a0820190506157b25f8301886146f7565b6157bf60208301876156d9565b81810360408301526157d18186615743565b90506157e06060830185614918565b6157ed60808301846146f7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208426506b27af2920bc944974afbd417b154812aefb19a25602b87f141591c8cf64736f6c63430008140033
Deployed Bytecode Sourcemap
28561:23071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31611:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32596:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34224:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29807:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31888:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32797:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29666:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35251:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36154:882;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33251:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34327:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37156:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34760:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29639:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29855:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30031:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35700:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45100:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40599:167;;;;;;;;;;;;;:::i;:::-;;31991:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9181:103;;;;;;;;;;;;;:::i;:::-;;29890:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37870:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29927:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34037:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44058:144;;;;;;;;;;;;;:::i;:::-;;8530:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31702;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33559:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32197:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39378:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29695:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;39676:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38887:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39985:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32404:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37477:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38371:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9439:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40292:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31611:83;31648:13;31681:5;31674:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31611:83;:::o;32596:193::-;32698:4;32720:39;32729:12;:10;:12::i;:::-;32743:7;32752:6;32720:8;:39::i;:::-;32777:4;32770:11;;32596:193;;;;:::o;34224:87::-;34266:7;34293:10;;34286:17;;34224:87;:::o;29807:41::-;;;;;;;;;;;;;:::o;31888:95::-;31941:7;31968;;31961:14;;31888:95;:::o;32797:446::-;32929:4;32946:36;32956:6;32964:9;32975:6;32946:9;:36::i;:::-;32993:220;33016:6;33037:12;:10;:12::i;:::-;33064:138;33120:6;33064:138;;;;;;;;;;;;;;;;;:11;:19;33076:6;33064:19;;;;;;;;;;;;;;;:33;33084:12;:10;:12::i;:::-;33064:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;32993:8;:220::i;:::-;33231:4;33224:11;;32797:446;;;;;:::o;29666:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35251:322::-;35345:7;35403;;35392;:18;;35370:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35491:19;35513:10;:8;:10::i;:::-;35491:32;;35541:24;35553:11;35541:7;:11;;:24;;;;:::i;:::-;35534:31;;;35251:322;;;:::o;31797:83::-;31838:5;31863:9;;;;;;;;;;;31856:16;;31797:83;:::o;36154:882::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36236:11:::1;:21;36249:7;36236:21;;;;;;;;;;;;;;;;;;;;;;;;;36228:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36308:9;36303:726;36327:9;:16;;;;36323:1;:20;36303:726;;;36386:7;36370:23;;:9;36380:1;36370:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;36366:652:::1;;36506:1;36486:7;:17;36495:7;36486:17;;;;;;;;;;;;;;;;:21;36482:317;;;36528:17;36548:33;36570:10;:8;:10::i;:::-;36548:7;:17;36557:7;36548:17;;;;;;;;;;;;;;;;:21;;:33;;;;:::i;:::-;36528:53;;36610:40;36640:9;36622:7;:17;36631:7;36622:17;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;36610:7;;:11;;:40;;;;:::i;:::-;36600:7;:50;;;;36688:9;36669:7;:16;36677:7;36669:16;;;;;;;;;;;;;;;:28;;;;36509:208;36482:317;;;36778:1;36758:7;:17;36767:7;36758:17;;;;;;;;;;;;;;;:21;;;;36482:317;36834:1;36816:7;:16;36824:7;36816:16;;;;;;;;;;;;;;;:19;;;;36869:9;36897:1;36880:9;:16;;;;:18;;;;:::i;:::-;36869:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36853:9;36864:1;36853:13;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36941:5;36917:11;:21;36930:7;36917:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36964:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;36997:5;;36366:652;36345:3;;;;;:::i;:::-;;;;36303:726;;;;36154:882:::0;:::o;33251:300::-;33366:4;33388:133;33411:12;:10;:12::i;:::-;33438:7;33460:50;33499:10;33460:11;:25;33472:12;:10;:12::i;:::-;33460:25;;;;;;;;;;;;;;;:34;33486:7;33460:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33388:8;:133::i;:::-;33539:4;33532:11;;33251:300;;;;:::o;34327:419::-;34379:14;34396:12;:10;:12::i;:::-;34379:29;;34442:11;:19;34454:6;34442:19;;;;;;;;;;;;;;;;;;;;;;;;;34441:20;34419:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;34545:15;34574:19;34585:7;34574:10;:19::i;:::-;34544:49;;;;;;;34622:28;34642:7;34622;:15;34630:6;34622:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34604:7;:15;34612:6;34604:15;;;;;;;;;;;;;;;:46;;;;34671:20;34683:7;34671;;:11;;:20;;;;:::i;:::-;34661:7;:30;;;;34715:23;34730:7;34715:10;;:14;;:23;;;;:::i;:::-;34702:10;:36;;;;34368:378;;34327:419;:::o;37156:182::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37237:18:::1;:27;37256:7;37237:27;;;;;;;;;;;;;;;;;;;;;;;;;37236:28;37227:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37326:4;37296:18;:27;37315:7;37296:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;37156:182:::0;:::o;34760:479::-;34878:7;34922;;34911;:18;;34903:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34981:17;34976:256;;35016:15;35045:19;35056:7;35045:10;:19::i;:::-;35015:49;;;;;;;35086:7;35079:14;;;;;34976:256;35129:23;35164:19;35175:7;35164:10;:19::i;:::-;35126:57;;;;;;;35205:15;35198:22;;;34760:479;;;;;:::o;29639:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29855:28::-;;;;;;;;;;;;;:::o;30031:40::-;;;;;;;;;;;;;:::o;35700:332::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35781:11:::1;:20;35793:7;35781:20;;;;;;;;;;;;;;;;;;;;;;;;;35780:21;35772:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35867:1;35848:7;:16;35856:7;35848:16;;;;;;;;;;;;;;;;:20;35844:109;;;35904:37;35924:7;:16;35932:7;35924:16;;;;;;;;;;;;;;;;35904:19;:37::i;:::-;35885:7;:16;35893:7;35885:16;;;;;;;;;;;;;;;:56;;;;35844:109;35986:4;35963:11;:20;35975:7;35963:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36001:9;36016:7;36001:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35700:332:::0;:::o;45100:124::-;45165:4;45189:18;:27;45208:7;45189:27;;;;;;;;;;;;;;;;;;;;;;;;;45182:34;;45100:124;;;:::o;40599:167::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40650:9:::1;40664:7;:5;:7::i;:::-;:12;;40684:21;40664:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40649:61;;;40730:4;40721:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40638:128;40599:167::o:0;31991:198::-;32057:7;32081:11;:20;32093:7;32081:20;;;;;;;;;;;;;;;;;;;;;;;;;32077:49;;;32110:7;:16;32118:7;32110:16;;;;;;;;;;;;;;;;32103:23;;;;32077:49;32144:37;32164:7;:16;32172:7;32164:16;;;;;;;;;;;;;;;;32144:19;:37::i;:::-;32137:44;;31991:198;;;;:::o;9181:103::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9246:30:::1;9273:1;9246:18;:30::i;:::-;9181:103::o:0;29890:30::-;;;;;;;;;;;;;:::o;37870:286::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37981:9:::1;37959:6;:19;;;:31;;;;;;;;;;;;;;;;;;38024:3;38001:6;:20;;;:26;;;;;;;;;;;;;;;;;;38046:19;38080:3;38068:9;:15;;;;:::i;:::-;38046:37;;;;38118:1;38103:11;:16;;38095:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37939:217;37870:286:::0;;:::o;29927:53::-;29973:6;29927:53;:::o;34037:120::-;34105:4;34129:11;:20;34141:7;34129:20;;;;;;;;;;;;;;;;;;;;;;;;;34122:27;;34037:120;;;:::o;44058:144::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44124:16:::1;;;;;;;;;;;44123:17;44114:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;44190:4;44171:16;;:23;;;;;;;;;;;;;;;;;;44058:144::o:0;8530:87::-;8576:7;8603:6;;;;;;;;;;;8596:13;;8530:87;:::o;31702:::-;31741:13;31774:7;31767:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31702:87;:::o;33559:400::-;33679:4;33701:228;33724:12;:10;:12::i;:::-;33751:7;33773:145;33830:15;33773:145;;;;;;;;;;;;;;;;;:11;:25;33785:12;:10;:12::i;:::-;33773:25;;;;;;;;;;;;;;;:34;33799:7;33773:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;33701:8;:228::i;:::-;33947:4;33940:11;;33559:400;;;;:::o;32197:199::-;32302:4;32324:42;32334:12;:10;:12::i;:::-;32348:9;32359:6;32324:9;:42::i;:::-;32384:4;32377:11;;32197:199;;;;:::o;39378:151::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39483:1:::1;39465:20;;:6;:20;;::::0;39456:30:::1;;;::::0;::::1;;39515:6;39497:15;;:24;;;;;;;;;;;;;;;;;;39378:151:::0;:::o;29695:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39676:150::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39812:6:::1;39800:9;:18;;;;:::i;:::-;39779;:39;;;;39676:150:::0;:::o;38887:316::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39020:9:::1;38997:7;:20;;;:32;;;;;;;;;;;;;;;;;;39064:3;39040:7;:21;;;:27;;;;;;;;;;;;;;;;;;39078:24;39112:9;39105:3;:16;;;;:::i;:::-;39078:43;;;;39160:1;39140:16;:21;;39132:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38986:217;38887:316:::0;;:::o;39985:173::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40088:8:::1;40064:21;;:32;;;;;;;;;;;;;;;;;;40112:38;40141:8;40112:38;;;;;;:::i;:::-;;;;;;;;39985:173:::0;:::o;32404:184::-;32521:7;32553:11;:18;32565:5;32553:18;;;;;;;;;;;;;;;:27;32572:7;32553:27;;;;;;;;;;;;;;;;32546:34;;32404:184;;;;:::o;37477:180::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37555:18:::1;:27;37574:7;37555:27;;;;;;;;;;;;;;;;;;;;;;;;;37546:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37644:5;37614:18;:27;37633:7;37614:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37477:180:::0;:::o;38371:299::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38499:9:::1;38476:7;:20;;;:32;;;;;;;;;;;;;;;;;;38543:3;38519:7;:21;;;:27;;;;;;;;;;;;;;;;;;38557:20;38587:9;38580:3;:16;;;;:::i;:::-;38557:39;;;;38631:1;38615:12;:17;;38607:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38465:205;38371:299:::0;;:::o;9439:238::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9562:1:::1;9542:22;;:8;:22;;::::0;9520:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9641:28;9660:8;9641:18;:28::i;:::-;9439:238:::0;:::o;40292:226::-;8761:12;:10;:12::i;:::-;8750:23;;:7;:5;:7::i;:::-;:23;;;8742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40364:17:::1;40391:6;40364:34;;40409:15;40427:10;:20;;;40456:4;40427:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40409:53;;40473:10;:19;;;40493:7;:5;:7::i;:::-;40502;40473:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40353:165;;40292:226:::0;:::o;7313:98::-;7366:7;7393:10;7386:17;;7313:98;:::o;45232:371::-;45376:1;45359:19;;:5;:19;;;45351:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45457:1;45438:21;;:7;:21;;;45430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45541:6;45511:11;:18;45523:5;45511:18;;;;;;;;;;;;;;;:27;45530:7;45511:27;;;;;;;;;;;;;;;:36;;;;45579:7;45563:32;;45572:5;45563:32;;;45588:6;45563:32;;;;;;:::i;:::-;;;;;;;;45232:371;;;:::o;45611:1303::-;45749:1;45733:18;;:4;:18;;;45725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45826:1;45812:16;;:2;:16;;;45804:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45896:1;45887:6;:10;45879:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45984:7;:5;:7::i;:::-;45976:15;;:4;:15;;;;:44;;;;45996:18;:24;46015:4;45996:24;;;;;;;;;;;;;;;;;;;;;;;;;45995:25;45976:44;45973:119;;;46041:16;;;;;;;;;;;46032:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45973:119;46104:28;46135:24;46153:4;46135:9;:24::i;:::-;46104:55;;46172:24;46236:18;;46199:20;:55;;46172:82;;46283:19;:53;;;;;46320:16;;;;;;;;;;;46319:17;46283:53;:91;;;;;46361:13;;;;;;;;;;;46353:21;;:4;:21;;;;46283:91;:129;;;;;46391:21;;;;;;;;;;;46283:129;46265:234;;;46449:38;46466:20;46449:16;:38::i;:::-;46265:234;46572:12;46587:4;46572:19;;46692:18;:24;46711:4;46692:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;46720:18;:22;46739:2;46720:22;;;;;;;;;;;;;;;;;;;;;;;;;46692:50;46688:98;;;46769:5;46759:15;;46688:98;46865:41;46880:4;46886:2;46890:6;46898:7;46865:14;:41::i;:::-;45714:1200;;;45611:1303;;;:::o;23782:240::-;23902:7;23960:1;23955;:6;;23963:12;23947:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24002:1;23998;:5;23991:12;;23782:240;;;;;:::o;42826:164::-;42868:7;42889:15;42906;42925:19;:17;:19::i;:::-;42888:56;;;;42962:20;42974:7;42962;:11;;:20;;;;:::i;:::-;42955:27;;;;42826:164;:::o;22640:98::-;22698:7;22729:1;22725;:5;;;;:::i;:::-;22718:12;;22640:98;;;;:::o;22241:::-;22299:7;22330:1;22326;:5;;;;:::i;:::-;22319:12;;22241:98;;;;:::o;21884:::-;21942:7;21973:1;21969;:5;;;;:::i;:::-;21962:12;;21884:98;;;;:::o;21503:::-;21561:7;21592:1;21588;:5;;;;:::i;:::-;21581:12;;21503:98;;;;:::o;41043:742::-;41143:7;41165;41187;41209;41231;41253;41303:23;41341:12;41368:18;41400:20;41412:7;41400:11;:20::i;:::-;41288:132;;;;;;41432:15;41449:23;41474:12;41490:113;41516:7;41538:4;41557:10;41582;:8;:10::i;:::-;41490:11;:113::i;:::-;41431:172;;;;;;41636:7;41658:15;41688:4;41707:15;41737:4;41756:10;41614:163;;;;;;;;;;;;;;;;;;41043:742;;;;;;;:::o;9837:191::-;9911:16;9930:6;;;;;;;;;;;9911:25;;9956:8;9947:6;;:17;;;;;;;;;;;;;;;;;;10011:8;9980:40;;10001:8;9980:40;;;;;;;;;;;;9900:128;9837:191;:::o;46924:603::-;30331:4;30312:16;;:23;;;;;;;;;;;;;;;;;;47062:21:::1;47100:1;47086:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47062:40;;47131:4;47113;47118:1;47113:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;47157:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47147:4;47152:1;47147:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;47192:62;47209:4;47224:15;;;;;;;;;;;47242:11;47192:8;:62::i;:::-;47293:15;;;;;;;;;;;:66;;;47374:11;47400:1;47444:4;47463:15;;;;;;;;;;;47493;47293:226;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46991:536;30377:5:::0;30358:16;;:24;;;;;;;;;;;;;;;;;;46924:603;:::o;47615:1216::-;47766:14;:12;:14::i;:::-;47797:7;47793:422;;;47885:13;;;;;;;;;;;47875:23;;:6;:23;;;47871:333;;47920:8;:6;:8::i;:::-;47871:333;;;48033:13;;;;;;;;;;;48020:26;;:9;:26;;;48016:188;;48067:9;:7;:9::i;:::-;48016:188;;;48175:13;:11;:13::i;:::-;48016:188;47871:333;47793:422;48231:11;:19;48243:6;48231:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;48255:11;:22;48267:9;48255:22;;;;;;;;;;;;;;;;;;;;;;;;;48254:23;48231:46;48227:597;;;48294:48;48316:6;48324:9;48335:6;48294:21;:48::i;:::-;48227:597;;;48365:11;:19;48377:6;48365:19;;;;;;;;;;;;;;;;;;;;;;;;;48364:20;:46;;;;;48388:11;:22;48400:9;48388:22;;;;;;;;;;;;;;;;;;;;;;;;;48364:46;48360:464;;;48427:46;48447:6;48455:9;48466:6;48427:19;:46::i;:::-;48360:464;;;48496:11;:19;48508:6;48496:19;;;;;;;;;;;;;;;;;;;;;;;;;48495:20;:47;;;;;48520:11;:22;48532:9;48520:22;;;;;;;;;;;;;;;;;;;;;;;;;48519:23;48495:47;48491:333;;;48559:44;48577:6;48585:9;48596:6;48559:17;:44::i;:::-;48491:333;;;48625:11;:19;48637:6;48625:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;48648:11;:22;48660:9;48648:22;;;;;;;;;;;;;;;;;;;;;;;;;48625:45;48621:203;;;48687:48;48709:6;48717:9;48728:6;48687:21;:48::i;:::-;48621:203;;;48768:44;48786:6;48794:9;48805:6;48768:17;:44::i;:::-;48621:203;48491:333;48360:464;48227:597;47615:1216;;;;:::o;42998:605::-;43049:7;43058;43078:15;43096:7;;43078:25;;43114:15;43132:7;;43114:25;;43155:9;43150:338;43174:9;:16;;;;43170:1;:20;43150:338;;;43258:7;43234;:21;43242:9;43252:1;43242:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43234:21;;;;;;;;;;;;;;;;:31;:83;;;;43310:7;43286;:21;43294:9;43304:1;43294:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43286:21;;;;;;;;;;;;;;;;:31;43234:83;43212:146;;;43341:7;;43350;;43333:25;;;;;;;;;43212:146;43383:34;43395:7;:21;43403:9;43413:1;43403:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43395:21;;;;;;;;;;;;;;;;43383:7;:11;;:34;;;;:::i;:::-;43373:44;;43442:34;43454:7;:21;43462:9;43472:1;43462:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43454:21;;;;;;;;;;;;;;;;43442:7;:11;;:34;;;;:::i;:::-;43432:44;;43192:3;;;;;:::i;:::-;;;;43150:338;;;;43512:20;43524:7;;43512;;:11;;:20;;;;:::i;:::-;43502:7;:30;43498:61;;;43542:7;;43551;;43534:25;;;;;;;;43498:61;43578:7;43587;43570:25;;;;;;42998:605;;;:::o;41793:463::-;41894:7;41916;41938;41973:12;41988:31;42011:7;41988:22;:31::i;:::-;41973:46;;42030:18;42051:30;42073:7;42051:21;:30::i;:::-;42030:51;;42092:23;42118:33;42140:10;42118:17;42130:4;42118:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;42092:59;;42214:15;42231:4;42237:10;42206:42;;;;;;;;;41793:463;;;;;:::o;42264:554::-;42463:7;42485;42507;42542:15;42560:24;42572:11;42560:7;:11;;:24;;;;:::i;:::-;42542:42;;42595:12;42610:21;42619:11;42610:4;:8;;:21;;;;:::i;:::-;42595:36;;42642:18;42663:27;42678:11;42663:10;:14;;:27;;;;:::i;:::-;42642:48;;42701:23;42727:33;42749:10;42727:17;42739:4;42727:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;42701:59;;42779:7;42788:15;42805:4;42771:39;;;;;;;;;;42264:554;;;;;;;;:::o;44556:97::-;44616:1;44599:14;;:18;;;;;;;;;;;;;;;;;;44644:1;44628:13;;:17;;;;;;;;;;;;;;;;;;44556:97::o;44661:130::-;44715:6;:20;;;;;;;;;;;;44698:14;;:37;;;;;;;;;;;;;;;;;;44762:6;:19;;;;;;;;;;;;44746:13;;:35;;;;;;;;;;;;;;;;;;44661:130::o;44799:141::-;44854:7;:21;;;;;;;;;;;;44837:14;;:38;;;;;;;;;;;;;;;;;;44902:7;:20;;;;;;;;;;;;44886:13;;:36;;;;;;;;;;;;;;;;;;44799:141::o;44948:144::-;45007:11;:25;;;;;;;;;;;;44990:14;;:42;;;;;;;;;;;;;;;;;;45059:11;:25;;;;;;;;;;;;45043:13;;:41;;;;;;;;;;;;;;;;;;44948:144::o;50178:686::-;50329:15;50359:23;50397:12;50424:23;50462:12;50489:18;50521:19;50532:7;50521:10;:19::i;:::-;50314:226;;;;;;;;;;;;50569:28;50589:7;50569;:15;50577:6;50569:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50551:7;:15;50559:6;50551:15;;;;;;;;;;;;;;;:46;;;;50626:28;50646:7;50626;:15;50634:6;50626:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50608:7;:15;50616:6;50608:15;;;;;;;;;;;;;;;:46;;;;50686:39;50709:15;50686:7;:18;50694:9;50686:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50665:7;:18;50673:9;50665:18;;;;;;;;;;;;;;;:60;;;;50736:26;50751:10;50736:14;:26::i;:::-;50773:23;50785:4;50791;50773:11;:23::i;:::-;50829:9;50812:44;;50821:6;50812:44;;;50840:15;50812:44;;;;;;:::i;:::-;;;;;;;;50303:561;;;;;;50178:686;;;:::o;49472:698::-;49621:15;49651:23;49689:12;49716:23;49754:12;49781:18;49813:19;49824:7;49813:10;:19::i;:::-;49606:226;;;;;;;;;;;;49861:28;49881:7;49861;:15;49869:6;49861:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49843:7;:15;49851:6;49843:15;;;;;;;;;;;;;;;:46;;;;49921:39;49944:15;49921:7;:18;49929:9;49921:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49900:7;:18;49908:9;49900:18;;;;;;;;;;;;;;;:60;;;;49992:39;50015:15;49992:7;:18;50000:9;49992:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49971:7;:18;49979:9;49971:18;;;;;;;;;;;;;;;:60;;;;50042:26;50057:10;50042:14;:26::i;:::-;50079:23;50091:4;50097;50079:11;:23::i;:::-;50135:9;50118:44;;50127:6;50118:44;;;50146:15;50118:44;;;;;;:::i;:::-;;;;;;;;49595:575;;;;;;49472:698;;;:::o;48839:625::-;48986:15;49016:23;49054:12;49081:23;49119:12;49146:18;49178:19;49189:7;49178:10;:19::i;:::-;48971:226;;;;;;;;;;;;49226:28;49246:7;49226;:15;49234:6;49226:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49208:7;:15;49216:6;49208:15;;;;;;;;;;;;;;;:46;;;;49286:39;49309:15;49286:7;:18;49294:9;49286:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49265:7;:18;49273:9;49265:18;;;;;;;;;;;;;;;:60;;;;49336:26;49351:10;49336:14;:26::i;:::-;49373:23;49385:4;49391;49373:11;:23::i;:::-;49429:9;49412:44;;49421:6;49412:44;;;49440:15;49412:44;;;;;;:::i;:::-;;;;;;;;48960:504;;;;;;48839:625;;;:::o;50872:757::-;51023:15;51053:23;51091:12;51118:23;51156:12;51183:18;51215:19;51226:7;51215:10;:19::i;:::-;51008:226;;;;;;;;;;;;51263:28;51283:7;51263;:15;51271:6;51263:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51245:7;:15;51253:6;51245:15;;;;;;;;;;;;;;;:46;;;;51320:28;51340:7;51320;:15;51328:6;51320:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51302:7;:15;51310:6;51302:15;;;;;;;;;;;;;;;:46;;;;51380:39;51403:15;51380:7;:18;51388:9;51380:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51359:7;:18;51367:9;51359:18;;;;;;;;;;;;;;;:60;;;;51451:39;51474:15;51451:7;:18;51459:9;51451:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51430:7;:18;51438:9;51430:18;;;;;;;;;;;;;;;:60;;;;51501:26;51516:10;51501:14;:26::i;:::-;51538:23;51550:4;51556;51538:11;:23::i;:::-;51594:9;51577:44;;51586:6;51577:44;;;51605:15;51577:44;;;;;;:::i;:::-;;;;;;;;50997:632;;;;;;50872:757;;;:::o;44216:144::-;44287:7;44314:38;44346:5;44314:27;44326:14;;;;;;;;;;;44314:27;;:7;:11;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;44307:45;;44216:144;;;:::o;44368:174::-;44465:7;44497:37;44528:5;44497:26;44509:13;;;;;;;;;;;44497:26;;:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;44490:44;;44368:174;;;:::o;43611:355::-;43674:19;43696:10;:8;:10::i;:::-;43674:32;;43717:18;43738:27;43753:11;43738:10;:14;;:27;;;;:::i;:::-;43717:48;;43801:38;43828:10;43801:7;:22;43817:4;43801:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;43776:7;:22;43792:4;43776:22;;;;;;;;;;;;;;;:63;;;;43854:11;:26;43874:4;43854:26;;;;;;;;;;;;;;;;;;;;;;;;;43850:108;;;43920:38;43947:10;43920:7;:22;43936:4;43920:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;43895:7;:22;43911:4;43895:22;;;;;;;;;;;;;;;:63;;;;43850:108;43663:303;;43611:355;:::o;40888:147::-;40966:17;40978:4;40966:7;;:11;;:17;;;;:::i;:::-;40956:7;:27;;;;41007:20;41022:4;41007:10;;:14;;:20;;;;:::i;:::-;40994:10;:33;;;;40888:147;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:89::-;5432:7;5472:6;5465:5;5461:18;5450:29;;5396:89;;;:::o;5491:115::-;5576:23;5593:5;5576:23;:::i;:::-;5571:3;5564:36;5491:115;;:::o;5612:324::-;5729:4;5767:2;5756:9;5752:18;5744:26;;5780:69;5846:1;5835:9;5831:17;5822:6;5780:69;:::i;:::-;5859:70;5925:2;5914:9;5910:18;5901:6;5859:70;:::i;:::-;5612:324;;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:86::-;6312:7;6352:4;6345:5;6341:16;6330:27;;6277:86;;;:::o;6369:112::-;6452:22;6468:5;6452:22;:::i;:::-;6447:3;6440:35;6369:112;;:::o;6487:214::-;6576:4;6614:2;6603:9;6599:18;6591:26;;6627:67;6691:1;6680:9;6676:17;6667:6;6627:67;:::i;:::-;6487:214;;;;:::o;6707:329::-;6766:6;6815:2;6803:9;6794:7;6790:23;6786:32;6783:119;;;6821:79;;:::i;:::-;6783:119;6941:1;6966:53;7011:7;7002:6;6991:9;6987:22;6966:53;:::i;:::-;6956:63;;6912:117;6707:329;;;;:::o;7042:116::-;7112:21;7127:5;7112:21;:::i;:::-;7105:5;7102:32;7092:60;;7148:1;7145;7138:12;7092:60;7042:116;:::o;7164:133::-;7207:5;7245:6;7232:20;7223:29;;7261:30;7285:5;7261:30;:::i;:::-;7164:133;;;;:::o;7303:468::-;7368:6;7376;7425:2;7413:9;7404:7;7400:23;7396:32;7393:119;;;7431:79;;:::i;:::-;7393:119;7551:1;7576:53;7621:7;7612:6;7601:9;7597:22;7576:53;:::i;:::-;7566:63;;7522:117;7678:2;7704:50;7746:7;7737:6;7726:9;7722:22;7704:50;:::i;:::-;7694:60;;7649:115;7303:468;;;;;:::o;7777:118::-;7864:24;7882:5;7864:24;:::i;:::-;7859:3;7852:37;7777:118;;:::o;7901:222::-;7994:4;8032:2;8021:9;8017:18;8009:26;;8045:71;8113:1;8102:9;8098:17;8089:6;8045:71;:::i;:::-;7901:222;;;;:::o;8129:120::-;8201:23;8218:5;8201:23;:::i;:::-;8194:5;8191:34;8181:62;;8239:1;8236;8229:12;8181:62;8129:120;:::o;8255:137::-;8300:5;8338:6;8325:20;8316:29;;8354:32;8380:5;8354:32;:::i;:::-;8255:137;;;;:::o;8398:470::-;8464:6;8472;8521:2;8509:9;8500:7;8496:23;8492:32;8489:119;;;8527:79;;:::i;:::-;8489:119;8647:1;8672:52;8716:7;8707:6;8696:9;8692:22;8672:52;:::i;:::-;8662:62;;8618:116;8773:2;8799:52;8843:7;8834:6;8823:9;8819:22;8799:52;:::i;:::-;8789:62;;8744:117;8398:470;;;;;:::o;8874:323::-;8930:6;8979:2;8967:9;8958:7;8954:23;8950:32;8947:119;;;8985:79;;:::i;:::-;8947:119;9105:1;9130:50;9172:7;9163:6;9152:9;9148:22;9130:50;:::i;:::-;9120:60;;9076:114;8874:323;;;;:::o;9203:474::-;9271:6;9279;9328:2;9316:9;9307:7;9303:23;9299:32;9296:119;;;9334:79;;:::i;:::-;9296:119;9454:1;9479:53;9524:7;9515:6;9504:9;9500:22;9479:53;:::i;:::-;9469:63;;9425:117;9581:2;9607:53;9652:7;9643:6;9632:9;9628:22;9607:53;:::i;:::-;9597:63;;9552:118;9203:474;;;;;:::o;9683:180::-;9731:77;9728:1;9721:88;9828:4;9825:1;9818:15;9852:4;9849:1;9842:15;9869:320;9913:6;9950:1;9944:4;9940:12;9930:22;;9997:1;9991:4;9987:12;10018:18;10008:81;;10074:4;10066:6;10062:17;10052:27;;10008:81;10136:2;10128:6;10125:14;10105:18;10102:38;10099:84;;10155:18;;:::i;:::-;10099:84;9920:269;9869:320;;;:::o;10195:229::-;10335:34;10331:1;10323:6;10319:14;10312:58;10404:12;10399:2;10391:6;10387:15;10380:37;10195:229;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:182::-;11367:34;11363:1;11355:6;11351:14;11344:58;11227:182;:::o;11415:366::-;11557:3;11578:67;11642:2;11637:3;11578:67;:::i;:::-;11571:74;;11654:93;11743:3;11654:93;:::i;:::-;11772:2;11767:3;11763:12;11756:19;;11415:366;;;:::o;11787:419::-;11953:4;11991:2;11980:9;11976:18;11968:26;;12040:9;12034:4;12030:20;12026:1;12015:9;12011:17;12004:47;12068:131;12194:4;12068:131;:::i;:::-;12060:139;;11787:419;;;:::o;12212:177::-;12352:29;12348:1;12340:6;12336:14;12329:53;12212:177;:::o;12395:366::-;12537:3;12558:67;12622:2;12617:3;12558:67;:::i;:::-;12551:74;;12634:93;12723:3;12634:93;:::i;:::-;12752:2;12747:3;12743:12;12736:19;;12395:366;;;:::o;12767:419::-;12933:4;12971:2;12960:9;12956:18;12948:26;;13020:9;13014:4;13010:20;13006:1;12995:9;12991:17;12984:47;13048:131;13174:4;13048:131;:::i;:::-;13040:139;;12767:419;;;:::o;13192:180::-;13240:77;13237:1;13230:88;13337:4;13334:1;13327:15;13361:4;13358:1;13351:15;13378:180;13426:77;13423:1;13416:88;13523:4;13520:1;13513:15;13547:4;13544:1;13537:15;13564:194;13604:4;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13702:1;13699;13695:9;13687:17;;13726:1;13720:4;13717:11;13714:37;;;13731:18;;:::i;:::-;13714:37;13564:194;;;;:::o;13764:180::-;13812:77;13809:1;13802:88;13909:4;13906:1;13899:15;13933:4;13930:1;13923:15;13950:233;13989:3;14012:24;14030:5;14012:24;:::i;:::-;14003:33;;14058:66;14051:5;14048:77;14045:103;;14128:18;;:::i;:::-;14045:103;14175:1;14168:5;14164:13;14157:20;;13950:233;;;:::o;14189:231::-;14329:34;14325:1;14317:6;14313:14;14306:58;14398:14;14393:2;14385:6;14381:15;14374:39;14189:231;:::o;14426:366::-;14568:3;14589:67;14653:2;14648:3;14589:67;:::i;:::-;14582:74;;14665:93;14754:3;14665:93;:::i;:::-;14783:2;14778:3;14774:12;14767:19;;14426:366;;;:::o;14798:419::-;14964:4;15002:2;14991:9;14987:18;14979:26;;15051:9;15045:4;15041:20;15037:1;15026:9;15022:17;15015:47;15079:131;15205:4;15079:131;:::i;:::-;15071:139;;14798:419;;;:::o;15223:166::-;15363:18;15359:1;15351:6;15347:14;15340:42;15223:166;:::o;15395:366::-;15537:3;15558:67;15622:2;15617:3;15558:67;:::i;:::-;15551:74;;15634:93;15723:3;15634:93;:::i;:::-;15752:2;15747:3;15743:12;15736:19;;15395:366;;;:::o;15767:419::-;15933:4;15971:2;15960:9;15956:18;15948:26;;16020:9;16014:4;16010:20;16006:1;15995:9;15991:17;15984:47;16048:131;16174:4;16048:131;:::i;:::-;16040:139;;15767:419;;;:::o;16192:181::-;16332:33;16328:1;16320:6;16316:14;16309:57;16192:181;:::o;16379:366::-;16521:3;16542:67;16606:2;16601:3;16542:67;:::i;:::-;16535:74;;16618:93;16707:3;16618:93;:::i;:::-;16736:2;16731:3;16727:12;16720:19;;16379:366;;;:::o;16751:419::-;16917:4;16955:2;16944:9;16940:18;16932:26;;17004:9;16998:4;16994:20;16990:1;16979:9;16975:17;16968:47;17032:131;17158:4;17032:131;:::i;:::-;17024:139;;16751:419;;;:::o;17176:147::-;17277:11;17314:3;17299:18;;17176:147;;;;:::o;17329:114::-;;:::o;17449:398::-;17608:3;17629:83;17710:1;17705:3;17629:83;:::i;:::-;17622:90;;17721:93;17810:3;17721:93;:::i;:::-;17839:1;17834:3;17830:11;17823:18;;17449:398;;;:::o;17853:379::-;18037:3;18059:147;18202:3;18059:147;:::i;:::-;18052:154;;18223:3;18216:10;;17853:379;;;:::o;18238:169::-;18378:21;18374:1;18366:6;18362:14;18355:45;18238:169;:::o;18413:366::-;18555:3;18576:67;18640:2;18635:3;18576:67;:::i;:::-;18569:74;;18652:93;18741:3;18652:93;:::i;:::-;18770:2;18765:3;18761:12;18754:19;;18413:366;;;:::o;18785:419::-;18951:4;18989:2;18978:9;18974:18;18966:26;;19038:9;19032:4;19028:20;19024:1;19013:9;19009:17;19002:47;19066:131;19192:4;19066:131;:::i;:::-;19058:139;;18785:419;;;:::o;19210:193::-;19249:3;19268:19;19285:1;19268:19;:::i;:::-;19263:24;;19301:19;19318:1;19301:19;:::i;:::-;19296:24;;19343:1;19340;19336:9;19329:16;;19366:6;19361:3;19358:15;19355:41;;;19376:18;;:::i;:::-;19355:41;19210:193;;;;:::o;19409:174::-;19549:26;19545:1;19537:6;19533:14;19526:50;19409:174;:::o;19589:366::-;19731:3;19752:67;19816:2;19811:3;19752:67;:::i;:::-;19745:74;;19828:93;19917:3;19828:93;:::i;:::-;19946:2;19941:3;19937:12;19930:19;;19589:366;;;:::o;19961:419::-;20127:4;20165:2;20154:9;20150:18;20142:26;;20214:9;20208:4;20204:20;20200:1;20189:9;20185:17;20178:47;20242:131;20368:4;20242:131;:::i;:::-;20234:139;;19961:419;;;:::o;20386:165::-;20526:17;20522:1;20514:6;20510:14;20503:41;20386:165;:::o;20557:366::-;20699:3;20720:67;20784:2;20779:3;20720:67;:::i;:::-;20713:74;;20796:93;20885:3;20796:93;:::i;:::-;20914:2;20909:3;20905:12;20898:19;;20557:366;;;:::o;20929:419::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21182:9;21176:4;21172:20;21168:1;21157:9;21153:17;21146:47;21210:131;21336:4;21210:131;:::i;:::-;21202:139;;20929:419;;;:::o;21354:410::-;21394:7;21417:20;21435:1;21417:20;:::i;:::-;21412:25;;21451:20;21469:1;21451:20;:::i;:::-;21446:25;;21506:1;21503;21499:9;21528:30;21546:11;21528:30;:::i;:::-;21517:41;;21707:1;21698:7;21694:15;21691:1;21688:22;21668:1;21661:9;21641:83;21618:139;;21737:18;;:::i;:::-;21618:139;21402:362;21354:410;;;;:::o;21770:179::-;21910:31;21906:1;21898:6;21894:14;21887:55;21770:179;:::o;21955:366::-;22097:3;22118:67;22182:2;22177:3;22118:67;:::i;:::-;22111:74;;22194:93;22283:3;22194:93;:::i;:::-;22312:2;22307:3;22303:12;22296:19;;21955:366;;;:::o;22327:419::-;22493:4;22531:2;22520:9;22516:18;22508:26;;22580:9;22574:4;22570:20;22566:1;22555:9;22551:17;22544:47;22608:131;22734:4;22608:131;:::i;:::-;22600:139;;22327:419;;;:::o;22752:166::-;22892:18;22888:1;22880:6;22876:14;22869:42;22752:166;:::o;22924:366::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:419::-;23462:4;23500:2;23489:9;23485:18;23477:26;;23549:9;23543:4;23539:20;23535:1;23524:9;23520:17;23513:47;23577:131;23703:4;23577:131;:::i;:::-;23569:139;;23296:419;;;:::o;23721:175::-;23861:27;23857:1;23849:6;23845:14;23838:51;23721:175;:::o;23902:366::-;24044:3;24065:67;24129:2;24124:3;24065:67;:::i;:::-;24058:74;;24141:93;24230:3;24141:93;:::i;:::-;24259:2;24254:3;24250:12;24243:19;;23902:366;;;:::o;24274:419::-;24440:4;24478:2;24467:9;24463:18;24455:26;;24527:9;24521:4;24517:20;24513:1;24502:9;24498:17;24491:47;24555:131;24681:4;24555:131;:::i;:::-;24547:139;;24274:419;;;:::o;24699:225::-;24839:34;24835:1;24827:6;24823:14;24816:58;24908:8;24903:2;24895:6;24891:15;24884:33;24699:225;:::o;24930:366::-;25072:3;25093:67;25157:2;25152:3;25093:67;:::i;:::-;25086:74;;25169:93;25258:3;25169:93;:::i;:::-;25287:2;25282:3;25278:12;25271:19;;24930:366;;;:::o;25302:419::-;25468:4;25506:2;25495:9;25491:18;25483:26;;25555:9;25549:4;25545:20;25541:1;25530:9;25526:17;25519:47;25583:131;25709:4;25583:131;:::i;:::-;25575:139;;25302:419;;;:::o;25727:143::-;25784:5;25815:6;25809:13;25800:22;;25831:33;25858:5;25831:33;:::i;:::-;25727:143;;;;:::o;25876:351::-;25946:6;25995:2;25983:9;25974:7;25970:23;25966:32;25963:119;;;26001:79;;:::i;:::-;25963:119;26121:1;26146:64;26202:7;26193:6;26182:9;26178:22;26146:64;:::i;:::-;26136:74;;26092:128;25876:351;;;;:::o;26233:332::-;26354:4;26392:2;26381:9;26377:18;26369:26;;26405:71;26473:1;26462:9;26458:17;26449:6;26405:71;:::i;:::-;26486:72;26554:2;26543:9;26539:18;26530:6;26486:72;:::i;:::-;26233:332;;;;;:::o;26571:137::-;26625:5;26656:6;26650:13;26641:22;;26672:30;26696:5;26672:30;:::i;:::-;26571:137;;;;:::o;26714:345::-;26781:6;26830:2;26818:9;26809:7;26805:23;26801:32;26798:119;;;26836:79;;:::i;:::-;26798:119;26956:1;26981:61;27034:7;27025:6;27014:9;27010:22;26981:61;:::i;:::-;26971:71;;26927:125;26714:345;;;;:::o;27065:223::-;27205:34;27201:1;27193:6;27189:14;27182:58;27274:6;27269:2;27261:6;27257:15;27250:31;27065:223;:::o;27294:366::-;27436:3;27457:67;27521:2;27516:3;27457:67;:::i;:::-;27450:74;;27533:93;27622:3;27533:93;:::i;:::-;27651:2;27646:3;27642:12;27635:19;;27294:366;;;:::o;27666:419::-;27832:4;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27666:419;;;:::o;28091:221::-;28231:34;28227:1;28219:6;28215:14;28208:58;28300:4;28295:2;28287:6;28283:15;28276:29;28091:221;:::o;28318:366::-;28460:3;28481:67;28545:2;28540:3;28481:67;:::i;:::-;28474:74;;28557:93;28646:3;28557:93;:::i;:::-;28675:2;28670:3;28666:12;28659:19;;28318:366;;;:::o;28690:419::-;28856:4;28894:2;28883:9;28879:18;28871:26;;28943:9;28937:4;28933:20;28929:1;28918:9;28914:17;28907:47;28971:131;29097:4;28971:131;:::i;:::-;28963:139;;28690:419;;;:::o;29115:224::-;29255:34;29251:1;29243:6;29239:14;29232:58;29324:7;29319:2;29311:6;29307:15;29300:32;29115:224;:::o;29345:366::-;29487:3;29508:67;29572:2;29567:3;29508:67;:::i;:::-;29501:74;;29584:93;29673:3;29584:93;:::i;:::-;29702:2;29697:3;29693:12;29686:19;;29345:366;;;:::o;29717:419::-;29883:4;29921:2;29910:9;29906:18;29898:26;;29970:9;29964:4;29960:20;29956:1;29945:9;29941:17;29934:47;29998:131;30124:4;29998:131;:::i;:::-;29990:139;;29717:419;;;:::o;30142:222::-;30282:34;30278:1;30270:6;30266:14;30259:58;30351:5;30346:2;30338:6;30334:15;30327:30;30142:222;:::o;30370:366::-;30512:3;30533:67;30597:2;30592:3;30533:67;:::i;:::-;30526:74;;30609:93;30698:3;30609:93;:::i;:::-;30727:2;30722:3;30718:12;30711:19;;30370:366;;;:::o;30742:419::-;30908:4;30946:2;30935:9;30931:18;30923:26;;30995:9;30989:4;30985:20;30981:1;30970:9;30966:17;30959:47;31023:131;31149:4;31023:131;:::i;:::-;31015:139;;30742:419;;;:::o;31167:228::-;31307:34;31303:1;31295:6;31291:14;31284:58;31376:11;31371:2;31363:6;31359:15;31352:36;31167:228;:::o;31401:366::-;31543:3;31564:67;31628:2;31623:3;31564:67;:::i;:::-;31557:74;;31640:93;31729:3;31640:93;:::i;:::-;31758:2;31753:3;31749:12;31742:19;;31401:366;;;:::o;31773:419::-;31939:4;31977:2;31966:9;31962:18;31954:26;;32026:9;32020:4;32016:20;32012:1;32001:9;31997:17;31990:47;32054:131;32180:4;32054:131;:::i;:::-;32046:139;;31773:419;;;:::o;32198:169::-;32338:21;32334:1;32326:6;32322:14;32315:45;32198:169;:::o;32373:366::-;32515:3;32536:67;32600:2;32595:3;32536:67;:::i;:::-;32529:74;;32612:93;32701:3;32612:93;:::i;:::-;32730:2;32725:3;32721:12;32714:19;;32373:366;;;:::o;32745:419::-;32911:4;32949:2;32938:9;32934:18;32926:26;;32998:9;32992:4;32988:20;32984:1;32973:9;32969:17;32962:47;33026:131;33152:4;33026:131;:::i;:::-;33018:139;;32745:419;;;:::o;33170:180::-;33218:77;33215:1;33208:88;33315:4;33312:1;33305:15;33339:4;33336:1;33329:15;33356:185;33396:1;33413:20;33431:1;33413:20;:::i;:::-;33408:25;;33447:20;33465:1;33447:20;:::i;:::-;33442:25;;33486:1;33476:35;;33491:18;;:::i;:::-;33476:35;33533:1;33530;33526:9;33521:14;;33356:185;;;;:::o;33547:191::-;33587:3;33606:20;33624:1;33606:20;:::i;:::-;33601:25;;33640:20;33658:1;33640:20;:::i;:::-;33635:25;;33683:1;33680;33676:9;33669:16;;33704:3;33701:1;33698:10;33695:36;;;33711:18;;:::i;:::-;33695:36;33547:191;;;;:::o;33744:180::-;33792:77;33789:1;33782:88;33889:4;33886:1;33879:15;33913:4;33910:1;33903:15;33930:143;33987:5;34018:6;34012:13;34003:22;;34034:33;34061:5;34034:33;:::i;:::-;33930:143;;;;:::o;34079:351::-;34149:6;34198:2;34186:9;34177:7;34173:23;34169:32;34166:119;;;34204:79;;:::i;:::-;34166:119;34324:1;34349:64;34405:7;34396:6;34385:9;34381:22;34349:64;:::i;:::-;34339:74;;34295:128;34079:351;;;;:::o;34436:85::-;34481:7;34510:5;34499:16;;34436:85;;;:::o;34527:158::-;34585:9;34618:61;34636:42;34645:32;34671:5;34645:32;:::i;:::-;34636:42;:::i;:::-;34618:61;:::i;:::-;34605:74;;34527:158;;;:::o;34691:147::-;34786:45;34825:5;34786:45;:::i;:::-;34781:3;34774:58;34691:147;;:::o;34844:114::-;34911:6;34945:5;34939:12;34929:22;;34844:114;;;:::o;34964:184::-;35063:11;35097:6;35092:3;35085:19;35137:4;35132:3;35128:14;35113:29;;34964:184;;;;:::o;35154:132::-;35221:4;35244:3;35236:11;;35274:4;35269:3;35265:14;35257:22;;35154:132;;;:::o;35292:108::-;35369:24;35387:5;35369:24;:::i;:::-;35364:3;35357:37;35292:108;;:::o;35406:179::-;35475:10;35496:46;35538:3;35530:6;35496:46;:::i;:::-;35574:4;35569:3;35565:14;35551:28;;35406:179;;;;:::o;35591:113::-;35661:4;35693;35688:3;35684:14;35676:22;;35591:113;;;:::o;35740:732::-;35859:3;35888:54;35936:5;35888:54;:::i;:::-;35958:86;36037:6;36032:3;35958:86;:::i;:::-;35951:93;;36068:56;36118:5;36068:56;:::i;:::-;36147:7;36178:1;36163:284;36188:6;36185:1;36182:13;36163:284;;;36264:6;36258:13;36291:63;36350:3;36335:13;36291:63;:::i;:::-;36284:70;;36377:60;36430:6;36377:60;:::i;:::-;36367:70;;36223:224;36210:1;36207;36203:9;36198:14;;36163:284;;;36167:14;36463:3;36456:10;;35864:608;;;35740:732;;;;:::o;36478:831::-;36741:4;36779:3;36768:9;36764:19;36756:27;;36793:71;36861:1;36850:9;36846:17;36837:6;36793:71;:::i;:::-;36874:80;36950:2;36939:9;36935:18;36926:6;36874:80;:::i;:::-;37001:9;36995:4;36991:20;36986:2;36975:9;36971:18;36964:48;37029:108;37132:4;37123:6;37029:108;:::i;:::-;37021:116;;37147:72;37215:2;37204:9;37200:18;37191:6;37147:72;:::i;:::-;37229:73;37297:3;37286:9;37282:19;37273:6;37229:73;:::i;:::-;36478:831;;;;;;;;:::o
Swarm Source
ipfs://8426506b27af2920bc944974afbd417b154812aefb19a25602b87f141591c8cf
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.