Overview
Max Total Supply
100,000,000,000,000,000 KTS
Holders
20 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KylithiusToken
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-11 */ /** ██╗ ██╗██╗ ██╗██╗ ██╗████████╗██╗ ██╗██╗██╗ ██╗███████╗ ██║ ██╔╝╚██╗ ██╔╝██║ ██║╚══██╔══╝██║ ██║██║██║ ██║██╔════╝ █████╔╝ ╚████╔╝ ██║ ██║ ██║ ███████║██║██║ ██║███████╗ ██╔═██╗ ╚██╔╝ ██║ ██║ ██║ ██╔══██║██║██║ ██║╚════██║ ██║ ██╗ ██║ ███████╗██║ ██║ ██║ ██║██║╚██████╔╝███████║ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚══════╝ */ pragma solidity 0.8.10; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /* Kylithius KTS 100,000,000,000,000,000 TAXES 4% burn 3%dev/marketing 2% to holders 1% liquidity */ contract KylithiusToken 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; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 public _tTotal = 100000000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string public _name = "Kylithius"; string public _symbol = "KTS"; uint8 public _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 4; uint256 private _previousBurnFee = _burnFee; uint256 public _marketingFee = 3; address public marketingWallet = 0xa0E48283790c7827C5EC70ecd12b9b9E72b8D142 ; uint256 private _previousmarketingFee = _marketingFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 100000000000000000 * 10**9; uint256 private numTokensSellToAddToLiquidity = 10000000000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // 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; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function setMarketingFeePercent(uint256 newMarketingFee) external onlyOwner() { _marketingFee = newMarketingFee; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { _burnFee = burnFee; } 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); } function excludeFromReward(address account) public onlyOwner() { require(account != 0x10ED43C718714eb63d5aA57B78B54704E256024E, 'We can not exclude Pancake router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } 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) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _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); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} 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 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); 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 _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { _taxFee = 0; _liquidityFee = 0; _burnFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingFee = _previousmarketingFee; } 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"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } //Calculate burn amount and marketing amount uint256 burnAmt = amount.mul(_burnFee).div(100); uint256 marketingAmt = amount.mul(_marketingFee).div(100); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } else { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(marketingAmt))); } //Temporarily remove fees to transfer to burn address and marketing wallet _taxFee = 0; _liquidityFee = 0; //Send transfers to burn and marketing wallet _transferStandard(sender, address(0), burnAmt); _transferStandard(sender, marketingWallet, marketingAmt); //Restore tax and liquidity fees _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setmarketingWallet(address newWallet) external onlyOwner() { marketingWallet = newWallet; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount ; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { require(maxTxPercent > 1, "Cannot set transaction amount less than 10 percent!"); _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } }
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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":[{"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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","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":[{"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526a52b7d2dcc80cd2e4000000600955600954600019620000259190620006f9565b60001962000034919062000760565b600a556040518060400160405280600981526020017f4b796c6974686975730000000000000000000000000000000000000000000000815250600c90805190602001906200008492919062000610565b506040518060400160405280600381526020017f4b54530000000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000d292919062000610565b506009600e60006101000a81548160ff021916908360ff1602179055506002600f55600f5460105560016011556011546012556004601355601354601455600360155573a0e48283790c7827c5ec70ecd12b9b9e72b8d142601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506015546017556001601860016101000a81548160ff0219169083151502179055506a52b7d2dcc80cd2e400000060195569021e19e0c9bab2400000601a55348015620001b557600080fd5b506000620001c8620005df60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600360006200027d620005df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000320573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000346919062000805565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d4919062000805565b6040518363ffffffff1660e01b8152600401620003f392919062000848565b6020604051808303816000875af115801562000413573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000439919062000805565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620004b6620005e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200056f620005df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005d0919062000886565b60405180910390a35062000908565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200061e90620008d2565b90600052602060002090601f0160209004810192826200064257600085556200068e565b82601f106200065d57805160ff19168380011785556200068e565b828001600101855582156200068e579182015b828111156200068d57825182559160200191906001019062000670565b5b5090506200069d9190620006a1565b5090565b5b80821115620006bc576000816000905550600101620006a2565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200070682620006c0565b91506200071383620006c0565b925082620007265762000725620006ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200076d82620006c0565b91506200077a83620006c0565b92508282101562000790576200078f62000731565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007cd82620007a0565b9050919050565b620007df81620007c0565b8114620007eb57600080fd5b50565b600081519050620007ff81620007d4565b92915050565b6000602082840312156200081e576200081d6200079b565b5b60006200082e84828501620007ee565b91505092915050565b6200084281620007c0565b82525050565b60006040820190506200085f600083018562000837565b6200086e602083018462000837565b9392505050565b6200088081620006c0565b82525050565b60006020820190506200089d600083018462000875565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008eb57607f821691505b60208210811415620009025762000901620008a3565b5b50919050565b60805160a051615e12620009586000396000818161166c0152612d95015260008181610c5801528181613bed01528181613cce01528181613cf501528181613d910152613db80152615e126000f3fe60806040526004361061028c5760003560e01c80636bc87c3a1161015a578063af465a27116100c1578063d543dbeb1161007a578063d543dbeb146109f3578063dd46706414610a1c578063dd62ed3e14610a45578063ea2f0b3714610a82578063ec28438a14610aab578063f2fde38b14610ad457610293565b8063af465a27146108f5578063b09f126614610920578063c0b0fda21461094b578063c49b9a8014610976578063cea269581461099f578063d28d8852146109c857610293565b80638da5cb5b116101135780638da5cb5b146107e55780638ee88c531461081057806395d89b4114610839578063a457c2d714610864578063a69df4b5146108a1578063a9059cbb146108b857610293565b80636bc87c3a146106d357806370a08231146106fe578063715018a61461073b57806375f0a874146107525780637d1db4a51461077d57806388f82020146107a857610293565b806332424aa3116101fe5780634549b039116101b75780634549b039146105b1578063457c194c146105ee57806349bd5a5e146106175780634a74bb021461064257806352390c021461066d5780635342acb41461069657610293565b806332424aa3146104a35780633685d419146104ce57806339509351146104f75780633b124fe7146105345780633bd5d1731461055f578063437823ec1461058857610293565b806318160ddd1161025057806318160ddd1461037f57806322461173146103aa57806322976e0d146103d357806323b872dd146103fe5780632d8381191461043b578063313ce5671461047857610293565b8063061c82d01461029857806306fdde03146102c1578063095ea7b3146102ec57806313114a9d146103295780631694505e1461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614ab0565b610afd565b005b3480156102cd57600080fd5b506102d6610b9c565b6040516102e39190614b76565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614bf6565b610c2e565b6040516103209190614c51565b60405180910390f35b34801561033557600080fd5b5061033e610c4c565b60405161034b9190614c7b565b60405180910390f35b34801561036057600080fd5b50610369610c56565b6040516103769190614cf5565b60405180910390f35b34801561038b57600080fd5b50610394610c7a565b6040516103a19190614c7b565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614d10565b610c84565b005b3480156103df57600080fd5b506103e8610d5d565b6040516103f59190614c7b565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614d3d565b610d63565b6040516104329190614c51565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190614ab0565b610e3c565b60405161046f9190614c7b565b60405180910390f35b34801561048457600080fd5b5061048d610eaa565b60405161049a9190614dac565b60405180910390f35b3480156104af57600080fd5b506104b8610ec1565b6040516104c59190614dac565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190614d10565b610ed4565b005b34801561050357600080fd5b5061051e60048036038101906105199190614bf6565b611223565b60405161052b9190614c51565b60405180910390f35b34801561054057600080fd5b506105496112d6565b6040516105569190614c7b565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614ab0565b6112dc565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614d10565b611457565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190614df3565b611547565b6040516105e59190614c7b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614ab0565b6115cb565b005b34801561062357600080fd5b5061062c61166a565b6040516106399190614e42565b60405180910390f35b34801561064e57600080fd5b5061065761168e565b6040516106649190614c51565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190614d10565b6116a1565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614d10565b6119d8565b6040516106ca9190614c51565b60405180910390f35b3480156106df57600080fd5b506106e8611a2e565b6040516106f59190614c7b565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614d10565b611a34565b6040516107329190614c7b565b60405180910390f35b34801561074757600080fd5b50610750611b1f565b005b34801561075e57600080fd5b50610767611c72565b6040516107749190614e42565b60405180910390f35b34801561078957600080fd5b50610792611c98565b60405161079f9190614c7b565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190614d10565b611c9e565b6040516107dc9190614c51565b60405180910390f35b3480156107f157600080fd5b506107fa611cf4565b6040516108079190614e42565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614ab0565b611d1d565b005b34801561084557600080fd5b5061084e611dbc565b60405161085b9190614b76565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614bf6565b611e4e565b6040516108989190614c51565b60405180910390f35b3480156108ad57600080fd5b506108b6611f1b565b005b3480156108c457600080fd5b506108df60048036038101906108da9190614bf6565b6120ef565b6040516108ec9190614c51565b60405180910390f35b34801561090157600080fd5b5061090a61210d565b6040516109179190614c7b565b60405180910390f35b34801561092c57600080fd5b50610935612113565b6040516109429190614b76565b60405180910390f35b34801561095757600080fd5b506109606121a1565b60405161096d9190614c7b565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614e5d565b6121a7565b005b3480156109ab57600080fd5b506109c660048036038101906109c19190614ab0565b612290565b005b3480156109d457600080fd5b506109dd61232f565b6040516109ea9190614b76565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190614ab0565b6123bd565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190614ab0565b6124c6565b005b348015610a5157600080fd5b50610a6c6004803603810190610a679190614e8a565b61268d565b604051610a799190614c7b565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614d10565b612714565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614ab0565b612804565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614d10565b6128a3565b005b610b05612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990614f16565b60405180910390fd5b80600f8190555050565b6060600c8054610bab90614f65565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790614f65565b8015610c245780601f10610bf957610100808354040283529160200191610c24565b820191906000526020600020905b815481529060010190602001808311610c0757829003601f168201915b5050505050905090565b6000610c42610c3b612a65565b8484612a6d565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b610c8c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614f16565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610d70848484612c38565b610e3184610d7c612a65565b610e2c85604051806060016040528060288152602001615d9060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610de2612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e229092919063ffffffff16565b612a6d565b600190509392505050565b6000600a54821115610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90615009565b60405180910390fd5b6000610e8d612e86565b9050610ea28184612eb190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b610edc612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090614f16565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90615075565b60405180910390fd5b60005b60088054905081101561121f578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110305761102f615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561120c576008600160088054905061108b91906150f3565b8154811061109c5761109b615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106110db576110da615095565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806111d2576111d1615127565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561121f565b808061121790615156565b915050610ff8565b5050565b60006112cc611230612a65565b846112c78560056000611241612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b612a6d565b6001905092915050565b600f5481565b60006112e6612a65565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90615211565b60405180910390fd5b600061138083612f59565b505050505090506113d981600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061143181600a54612fb590919063ffffffff16565b600a8190555061144c83600b54612efb90919063ffffffff16565b600b81905550505050565b61145f612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614f16565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561158e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115859061527d565b60405180910390fd5b816115ae57600061159e84612f59565b50505050509050809150506115c5565b60006115b984612f59565b50505050915050809150505b92915050565b6115d3612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614f16565b60405180910390fd5b8060158190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b6116a9612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614f16565b60405180910390fd5b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b09061530f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90615075565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561191a576118d6600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3c565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acf57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b1a565b611b17600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3c565b90505b919050565b611b27612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90614f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d25612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614f16565b60405180910390fd5b8060118190555050565b6060600d8054611dcb90614f65565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614f65565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050505050905090565b6000611f11611e5b612a65565b84611f0c85604051806060016040528060258152602001615db86025913960056000611e85612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e229092919063ffffffff16565b612a6d565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa2906153a1565b60405180910390fd5b6002544211611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe69061540d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121036120fc612a65565b8484612c38565b6001905092915050565b60095481565b600d805461212090614f65565b80601f016020809104026020016040519081016040528092919081815260200182805461214c90614f65565b80156121995780601f1061216e57610100808354040283529160200191612199565b820191906000526020600020905b81548152906001019060200180831161217c57829003601f168201915b505050505081565b60135481565b6121af612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614f16565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122859190614c51565b60405180910390a150565b612298612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614f16565b60405180910390fd5b8060138190555050565b600c805461233c90614f65565b80601f016020809104026020016040519081016040528092919081815260200182805461236890614f65565b80156123b55780601f1061238a576101008083540402835291602001916123b5565b820191906000526020600020905b81548152906001019060200180831161239857829003601f168201915b505050505081565b6123c5612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990614f16565b60405180910390fd5b60018111612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061549f565b60405180910390fd5b6124bd60646124af83600954612fff90919063ffffffff16565b612eb190919063ffffffff16565b60198190555050565b6124ce612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614f16565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261260991906154bf565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61271c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614f16565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61280c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289090614f16565b60405180910390fd5b8060198190555050565b6128ab612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299f90615587565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad490615619565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b44906156ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2b9190614c7b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9f9061573d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f906157cf565b60405180910390fd5b60008111612d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5290615861565b60405180910390fd5b6000612d6630611a34565b90506000601a548210159050808015612d8c5750601860009054906101000a900460ff16155b8015612de457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfc5750601860019054906101000a900460ff165b15612e1057601a549150612e0f8261307a565b5b612e1b858585613150565b5050505050565b6000838311158290612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e619190614b76565b60405180910390fd5b5060008385612e7991906150f3565b9050809150509392505050565b6000806000612e93613755565b91509150612eaa8183612eb190919063ffffffff16565b9250505090565b6000612ef383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a08565b905092915050565b6000808284612f0a91906154bf565b905083811015612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f46906158cd565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612f708a613a6b565b9250925092506000806000612f8e8d8686612f89612e86565b613ac5565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ff783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e22565b905092915050565b6000808314156130125760009050613074565b6000828461302091906158ed565b905082848261302f9190615976565b1461306f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306690615a19565b60405180910390fd5b809150505b92915050565b6001601860006101000a81548160ff02191690831515021790555060006130ab600283612eb190919063ffffffff16565b905060006130c28284612fb590919063ffffffff16565b905060004790506130d283613b4e565b60006130e78247612fb590919063ffffffff16565b90506130f38382613d8b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161312693929190615a39565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131f15750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613203576131fe613e6c565b613249565b601954811115613248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323f90615ae2565b60405180910390fd5b5b6000613273606461326560135485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050600061329f606461329160155486612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133445750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337d576133788585613373846133658789612fb590919063ffffffff16565b612fb590919063ffffffff16565b613e8e565b613644565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134205750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561345957613454858561344f846134418789612fb590919063ffffffff16565b612fb590919063ffffffff16565b6140ee565b613643565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134fd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353657613531858561352c8461351e8789612fb590919063ffffffff16565b612fb590919063ffffffff16565b61434e565b613642565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135d85750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136115761360c8585613607846135f98789612fb590919063ffffffff16565b612fb590919063ffffffff16565b614519565b613641565b613640858561363b8461362d8789612fb590919063ffffffff16565b612fb590919063ffffffff16565b61434e565b5b5b5b5b6000600f8190555060006011819055506136608560008461434e565b61368d85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361434e565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137405750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374e5761374d61480e565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156139cb5782600360006008848154811061378f5761378e615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061387d575081600460006008848154811061381557613814615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561389457600a5460095494509450505050613a04565b61392460036000600884815481106138af576138ae615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fb590919063ffffffff16565b92506139b6600460006008848154811061394157613940615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fb590919063ffffffff16565b915080806139c390615156565b915050613769565b506139e3600954600a54612eb190919063ffffffff16565b8210156139fb57600a54600954935093505050613a04565b81819350935050505b9091565b60008083118290613a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a469190614b76565b60405180910390fd5b5060008385613a5e9190615976565b9050809150509392505050565b600080600080613a7a85614834565b90506000613a8786614865565b90506000613ab082613aa2858a612fb590919063ffffffff16565b612fb590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ade8589612fff90919063ffffffff16565b90506000613af58689612fff90919063ffffffff16565b90506000613b0c8789612fff90919063ffffffff16565b90506000613b3582613b278587612fb590919063ffffffff16565b612fb590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b6b57613b6a615b02565b5b604051908082528060200260200182016040528015613b995781602001602082028036833780820191505090505b5090503081600081518110613bb157613bb0615095565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7a9190615b46565b81600181518110613c8e57613c8d615095565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cf3307f000000000000000000000000000000000000000000000000000000000000000084612a6d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d55959493929190615c6c565b600060405180830381600087803b158015613d6f57600080fd5b505af1158015613d83573d6000803e3d6000fd5b505050505050565b613db6307f000000000000000000000000000000000000000000000000000000000000000084612a6d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e00611cf4565b426040518863ffffffff1660e01b8152600401613e2296959493929190615cc6565b60606040518083038185885af1158015613e40573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e659190615d3c565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b600080600080600080613ea087612f59565b955095509550955095509550613efe87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407481614896565b61407e8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140db9190614c7b565b60405180910390a3505050505050505050565b60008060008060008061410087612f59565b95509550955095509550955061415e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141f383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d481614896565b6142de8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161433b9190614c7b565b60405180910390a3505050505050505050565b60008060008060008061436087612f59565b9550955095509550955095506143be86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f81614896565b6144a98483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145069190614c7b565b60405180910390a3505050505050505050565b60008060008060008061452b87612f59565b95509550955095509550955061458987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146b383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479481614896565b61479e8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516147fb9190614c7b565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601754601581905550565b600061485e6064614850600f5485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050919050565b600061488f606461488160115485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050919050565b60006148a0612e86565b905060006148b78284612fff90919063ffffffff16565b905061490b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614a36576149f283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a5082600a54612fb590919063ffffffff16565b600a81905550614a6b81600b54612efb90919063ffffffff16565b600b819055505050565b600080fd5b6000819050919050565b614a8d81614a7a565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600060208284031215614ac657614ac5614a75565b5b6000614ad484828501614a9b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b17578082015181840152602081019050614afc565b83811115614b26576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b4882614add565b614b528185614ae8565b9350614b62818560208601614af9565b614b6b81614b2c565b840191505092915050565b60006020820190508181036000830152614b908184614b3d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614bc382614b98565b9050919050565b614bd381614bb8565b8114614bde57600080fd5b50565b600081359050614bf081614bca565b92915050565b60008060408385031215614c0d57614c0c614a75565b5b6000614c1b85828601614be1565b9250506020614c2c85828601614a9b565b9150509250929050565b60008115159050919050565b614c4b81614c36565b82525050565b6000602082019050614c666000830184614c42565b92915050565b614c7581614a7a565b82525050565b6000602082019050614c906000830184614c6c565b92915050565b6000819050919050565b6000614cbb614cb6614cb184614b98565b614c96565b614b98565b9050919050565b6000614ccd82614ca0565b9050919050565b6000614cdf82614cc2565b9050919050565b614cef81614cd4565b82525050565b6000602082019050614d0a6000830184614ce6565b92915050565b600060208284031215614d2657614d25614a75565b5b6000614d3484828501614be1565b91505092915050565b600080600060608486031215614d5657614d55614a75565b5b6000614d6486828701614be1565b9350506020614d7586828701614be1565b9250506040614d8686828701614a9b565b9150509250925092565b600060ff82169050919050565b614da681614d90565b82525050565b6000602082019050614dc16000830184614d9d565b92915050565b614dd081614c36565b8114614ddb57600080fd5b50565b600081359050614ded81614dc7565b92915050565b60008060408385031215614e0a57614e09614a75565b5b6000614e1885828601614a9b565b9250506020614e2985828601614dde565b9150509250929050565b614e3c81614bb8565b82525050565b6000602082019050614e576000830184614e33565b92915050565b600060208284031215614e7357614e72614a75565b5b6000614e8184828501614dde565b91505092915050565b60008060408385031215614ea157614ea0614a75565b5b6000614eaf85828601614be1565b9250506020614ec085828601614be1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f00602083614ae8565b9150614f0b82614eca565b602082019050919050565b60006020820190508181036000830152614f2f81614ef3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f7d57607f821691505b60208210811415614f9157614f90614f36565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ff3602a83614ae8565b9150614ffe82614f97565b604082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061505f601b83614ae8565b915061506a82615029565b602082019050919050565b6000602082019050818103600083015261508e81615052565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150fe82614a7a565b915061510983614a7a565b92508282101561511c5761511b6150c4565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061516182614a7a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615194576151936150c4565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006151fb602c83614ae8565b91506152068261519f565b604082019050919050565b6000602082019050818103600083015261522a816151ee565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615267601f83614ae8565b915061527282615231565b602082019050919050565b600060208201905081810360008301526152968161525a565b9050919050565b7f57652063616e206e6f74206578636c7564652050616e63616b6520726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b60006152f9602283614ae8565b91506153048261529d565b604082019050919050565b60006020820190508181036000830152615328816152ec565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061538b602383614ae8565b91506153968261532f565b604082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006153f7601f83614ae8565b9150615402826153c1565b602082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b6000615489603383614ae8565b91506154948261542d565b604082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b60006154ca82614a7a565b91506154d583614a7a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561550a576155096150c4565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615571602683614ae8565b915061557c82615515565b604082019050919050565b600060208201905081810360008301526155a081615564565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615603602483614ae8565b915061560e826155a7565b604082019050919050565b60006020820190508181036000830152615632816155f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615695602283614ae8565b91506156a082615639565b604082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615727602583614ae8565b9150615732826156cb565b604082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602383614ae8565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061584b602983614ae8565b9150615856826157ef565b604082019050919050565b6000602082019050818103600083015261587a8161583e565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158b7601b83614ae8565b91506158c282615881565b602082019050919050565b600060208201905081810360008301526158e6816158aa565b9050919050565b60006158f882614a7a565b915061590383614a7a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561593c5761593b6150c4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061598182614a7a565b915061598c83614a7a565b92508261599c5761599b615947565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a03602183614ae8565b9150615a0e826159a7565b604082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b6000606082019050615a4e6000830186614c6c565b615a5b6020830185614c6c565b615a686040830184614c6c565b949350505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615acc602883614ae8565b9150615ad782615a70565b604082019050919050565b60006020820190508181036000830152615afb81615abf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615b4081614bca565b92915050565b600060208284031215615b5c57615b5b614a75565b5b6000615b6a84828501615b31565b91505092915050565b6000819050919050565b6000615b98615b93615b8e84615b73565b614c96565b614a7a565b9050919050565b615ba881615b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615be381614bb8565b82525050565b6000615bf58383615bda565b60208301905092915050565b6000602082019050919050565b6000615c1982615bae565b615c238185615bb9565b9350615c2e83615bca565b8060005b83811015615c5f578151615c468882615be9565b9750615c5183615c01565b925050600181019050615c32565b5085935050505092915050565b600060a082019050615c816000830188614c6c565b615c8e6020830187615b9f565b8181036040830152615ca08186615c0e565b9050615caf6060830185614e33565b615cbc6080830184614c6c565b9695505050505050565b600060c082019050615cdb6000830189614e33565b615ce86020830188614c6c565b615cf56040830187615b9f565b615d026060830186615b9f565b615d0f6080830185614e33565b615d1c60a0830184614c6c565b979650505050505050565b600081519050615d3681614a84565b92915050565b600080600060608486031215615d5557615d54614a75565b5b6000615d6386828701615d27565b9350506020615d7486828701615d27565b9250506040615d8586828701615d27565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021e18426fc3b6533500d4a4de7597ac13904d465e948136ff04367291bbb7e8464736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c80636bc87c3a1161015a578063af465a27116100c1578063d543dbeb1161007a578063d543dbeb146109f3578063dd46706414610a1c578063dd62ed3e14610a45578063ea2f0b3714610a82578063ec28438a14610aab578063f2fde38b14610ad457610293565b8063af465a27146108f5578063b09f126614610920578063c0b0fda21461094b578063c49b9a8014610976578063cea269581461099f578063d28d8852146109c857610293565b80638da5cb5b116101135780638da5cb5b146107e55780638ee88c531461081057806395d89b4114610839578063a457c2d714610864578063a69df4b5146108a1578063a9059cbb146108b857610293565b80636bc87c3a146106d357806370a08231146106fe578063715018a61461073b57806375f0a874146107525780637d1db4a51461077d57806388f82020146107a857610293565b806332424aa3116101fe5780634549b039116101b75780634549b039146105b1578063457c194c146105ee57806349bd5a5e146106175780634a74bb021461064257806352390c021461066d5780635342acb41461069657610293565b806332424aa3146104a35780633685d419146104ce57806339509351146104f75780633b124fe7146105345780633bd5d1731461055f578063437823ec1461058857610293565b806318160ddd1161025057806318160ddd1461037f57806322461173146103aa57806322976e0d146103d357806323b872dd146103fe5780632d8381191461043b578063313ce5671461047857610293565b8063061c82d01461029857806306fdde03146102c1578063095ea7b3146102ec57806313114a9d146103295780631694505e1461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614ab0565b610afd565b005b3480156102cd57600080fd5b506102d6610b9c565b6040516102e39190614b76565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614bf6565b610c2e565b6040516103209190614c51565b60405180910390f35b34801561033557600080fd5b5061033e610c4c565b60405161034b9190614c7b565b60405180910390f35b34801561036057600080fd5b50610369610c56565b6040516103769190614cf5565b60405180910390f35b34801561038b57600080fd5b50610394610c7a565b6040516103a19190614c7b565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190614d10565b610c84565b005b3480156103df57600080fd5b506103e8610d5d565b6040516103f59190614c7b565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614d3d565b610d63565b6040516104329190614c51565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190614ab0565b610e3c565b60405161046f9190614c7b565b60405180910390f35b34801561048457600080fd5b5061048d610eaa565b60405161049a9190614dac565b60405180910390f35b3480156104af57600080fd5b506104b8610ec1565b6040516104c59190614dac565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190614d10565b610ed4565b005b34801561050357600080fd5b5061051e60048036038101906105199190614bf6565b611223565b60405161052b9190614c51565b60405180910390f35b34801561054057600080fd5b506105496112d6565b6040516105569190614c7b565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614ab0565b6112dc565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614d10565b611457565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190614df3565b611547565b6040516105e59190614c7b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614ab0565b6115cb565b005b34801561062357600080fd5b5061062c61166a565b6040516106399190614e42565b60405180910390f35b34801561064e57600080fd5b5061065761168e565b6040516106649190614c51565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190614d10565b6116a1565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614d10565b6119d8565b6040516106ca9190614c51565b60405180910390f35b3480156106df57600080fd5b506106e8611a2e565b6040516106f59190614c7b565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614d10565b611a34565b6040516107329190614c7b565b60405180910390f35b34801561074757600080fd5b50610750611b1f565b005b34801561075e57600080fd5b50610767611c72565b6040516107749190614e42565b60405180910390f35b34801561078957600080fd5b50610792611c98565b60405161079f9190614c7b565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190614d10565b611c9e565b6040516107dc9190614c51565b60405180910390f35b3480156107f157600080fd5b506107fa611cf4565b6040516108079190614e42565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614ab0565b611d1d565b005b34801561084557600080fd5b5061084e611dbc565b60405161085b9190614b76565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614bf6565b611e4e565b6040516108989190614c51565b60405180910390f35b3480156108ad57600080fd5b506108b6611f1b565b005b3480156108c457600080fd5b506108df60048036038101906108da9190614bf6565b6120ef565b6040516108ec9190614c51565b60405180910390f35b34801561090157600080fd5b5061090a61210d565b6040516109179190614c7b565b60405180910390f35b34801561092c57600080fd5b50610935612113565b6040516109429190614b76565b60405180910390f35b34801561095757600080fd5b506109606121a1565b60405161096d9190614c7b565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614e5d565b6121a7565b005b3480156109ab57600080fd5b506109c660048036038101906109c19190614ab0565b612290565b005b3480156109d457600080fd5b506109dd61232f565b6040516109ea9190614b76565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190614ab0565b6123bd565b005b348015610a2857600080fd5b50610a436004803603810190610a3e9190614ab0565b6124c6565b005b348015610a5157600080fd5b50610a6c6004803603810190610a679190614e8a565b61268d565b604051610a799190614c7b565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614d10565b612714565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614ab0565b612804565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614d10565b6128a3565b005b610b05612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990614f16565b60405180910390fd5b80600f8190555050565b6060600c8054610bab90614f65565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790614f65565b8015610c245780601f10610bf957610100808354040283529160200191610c24565b820191906000526020600020905b815481529060010190602001808311610c0757829003601f168201915b5050505050905090565b6000610c42610c3b612a65565b8484612a6d565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b610c8c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614f16565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610d70848484612c38565b610e3184610d7c612a65565b610e2c85604051806060016040528060288152602001615d9060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610de2612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e229092919063ffffffff16565b612a6d565b600190509392505050565b6000600a54821115610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90615009565b60405180910390fd5b6000610e8d612e86565b9050610ea28184612eb190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b610edc612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090614f16565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90615075565b60405180910390fd5b60005b60088054905081101561121f578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110305761102f615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561120c576008600160088054905061108b91906150f3565b8154811061109c5761109b615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106110db576110da615095565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806111d2576111d1615127565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561121f565b808061121790615156565b915050610ff8565b5050565b60006112cc611230612a65565b846112c78560056000611241612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b612a6d565b6001905092915050565b600f5481565b60006112e6612a65565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90615211565b60405180910390fd5b600061138083612f59565b505050505090506113d981600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061143181600a54612fb590919063ffffffff16565b600a8190555061144c83600b54612efb90919063ffffffff16565b600b81905550505050565b61145f612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614f16565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561158e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115859061527d565b60405180910390fd5b816115ae57600061159e84612f59565b50505050509050809150506115c5565b60006115b984612f59565b50505050915050809150505b92915050565b6115d3612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790614f16565b60405180910390fd5b8060158190555050565b7f00000000000000000000000040ae4ceefdba4fa335d3482b4154846dc087f66781565b601860019054906101000a900460ff1681565b6116a9612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614f16565b60405180910390fd5b7310ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b09061530f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90615075565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561191a576118d6600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3c565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acf57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b1a565b611b17600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e3c565b90505b919050565b611b27612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90614f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d25612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990614f16565b60405180910390fd5b8060118190555050565b6060600d8054611dcb90614f65565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614f65565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050505050905090565b6000611f11611e5b612a65565b84611f0c85604051806060016040528060258152602001615db86025913960056000611e85612a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e229092919063ffffffff16565b612a6d565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa2906153a1565b60405180910390fd5b6002544211611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe69061540d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121036120fc612a65565b8484612c38565b6001905092915050565b60095481565b600d805461212090614f65565b80601f016020809104026020016040519081016040528092919081815260200182805461214c90614f65565b80156121995780601f1061216e57610100808354040283529160200191612199565b820191906000526020600020905b81548152906001019060200180831161217c57829003601f168201915b505050505081565b60135481565b6121af612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614f16565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122859190614c51565b60405180910390a150565b612298612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614f16565b60405180910390fd5b8060138190555050565b600c805461233c90614f65565b80601f016020809104026020016040519081016040528092919081815260200182805461236890614f65565b80156123b55780601f1061238a576101008083540402835291602001916123b5565b820191906000526020600020905b81548152906001019060200180831161239857829003601f168201915b505050505081565b6123c5612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990614f16565b60405180910390fd5b60018111612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c9061549f565b60405180910390fd5b6124bd60646124af83600954612fff90919063ffffffff16565b612eb190919063ffffffff16565b60198190555050565b6124ce612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614f16565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261260991906154bf565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61271c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614f16565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61280c612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289090614f16565b60405180910390fd5b8060198190555050565b6128ab612a65565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292f90614f16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299f90615587565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad490615619565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b44906156ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2b9190614c7b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9f9061573d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f906157cf565b60405180910390fd5b60008111612d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5290615861565b60405180910390fd5b6000612d6630611a34565b90506000601a548210159050808015612d8c5750601860009054906101000a900460ff16155b8015612de457507f00000000000000000000000040ae4ceefdba4fa335d3482b4154846dc087f66773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfc5750601860019054906101000a900460ff165b15612e1057601a549150612e0f8261307a565b5b612e1b858585613150565b5050505050565b6000838311158290612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e619190614b76565b60405180910390fd5b5060008385612e7991906150f3565b9050809150509392505050565b6000806000612e93613755565b91509150612eaa8183612eb190919063ffffffff16565b9250505090565b6000612ef383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a08565b905092915050565b6000808284612f0a91906154bf565b905083811015612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f46906158cd565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612f708a613a6b565b9250925092506000806000612f8e8d8686612f89612e86565b613ac5565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ff783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e22565b905092915050565b6000808314156130125760009050613074565b6000828461302091906158ed565b905082848261302f9190615976565b1461306f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306690615a19565b60405180910390fd5b809150505b92915050565b6001601860006101000a81548160ff02191690831515021790555060006130ab600283612eb190919063ffffffff16565b905060006130c28284612fb590919063ffffffff16565b905060004790506130d283613b4e565b60006130e78247612fb590919063ffffffff16565b90506130f38382613d8b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161312693929190615a39565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131f15750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613203576131fe613e6c565b613249565b601954811115613248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323f90615ae2565b60405180910390fd5b5b6000613273606461326560135485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050600061329f606461329160155486612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133445750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337d576133788585613373846133658789612fb590919063ffffffff16565b612fb590919063ffffffff16565b613e8e565b613644565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134205750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561345957613454858561344f846134418789612fb590919063ffffffff16565b612fb590919063ffffffff16565b6140ee565b613643565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134fd5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561353657613531858561352c8461351e8789612fb590919063ffffffff16565b612fb590919063ffffffff16565b61434e565b613642565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135d85750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136115761360c8585613607846135f98789612fb590919063ffffffff16565b612fb590919063ffffffff16565b614519565b613641565b613640858561363b8461362d8789612fb590919063ffffffff16565b612fb590919063ffffffff16565b61434e565b5b5b5b5b6000600f8190555060006011819055506136608560008461434e565b61368d85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361434e565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137405750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561374e5761374d61480e565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156139cb5782600360006008848154811061378f5761378e615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061387d575081600460006008848154811061381557613814615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561389457600a5460095494509450505050613a04565b61392460036000600884815481106138af576138ae615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612fb590919063ffffffff16565b92506139b6600460006008848154811061394157613940615095565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612fb590919063ffffffff16565b915080806139c390615156565b915050613769565b506139e3600954600a54612eb190919063ffffffff16565b8210156139fb57600a54600954935093505050613a04565b81819350935050505b9091565b60008083118290613a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a469190614b76565b60405180910390fd5b5060008385613a5e9190615976565b9050809150509392505050565b600080600080613a7a85614834565b90506000613a8786614865565b90506000613ab082613aa2858a612fb590919063ffffffff16565b612fb590919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ade8589612fff90919063ffffffff16565b90506000613af58689612fff90919063ffffffff16565b90506000613b0c8789612fff90919063ffffffff16565b90506000613b3582613b278587612fb590919063ffffffff16565b612fb590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b6b57613b6a615b02565b5b604051908082528060200260200182016040528015613b995781602001602082028036833780820191505090505b5090503081600081518110613bb157613bb0615095565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7a9190615b46565b81600181518110613c8e57613c8d615095565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cf3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a6d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d55959493929190615c6c565b600060405180830381600087803b158015613d6f57600080fd5b505af1158015613d83573d6000803e3d6000fd5b505050505050565b613db6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a6d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e00611cf4565b426040518863ffffffff1660e01b8152600401613e2296959493929190615cc6565b60606040518083038185885af1158015613e40573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e659190615d3c565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b600080600080600080613ea087612f59565b955095509550955095509550613efe87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407481614896565b61407e8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140db9190614c7b565b60405180910390a3505050505050505050565b60008060008060008061410087612f59565b95509550955095509550955061415e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141f383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142d481614896565b6142de8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161433b9190614c7b565b60405180910390a3505050505050505050565b60008060008060008061436087612f59565b9550955095509550955095506143be86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f81614896565b6144a98483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145069190614c7b565b60405180910390a3505050505050505050565b60008060008060008061452b87612f59565b95509550955095509550955061458987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061461e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146b383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479481614896565b61479e8483614a3b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516147fb9190614c7b565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601754601581905550565b600061485e6064614850600f5485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050919050565b600061488f606461488160115485612fff90919063ffffffff16565b612eb190919063ffffffff16565b9050919050565b60006148a0612e86565b905060006148b78284612fff90919063ffffffff16565b905061490b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614a36576149f283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612efb90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614a5082600a54612fb590919063ffffffff16565b600a81905550614a6b81600b54612efb90919063ffffffff16565b600b819055505050565b600080fd5b6000819050919050565b614a8d81614a7a565b8114614a9857600080fd5b50565b600081359050614aaa81614a84565b92915050565b600060208284031215614ac657614ac5614a75565b5b6000614ad484828501614a9b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b17578082015181840152602081019050614afc565b83811115614b26576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b4882614add565b614b528185614ae8565b9350614b62818560208601614af9565b614b6b81614b2c565b840191505092915050565b60006020820190508181036000830152614b908184614b3d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614bc382614b98565b9050919050565b614bd381614bb8565b8114614bde57600080fd5b50565b600081359050614bf081614bca565b92915050565b60008060408385031215614c0d57614c0c614a75565b5b6000614c1b85828601614be1565b9250506020614c2c85828601614a9b565b9150509250929050565b60008115159050919050565b614c4b81614c36565b82525050565b6000602082019050614c666000830184614c42565b92915050565b614c7581614a7a565b82525050565b6000602082019050614c906000830184614c6c565b92915050565b6000819050919050565b6000614cbb614cb6614cb184614b98565b614c96565b614b98565b9050919050565b6000614ccd82614ca0565b9050919050565b6000614cdf82614cc2565b9050919050565b614cef81614cd4565b82525050565b6000602082019050614d0a6000830184614ce6565b92915050565b600060208284031215614d2657614d25614a75565b5b6000614d3484828501614be1565b91505092915050565b600080600060608486031215614d5657614d55614a75565b5b6000614d6486828701614be1565b9350506020614d7586828701614be1565b9250506040614d8686828701614a9b565b9150509250925092565b600060ff82169050919050565b614da681614d90565b82525050565b6000602082019050614dc16000830184614d9d565b92915050565b614dd081614c36565b8114614ddb57600080fd5b50565b600081359050614ded81614dc7565b92915050565b60008060408385031215614e0a57614e09614a75565b5b6000614e1885828601614a9b565b9250506020614e2985828601614dde565b9150509250929050565b614e3c81614bb8565b82525050565b6000602082019050614e576000830184614e33565b92915050565b600060208284031215614e7357614e72614a75565b5b6000614e8184828501614dde565b91505092915050565b60008060408385031215614ea157614ea0614a75565b5b6000614eaf85828601614be1565b9250506020614ec085828601614be1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f00602083614ae8565b9150614f0b82614eca565b602082019050919050565b60006020820190508181036000830152614f2f81614ef3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f7d57607f821691505b60208210811415614f9157614f90614f36565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ff3602a83614ae8565b9150614ffe82614f97565b604082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b600061505f601b83614ae8565b915061506a82615029565b602082019050919050565b6000602082019050818103600083015261508e81615052565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150fe82614a7a565b915061510983614a7a565b92508282101561511c5761511b6150c4565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061516182614a7a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615194576151936150c4565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b60006151fb602c83614ae8565b91506152068261519f565b604082019050919050565b6000602082019050818103600083015261522a816151ee565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615267601f83614ae8565b915061527282615231565b602082019050919050565b600060208201905081810360008301526152968161525a565b9050919050565b7f57652063616e206e6f74206578636c7564652050616e63616b6520726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b60006152f9602283614ae8565b91506153048261529d565b604082019050919050565b60006020820190508181036000830152615328816152ec565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061538b602383614ae8565b91506153968261532f565b604082019050919050565b600060208201905081810360008301526153ba8161537e565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006153f7601f83614ae8565b9150615402826153c1565b602082019050919050565b60006020820190508181036000830152615426816153ea565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b6000615489603383614ae8565b91506154948261542d565b604082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b60006154ca82614a7a565b91506154d583614a7a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561550a576155096150c4565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615571602683614ae8565b915061557c82615515565b604082019050919050565b600060208201905081810360008301526155a081615564565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615603602483614ae8565b915061560e826155a7565b604082019050919050565b60006020820190508181036000830152615632816155f6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615695602283614ae8565b91506156a082615639565b604082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615727602583614ae8565b9150615732826156cb565b604082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602383614ae8565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061584b602983614ae8565b9150615856826157ef565b604082019050919050565b6000602082019050818103600083015261587a8161583e565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158b7601b83614ae8565b91506158c282615881565b602082019050919050565b600060208201905081810360008301526158e6816158aa565b9050919050565b60006158f882614a7a565b915061590383614a7a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561593c5761593b6150c4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061598182614a7a565b915061598c83614a7a565b92508261599c5761599b615947565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a03602183614ae8565b9150615a0e826159a7565b604082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b6000606082019050615a4e6000830186614c6c565b615a5b6020830185614c6c565b615a686040830184614c6c565b949350505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615acc602883614ae8565b9150615ad782615a70565b604082019050919050565b60006020820190508181036000830152615afb81615abf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615b4081614bca565b92915050565b600060208284031215615b5c57615b5b614a75565b5b6000615b6a84828501615b31565b91505092915050565b6000819050919050565b6000615b98615b93615b8e84615b73565b614c96565b614a7a565b9050919050565b615ba881615b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615be381614bb8565b82525050565b6000615bf58383615bda565b60208301905092915050565b6000602082019050919050565b6000615c1982615bae565b615c238185615bb9565b9350615c2e83615bca565b8060005b83811015615c5f578151615c468882615be9565b9750615c5183615c01565b925050600181019050615c32565b5085935050505092915050565b600060a082019050615c816000830188614c6c565b615c8e6020830187615b9f565b8181036040830152615ca08186615c0e565b9050615caf6060830185614e33565b615cbc6080830184614c6c565b9695505050505050565b600060c082019050615cdb6000830189614e33565b615ce86020830188614c6c565b615cf56040830187615b9f565b615d026060830186615b9f565b615d0f6080830185614e33565b615d1c60a0830184614c6c565b979650505050505050565b600081519050615d3681614a84565b92915050565b600080600060608486031215615d5557615d54614a75565b5b6000615d6386828701615d27565b9350506020615d7486828701615d27565b9250506040615d8586828701615d27565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122021e18426fc3b6533500d4a4de7597ac13904d465e948136ff04367291bbb7e8464736f6c634300080a0033
Deployed Bytecode Sourcemap
26656:19736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31694:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29421:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30333:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31454:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27892:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29698:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45707:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27707:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30502:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32883:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29607:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33596:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30823:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32054:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45456:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32439:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31554:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27950:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28029:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33144:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38023:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27516:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29801:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17209:148;;;;;;;;;;;;;:::i;:::-;;27746:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31326:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16566:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31805:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29512:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31049:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18136:305;;;;;;;;;;;;;:::i;:::-;;30007:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27163:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27352:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27621:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46212:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31940:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27312:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45951:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17834:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30182:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45579:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45833:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17512:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31694:98;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31778:6:::1;31768:7;:16;;;;31694:98:::0;:::o;29421:83::-;29458:13;29491:5;29484:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29421:83;:::o;30333:161::-;30408:4;30425:39;30434:12;:10;:12::i;:::-;30448:7;30457:6;30425:8;:39::i;:::-;30482:4;30475:11;;30333:161;;;;:::o;31454:87::-;31496:7;31523:10;;31516:17;;31454:87;:::o;27892:51::-;;;:::o;29698:95::-;29751:7;29778;;29771:14;;29698:95;:::o;45707:114::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45804:9:::1;45786:15;;:27;;;;;;;;;;;;;;;;;;45707:114:::0;:::o;27707:32::-;;;;:::o;30502:313::-;30600:4;30617:36;30627:6;30635:9;30646:6;30617:9;:36::i;:::-;30664:121;30673:6;30681:12;:10;:12::i;:::-;30695:89;30733:6;30695:89;;;;;;;;;;;;;;;;;:11;:19;30707:6;30695:19;;;;;;;;;;;;;;;:33;30715:12;:10;:12::i;:::-;30695:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30664:8;:121::i;:::-;30803:4;30796:11;;30502:313;;;;;:::o;32883:253::-;32949:7;32988;;32977;:18;;32969:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33053:19;33076:10;:8;:10::i;:::-;33053:33;;33104:24;33116:11;33104:7;:11;;:24;;;;:::i;:::-;33097:31;;;32883:253;;;:::o;29607:83::-;29648:5;29673:9;;;;;;;;;;;29666:16;;29607:83;:::o;27388:26::-;;;;;;;;;;;;;:::o;33596:479::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33678:11:::1;:20;33690:7;33678:20;;;;;;;;;;;;;;;;;;;;;;;;;33670:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33746:9;33741:327;33765:9;:16;;;;33761:1;:20;33741:327;;;33823:7;33807:23;;:9;33817:1;33807:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;33803:254;;;33866:9;33895:1;33876:9;:16;;;;:20;;;;:::i;:::-;33866:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33851:9;33861:1;33851:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33935:1;33916:7;:16;33924:7;33916:16;;;;;;;;;;;;;;;:20;;;;33978:5;33955:11;:20;33967:7;33955:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34002:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34036:5;;33803:254;33783:3;;;;;:::i;:::-;;;;33741:327;;;;33596:479:::0;:::o;30823:218::-;30911:4;30928:83;30937:12;:10;:12::i;:::-;30951:7;30960:50;30999:10;30960:11;:25;30972:12;:10;:12::i;:::-;30960:25;;;;;;;;;;;;;;;:34;30986:7;30960:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30928:8;:83::i;:::-;31029:4;31022:11;;30823:218;;;;:::o;27428:26::-;;;;:::o;32054:377::-;32106:14;32123:12;:10;:12::i;:::-;32106:29;;32155:11;:19;32167:6;32155:19;;;;;;;;;;;;;;;;;;;;;;;;;32154:20;32146:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;32235:15;32259:19;32270:7;32259:10;:19::i;:::-;32234:44;;;;;;;32307:28;32327:7;32307;:15;32315:6;32307:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32289:7;:15;32297:6;32289:15;;;;;;;;;;;;;;;:46;;;;32356:20;32368:7;32356;;:11;;:20;;;;:::i;:::-;32346:7;:30;;;;32400:23;32415:7;32400:10;;:14;;:23;;;;:::i;:::-;32387:10;:36;;;;32095:336;;32054:377;:::o;45456:111::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45555:4:::1;45525:18;:27;45544:7;45525:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45456:111:::0;:::o;32439:436::-;32529:7;32568;;32557;:18;;32549:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32627:17;32622:246;;32662:15;32686:19;32697:7;32686:10;:19::i;:::-;32661:44;;;;;;;32727:7;32720:14;;;;;32622:246;32769:23;32800:19;32811:7;32800:10;:19::i;:::-;32767:52;;;;;;;32841:15;32834:22;;;32439:436;;;;;:::o;31554:128::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31659:15:::1;31643:13;:31;;;;31554:128:::0;:::o;27950:38::-;;;:::o;28029:40::-;;;;;;;;;;;;;:::o;33144:444::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33237:42:::1;33226:53;;:7;:53;;;;33218:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;33338:11;:20;33350:7;33338:20;;;;;;;;;;;;;;;;;;;;;;;;;33337:21;33329:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:1;33404:7;:16;33412:7;33404:16;;;;;;;;;;;;;;;;:20;33401:108;;;33460:37;33480:7;:16;33488:7;33480:16;;;;;;;;;;;;;;;;33460:19;:37::i;:::-;33441:7;:16;33449:7;33441:16;;;;;;;;;;;;;;;:56;;;;33401:108;33542:4;33519:11;:20;33531:7;33519:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33557:9;33572:7;33557:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33144:444:::0;:::o;38023:123::-;38087:4;38111:18;:27;38130:7;38111:27;;;;;;;;;;;;;;;;;;;;;;;;;38104:34;;38023:123;;;:::o;27516:32::-;;;;:::o;29801:198::-;29867:7;29891:11;:20;29903:7;29891:20;;;;;;;;;;;;;;;;;;;;;;;;;29887:49;;;29920:7;:16;29928:7;29920:16;;;;;;;;;;;;;;;;29913:23;;;;29887:49;29954:37;29974:7;:16;29982:7;29974:16;;;;;;;;;;;;;;;;29954:19;:37::i;:::-;29947:44;;29801:198;;;;:::o;17209:148::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17316:1:::1;17279:40;;17300:6;::::0;::::1;;;;;;;;17279:40;;;;;;;;;;;;17347:1;17330:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17209:148::o:0;27746:75::-;;;;;;;;;;;;;:::o;28078:56::-;;;;:::o;31326:120::-;31394:4;31418:11;:20;31430:7;31418:20;;;;;;;;;;;;;;;;;;;;;;;;;31411:27;;31326:120;;;:::o;16566:79::-;16604:7;16631:6;;;;;;;;;;;16624:13;;16566:79;:::o;31805:122::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31907:12:::1;31891:13;:28;;;;31805:122:::0;:::o;29512:87::-;29551:13;29584:7;29577:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29512:87;:::o;31049:269::-;31142:4;31159:129;31168:12;:10;:12::i;:::-;31182:7;31191:96;31230:15;31191:96;;;;;;;;;;;;;;;;;:11;:25;31203:12;:10;:12::i;:::-;31191:25;;;;;;;;;;;;;;;:34;31217:7;31191:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31159:8;:129::i;:::-;31306:4;31299:11;;31049:269;;;;:::o;18136:305::-;18206:10;18188:28;;:14;;;;;;;;;;;:28;;;18180:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18293:9;;18275:15;:27;18267:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18384:14;;;;;;;;;;;18355:44;;18376:6;;;;;;;;;;18355:44;;;;;;;;;;;;18419:14;;;;;;;;;;;18410:6;;:23;;;;;;;;;;;;;;;;;;18136:305::o;30007:167::-;30085:4;30102:42;30112:12;:10;:12::i;:::-;30126:9;30137:6;30102:9;:42::i;:::-;30162:4;30155:11;;30007:167;;;;:::o;27163:51::-;;;;:::o;27352:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27621:27::-;;;;:::o;46212:171::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46313:8:::1;46289:21;;:32;;;;;;;;;;;;;;;;;;46337:38;46366:8;46337:38;;;;;;:::i;:::-;;;;;;;;46212:171:::0;:::o;31940:102::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32027:7:::1;32016:8;:18;;;;31940:102:::0;:::o;27312:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45951:253::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46053:1:::1;46038:12;:16;46030:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46136:60;46180:5;46136:25;46148:12;46136:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;46121:12;:75;;;;45951:253:::0;:::o;17834:226::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17915:6:::1;::::0;::::1;;;;;;;;17898:14;;:23;;;;;;;;;;;;;;;;;;17949:1;17932:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17992:4;17974:15;:22;;;;:::i;:::-;17962:9;:34;;;;18049:1;18012:40;;18033:6;::::0;::::1;;;;;;;;18012:40;;;;;;;;;;;;17834:226:::0;:::o;30182:143::-;30263:7;30290:11;:18;30302:5;30290:18;;;;;;;;;;;;;;;:27;30309:7;30290:27;;;;;;;;;;;;;;;;30283:34;;30182:143;;;;:::o;45579:110::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45676:5:::1;45646:18;:27;45665:7;45646:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;45579:110:::0;:::o;45833:112::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45925:11:::1;45910:12;:26;;;;45833:112:::0;:::o;17512:244::-;16788:12;:10;:12::i;:::-;16778:22;;:6;;;;;;;;;;:22;;;16770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17621:1:::1;17601:22;;:8;:22;;;;17593:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17711:8;17682:38;;17703:6;::::0;::::1;;;;;;;;17682:38;;;;;;;;;;;;17740:8;17731:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17512:244:::0;:::o;8975:115::-;9028:15;9071:10;9056:26;;8975:115;:::o;38154:337::-;38264:1;38247:19;;:5;:19;;;;38239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38345:1;38326:21;;:7;:21;;;;38318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38429:6;38399:11;:18;38411:5;38399:18;;;;;;;;;;;;;;;:27;38418:7;38399:27;;;;;;;;;;;;;;;:36;;;;38467:7;38451:32;;38460:5;38451:32;;;38476:6;38451:32;;;;;;:::i;:::-;;;;;;;;38154:337;;;:::o;38499:1234::-;38637:1;38621:18;;:4;:18;;;;38613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38714:1;38700:16;;:2;:16;;;;38692:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:1;38775:6;:10;38767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39126:28;39157:24;39175:4;39157:9;:24::i;:::-;39126:55;;39200:24;39251:29;;39227:20;:53;;39200:80;;39309:19;:53;;;;;39346:16;;;;;;;;;;;39345:17;39309:53;:91;;;;;39387:13;39379:21;;:4;:21;;;;39309:91;:129;;;;;39417:21;;;;;;;;;;;39309:129;39291:318;;;39488:29;;39465:52;;39561:36;39576:20;39561:14;:36::i;:::-;39291:318;39695:30;39710:4;39715:2;39718:6;39695:14;:30::i;:::-;38602:1131;;38499:1234;;;:::o;5385:192::-;5471:7;5504:1;5499;:6;;5507:12;5491:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5531:9;5547:1;5543;:5;;;;:::i;:::-;5531:17;;5568:1;5561:8;;;5385:192;;;;;:::o;36196:163::-;36237:7;36258:15;36275;36294:19;:17;:19::i;:::-;36257:56;;;;36331:20;36343:7;36331;:11;;:20;;;;:::i;:::-;36324:27;;;;36196:163;:::o;6783:132::-;6841:7;6868:39;6872:1;6875;6868:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6861:46;;6783:132;;;;:::o;4482:181::-;4540:7;4560:9;4576:1;4572;:5;;;;:::i;:::-;4560:17;;4601:1;4596;:6;;4588:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4654:1;4647:8;;;4482:181;;;;:::o;34994:419::-;35053:7;35062;35071;35080;35089;35098;35119:23;35144:12;35158:18;35180:20;35192:7;35180:11;:20::i;:::-;35118:82;;;;;;35212:15;35229:23;35254:12;35270:50;35282:7;35291:4;35297:10;35309;:8;:10::i;:::-;35270:11;:50::i;:::-;35211:109;;;;;;35339:7;35348:15;35365:4;35371:15;35388:4;35394:10;35331:74;;;;;;;;;;;;;;;;;;34994:419;;;;;;;:::o;4946:136::-;5004:7;5031:43;5035:1;5038;5031:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5024:50;;4946:136;;;;:::o;5836:471::-;5894:7;6144:1;6139;:6;6135:47;;;6169:1;6162:8;;;;6135:47;6194:9;6210:1;6206;:5;;;;:::i;:::-;6194:17;;6239:1;6234;6230;:5;;;;:::i;:::-;:10;6222:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6298:1;6291:8;;;5836:471;;;;;:::o;39741:985::-;28537:4;28518:16;;:23;;;;;;;;;;;;;;;;;;39877:12:::1;39892:27;39917:1;39892:20;:24;;:27;;;;:::i;:::-;39877:42;;39930:17;39950:30;39975:4;39950:20;:24;;:30;;;;:::i;:::-;39930:50;;40258:22;40283:21;40258:46;;40349:22;40366:4;40349:16;:22::i;:::-;40502:18;40523:41;40549:14;40523:21;:25;;:41;;;;:::i;:::-;40502:62;;40614:35;40627:9;40638:10;40614:12;:35::i;:::-;40675:43;40690:4;40696:10;40708:9;40675:43;;;;;;;;:::i;:::-;;;;;;;;39815:911;;;;28583:5:::0;28564:16;;:24;;;;;;;;;;;;;;;;;;39741:985;:::o;41925:1845::-;42022:18;:26;42041:6;42022:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;42052:18;:29;42071:9;42052:29;;;;;;;;;;;;;;;;;;;;;;;;;42022:59;42019:220;;;42097:14;:12;:14::i;:::-;42019:220;;;42170:12;;42160:6;:22;;42152:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42019:220;42313:15;42331:29;42356:3;42331:20;42342:8;;42331:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;42313:47;;42371:20;42394:34;42424:3;42394:25;42405:13;;42394:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42371:57;;42445:11;:19;42457:6;42445:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42469:11;:22;42481:9;42469:22;;;;;;;;;;;;;;;;;;;;;;;;;42468:23;42445:46;42441:762;;;42508:81;42530:6;42538:9;42550:37;42574:12;42550:19;42561:7;42550:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;42508:21;:81::i;:::-;42441:762;;;42612:11;:19;42624:6;42612:19;;;;;;;;;;;;;;;;;;;;;;;;;42611:20;:46;;;;;42635:11;:22;42647:9;42635:22;;;;;;;;;;;;;;;;;;;;;;;;;42611:46;42607:596;;;42674:79;42694:6;42702:9;42714:37;42738:12;42714:19;42725:7;42714:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;42674:19;:79::i;:::-;42607:596;;;42776:11;:19;42788:6;42776:19;;;;;;;;;;;;;;;;;;;;;;;;;42775:20;:47;;;;;42800:11;:22;42812:9;42800:22;;;;;;;;;;;;;;;;;;;;;;;;;42799:23;42775:47;42771:432;;;42839:77;42857:6;42865:9;42877:37;42901:12;42877:19;42888:7;42877:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;42839:17;:77::i;:::-;42771:432;;;42938:11;:19;42950:6;42938:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42961:11;:22;42973:9;42961:22;;;;;;;;;;;;;;;;;;;;;;;;;42938:45;42934:269;;;43000:81;43022:6;43030:9;43042:37;43066:12;43042:19;43053:7;43042:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;43000:21;:81::i;:::-;42934:269;;;43114:77;43132:6;43140:9;43152:37;43176:12;43152:19;43163:7;43152:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;43114:17;:77::i;:::-;42934:269;42771:432;42607:596;42441:762;43317:1;43307:7;:11;;;;43345:1;43329:13;:17;;;;43414:46;43432:6;43448:1;43452:7;43414:17;:46::i;:::-;43471:56;43489:6;43497:15;;;;;;;;;;;43514:12;43471:17;:56::i;:::-;43592:15;;43582:7;:25;;;;43634:21;;43618:13;:37;;;;43673:18;:26;43692:6;43673:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;43703:18;:29;43722:9;43703:29;;;;;;;;;;;;;;;;;;;;;;;;;43673:59;43670:92;;;43747:15;:13;:15::i;:::-;43670:92;42008:1762;;41925:1845;;;:::o;36367:561::-;36417:7;36426;36446:15;36464:7;;36446:25;;36482:15;36500:7;;36482:25;;36529:9;36524:289;36548:9;:16;;;;36544:1;:20;36524:289;;;36614:7;36590;:21;36598:9;36608:1;36598:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36590:21;;;;;;;;;;;;;;;;:31;:66;;;;36649:7;36625;:21;36633:9;36643:1;36633:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36625:21;;;;;;;;;;;;;;;;:31;36590:66;36586:97;;;36666:7;;36675;;36658:25;;;;;;;;;36586:97;36708:34;36720:7;:21;36728:9;36738:1;36728:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36720:21;;;;;;;;;;;;;;;;36708:7;:11;;:34;;;;:::i;:::-;36698:44;;36767:34;36779:7;:21;36787:9;36797:1;36787:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36779:21;;;;;;;;;;;;;;;;36767:7;:11;;:34;;;;:::i;:::-;36757:44;;36566:3;;;;;:::i;:::-;;;;36524:289;;;;36837:20;36849:7;;36837;;:11;;:20;;;;:::i;:::-;36827:7;:30;36823:61;;;36867:7;;36876;;36859:25;;;;;;;;36823:61;36903:7;36912;36895:25;;;;;;36367:561;;;:::o;7411:278::-;7497:7;7529:1;7525;:5;7532:12;7517:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7556:9;7572:1;7568;:5;;;;:::i;:::-;7556:17;;7680:1;7673:8;;;7411:278;;;;;:::o;35421:330::-;35481:7;35490;35499;35519:12;35534:24;35550:7;35534:15;:24::i;:::-;35519:39;;35569:18;35590:30;35612:7;35590:21;:30::i;:::-;35569:51;;35631:23;35657:33;35679:10;35657:17;35669:4;35657:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;35631:59;;35709:15;35726:4;35732:10;35701:42;;;;;;;;;35421:330;;;;;:::o;35759:429::-;35874:7;35883;35892;35912:15;35930:24;35942:11;35930:7;:11;;:24;;;;:::i;:::-;35912:42;;35965:12;35980:21;35989:11;35980:4;:8;;:21;;;;:::i;:::-;35965:36;;36012:18;36033:27;36048:11;36033:10;:14;;:27;;;;:::i;:::-;36012:48;;36071:23;36097:33;36119:10;36097:17;36109:4;36097:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36071:59;;36149:7;36158:15;36175:4;36141:39;;;;;;;;;;35759:429;;;;;;;;:::o;40734:589::-;40860:21;40898:1;40884:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40860:40;;40929:4;40911;40916:1;40911:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40955:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40945:4;40950:1;40945:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40990:62;41007:4;41022:15;41040:11;40990:8;:62::i;:::-;41091:15;:66;;;41172:11;41198:1;41242:4;41269;41289:15;41091:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40789:534;40734:589;:::o;41331:513::-;41479:62;41496:4;41511:15;41529:11;41479:8;:62::i;:::-;41584:15;:31;;;41623:9;41656:4;41676:11;41702:1;41745;41788:7;:5;:7::i;:::-;41810:15;41584:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41331:513;;:::o;37647:141::-;37700:1;37690:7;:11;;;;37728:1;37712:13;:17;;;;37751:1;37740:8;:12;;;;37779:1;37763:13;:17;;;;37647:141::o;44882:566::-;44985:15;45002:23;45027:12;45041:23;45066:12;45080:18;45102:19;45113:7;45102:10;:19::i;:::-;44984:137;;;;;;;;;;;;45150:28;45170:7;45150;:15;45158:6;45150:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45132:7;:15;45140:6;45132:15;;;;;;;;;;;;;;;:46;;;;45207:28;45227:7;45207;:15;45215:6;45207:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45189:7;:15;45197:6;45189:15;;;;;;;;;;;;;;;:46;;;;45267:39;45290:15;45267:7;:18;45275:9;45267:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45246:7;:18;45254:9;45246:18;;;;;;;;;;;;;;;:60;;;;45320:26;45335:10;45320:14;:26::i;:::-;45357:23;45369:4;45375;45357:11;:23::i;:::-;45413:9;45396:44;;45405:6;45396:44;;;45424:15;45396:44;;;;;;:::i;:::-;;;;;;;;44973:475;;;;;;44882:566;;;:::o;44288:586::-;44389:15;44406:23;44431:12;44445:23;44470:12;44484:18;44506:19;44517:7;44506:10;:19::i;:::-;44388:137;;;;;;;;;;;;44554:28;44574:7;44554;:15;44562:6;44554:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44536:7;:15;44544:6;44536:15;;;;;;;;;;;;;;;:46;;;;44614:39;44637:15;44614:7;:18;44622:9;44614:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44593:7;:18;44601:9;44593:18;;;;;;;;;;;;;;;:60;;;;44685:39;44708:15;44685:7;:18;44693:9;44685:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44664:7;:18;44672:9;44664:18;;;;;;;;;;;;;;;:60;;;;44746:26;44761:10;44746:14;:26::i;:::-;44783:23;44795:4;44801;44783:11;:23::i;:::-;44839:9;44822:44;;44831:6;44822:44;;;44850:15;44822:44;;;;;;:::i;:::-;;;;;;;;44377:497;;;;;;44288:586;;;:::o;43778:502::-;43877:15;43894:23;43919:12;43933:23;43958:12;43972:18;43994:19;44005:7;43994:10;:19::i;:::-;43876:137;;;;;;;;;;;;44042:28;44062:7;44042;:15;44050:6;44042:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44024:7;:15;44032:6;44024:15;;;;;;;;;;;;;;;:46;;;;44102:39;44125:15;44102:7;:18;44110:9;44102:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44081:7;:18;44089:9;44081:18;;;;;;;;;;;;;;;:60;;;;44152:26;44167:10;44152:14;:26::i;:::-;44189:23;44201:4;44207;44189:11;:23::i;:::-;44245:9;44228:44;;44237:6;44228:44;;;44256:15;44228:44;;;;;;:::i;:::-;;;;;;;;43865:415;;;;;;43778:502;;;:::o;34083:642::-;34186:15;34203:23;34228:12;34242:23;34267:12;34281:18;34303:19;34314:7;34303:10;:19::i;:::-;34185:137;;;;;;;;;;;;34351:28;34371:7;34351;:15;34359:6;34351:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34333:7;:15;34341:6;34333:15;;;;;;;;;;;;;;;:46;;;;34408:28;34428:7;34408;:15;34416:6;34408:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34390:7;:15;34398:6;34390:15;;;;;;;;;;;;;;;:46;;;;34468:39;34491:15;34468:7;:18;34476:9;34468:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34447:7;:18;34455:9;34447:18;;;;;;;;;;;;;;;:60;;;;34539:39;34562:15;34539:7;:18;34547:9;34539:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34518:7;:18;34526:9;34518:18;;;;;;;;;;;;;;;:60;;;;34597:26;34612:10;34597:14;:26::i;:::-;34634:23;34646:4;34652;34634:11;:23::i;:::-;34690:9;34673:44;;34682:6;34673:44;;;34701:15;34673:44;;;;;;:::i;:::-;;;;;;;;34174:551;;;;;;34083:642;;;:::o;37800:211::-;37854:15;;37844:7;:25;;;;37896:21;;37880:13;:37;;;;37939:16;;37928:8;:27;;;;37982:21;;37966:13;:37;;;;37800:211::o;37307:154::-;37371:7;37398:55;37437:5;37398:20;37410:7;;37398;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37391:62;;37307:154;;;:::o;37469:166::-;37539:7;37566:61;37611:5;37566:26;37578:13;;37566:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37559:68;;37469:166;;;:::o;36940:355::-;37003:19;37026:10;:8;:10::i;:::-;37003:33;;37047:18;37068:27;37083:11;37068:10;:14;;:27;;;;:::i;:::-;37047:48;;37131:38;37158:10;37131:7;:22;37147:4;37131:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37106:7;:22;37122:4;37106:22;;;;;;;;;;;;;;;:63;;;;37183:11;:26;37203:4;37183:26;;;;;;;;;;;;;;;;;;;;;;;;;37180:107;;;37249:38;37276:10;37249:7;:22;37265:4;37249:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37224:7;:22;37240:4;37224:22;;;;;;;;;;;;;;;:63;;;;37180:107;36992:303;;36940:355;:::o;34839:147::-;34917:17;34929:4;34917:7;;:11;;:17;;;;:::i;:::-;34907:7;:27;;;;34958:20;34973:4;34958:10;;:14;;:20;;;;:::i;:::-;34945:10;:33;;;;34839:147;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:116::-;6619:21;6634:5;6619:21;:::i;:::-;6612:5;6609:32;6599:60;;6655:1;6652;6645:12;6599:60;6549:116;:::o;6671:133::-;6714:5;6752:6;6739:20;6730:29;;6768:30;6792:5;6768:30;:::i;:::-;6671:133;;;;:::o;6810:468::-;6875:6;6883;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7058:1;7083:53;7128:7;7119:6;7108:9;7104:22;7083:53;:::i;:::-;7073:63;;7029:117;7185:2;7211:50;7253:7;7244:6;7233:9;7229:22;7211:50;:::i;:::-;7201:60;;7156:115;6810:468;;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:182::-;8585:34;8581:1;8573:6;8569:14;8562:58;8445:182;:::o;8633:366::-;8775:3;8796:67;8860:2;8855:3;8796:67;:::i;:::-;8789:74;;8872:93;8961:3;8872:93;:::i;:::-;8990:2;8985:3;8981:12;8974:19;;8633:366;;;:::o;9005:419::-;9171:4;9209:2;9198:9;9194:18;9186:26;;9258:9;9252:4;9248:20;9244:1;9233:9;9229:17;9222:47;9286:131;9412:4;9286:131;:::i;:::-;9278:139;;9005:419;;;:::o;9430:180::-;9478:77;9475:1;9468:88;9575:4;9572:1;9565:15;9599:4;9596:1;9589:15;9616:320;9660:6;9697:1;9691:4;9687:12;9677:22;;9744:1;9738:4;9734:12;9765:18;9755:81;;9821:4;9813:6;9809:17;9799:27;;9755:81;9883:2;9875:6;9872:14;9852:18;9849:38;9846:84;;;9902:18;;:::i;:::-;9846:84;9667:269;9616:320;;;:::o;9942:229::-;10082:34;10078:1;10070:6;10066:14;10059:58;10151:12;10146:2;10138:6;10134:15;10127:37;9942:229;:::o;10177:366::-;10319:3;10340:67;10404:2;10399:3;10340:67;:::i;:::-;10333:74;;10416:93;10505:3;10416:93;:::i;:::-;10534:2;10529:3;10525:12;10518:19;;10177:366;;;:::o;10549:419::-;10715:4;10753:2;10742:9;10738:18;10730:26;;10802:9;10796:4;10792:20;10788:1;10777:9;10773:17;10766:47;10830:131;10956:4;10830:131;:::i;:::-;10822:139;;10549:419;;;:::o;10974:177::-;11114:29;11110:1;11102:6;11098:14;11091:53;10974:177;:::o;11157:366::-;11299:3;11320:67;11384:2;11379:3;11320:67;:::i;:::-;11313:74;;11396:93;11485:3;11396:93;:::i;:::-;11514:2;11509:3;11505:12;11498:19;;11157:366;;;:::o;11529:419::-;11695:4;11733:2;11722:9;11718:18;11710:26;;11782:9;11776:4;11772:20;11768:1;11757:9;11753:17;11746:47;11810:131;11936:4;11810:131;:::i;:::-;11802:139;;11529:419;;;:::o;11954:180::-;12002:77;11999:1;11992:88;12099:4;12096:1;12089:15;12123:4;12120:1;12113:15;12140:180;12188:77;12185:1;12178:88;12285:4;12282:1;12275:15;12309:4;12306:1;12299:15;12326:191;12366:4;12386:20;12404:1;12386:20;:::i;:::-;12381:25;;12420:20;12438:1;12420:20;:::i;:::-;12415:25;;12459:1;12456;12453:8;12450:34;;;12464:18;;:::i;:::-;12450:34;12509:1;12506;12502:9;12494:17;;12326:191;;;;:::o;12523:180::-;12571:77;12568:1;12561:88;12668:4;12665:1;12658:15;12692:4;12689:1;12682:15;12709:233;12748:3;12771:24;12789:5;12771:24;:::i;:::-;12762:33;;12817:66;12810:5;12807:77;12804:103;;;12887:18;;:::i;:::-;12804:103;12934:1;12927:5;12923:13;12916:20;;12709:233;;;:::o;12948:231::-;13088:34;13084:1;13076:6;13072:14;13065:58;13157:14;13152:2;13144:6;13140:15;13133:39;12948:231;:::o;13185:366::-;13327:3;13348:67;13412:2;13407:3;13348:67;:::i;:::-;13341:74;;13424:93;13513:3;13424:93;:::i;:::-;13542:2;13537:3;13533:12;13526:19;;13185:366;;;:::o;13557:419::-;13723:4;13761:2;13750:9;13746:18;13738:26;;13810:9;13804:4;13800:20;13796:1;13785:9;13781:17;13774:47;13838:131;13964:4;13838:131;:::i;:::-;13830:139;;13557:419;;;:::o;13982:181::-;14122:33;14118:1;14110:6;14106:14;14099:57;13982:181;:::o;14169:366::-;14311:3;14332:67;14396:2;14391:3;14332:67;:::i;:::-;14325:74;;14408:93;14497:3;14408:93;:::i;:::-;14526:2;14521:3;14517:12;14510:19;;14169:366;;;:::o;14541:419::-;14707:4;14745:2;14734:9;14730:18;14722:26;;14794:9;14788:4;14784:20;14780:1;14769:9;14765:17;14758:47;14822:131;14948:4;14822:131;:::i;:::-;14814:139;;14541:419;;;:::o;14966:221::-;15106:34;15102:1;15094:6;15090:14;15083:58;15175:4;15170:2;15162:6;15158:15;15151:29;14966:221;:::o;15193:366::-;15335:3;15356:67;15420:2;15415:3;15356:67;:::i;:::-;15349:74;;15432:93;15521:3;15432:93;:::i;:::-;15550:2;15545:3;15541:12;15534:19;;15193:366;;;:::o;15565:419::-;15731:4;15769:2;15758:9;15754:18;15746:26;;15818:9;15812:4;15808:20;15804:1;15793:9;15789:17;15782:47;15846:131;15972:4;15846:131;:::i;:::-;15838:139;;15565:419;;;:::o;15990:222::-;16130:34;16126:1;16118:6;16114:14;16107:58;16199:5;16194:2;16186:6;16182:15;16175:30;15990:222;:::o;16218:366::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:419::-;16756:4;16794:2;16783:9;16779:18;16771:26;;16843:9;16837:4;16833:20;16829:1;16818:9;16814:17;16807:47;16871:131;16997:4;16871:131;:::i;:::-;16863:139;;16590:419;;;:::o;17015:181::-;17155:33;17151:1;17143:6;17139:14;17132:57;17015:181;:::o;17202:366::-;17344:3;17365:67;17429:2;17424:3;17365:67;:::i;:::-;17358:74;;17441:93;17530:3;17441:93;:::i;:::-;17559:2;17554:3;17550:12;17543:19;;17202:366;;;:::o;17574:419::-;17740:4;17778:2;17767:9;17763:18;17755:26;;17827:9;17821:4;17817:20;17813:1;17802:9;17798:17;17791:47;17855:131;17981:4;17855:131;:::i;:::-;17847:139;;17574:419;;;:::o;17999:238::-;18139:34;18135:1;18127:6;18123:14;18116:58;18208:21;18203:2;18195:6;18191:15;18184:46;17999:238;:::o;18243:366::-;18385:3;18406:67;18470:2;18465:3;18406:67;:::i;:::-;18399:74;;18482:93;18571:3;18482:93;:::i;:::-;18600:2;18595:3;18591:12;18584:19;;18243:366;;;:::o;18615:419::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:305::-;19080:3;19099:20;19117:1;19099:20;:::i;:::-;19094:25;;19133:20;19151:1;19133:20;:::i;:::-;19128:25;;19287:1;19219:66;19215:74;19212:1;19209:81;19206:107;;;19293:18;;:::i;:::-;19206:107;19337:1;19334;19330:9;19323:16;;19040:305;;;;:::o;19351:225::-;19491:34;19487:1;19479:6;19475:14;19468:58;19560:8;19555:2;19547:6;19543:15;19536:33;19351:225;:::o;19582:366::-;19724:3;19745:67;19809:2;19804:3;19745:67;:::i;:::-;19738:74;;19821:93;19910:3;19821:93;:::i;:::-;19939:2;19934:3;19930:12;19923:19;;19582:366;;;:::o;19954:419::-;20120:4;20158:2;20147:9;20143:18;20135:26;;20207:9;20201:4;20197:20;20193:1;20182:9;20178:17;20171:47;20235:131;20361:4;20235:131;:::i;:::-;20227:139;;19954:419;;;:::o;20379:223::-;20519:34;20515:1;20507:6;20503:14;20496:58;20588:6;20583:2;20575:6;20571:15;20564:31;20379:223;:::o;20608:366::-;20750:3;20771:67;20835:2;20830:3;20771:67;:::i;:::-;20764:74;;20847:93;20936:3;20847:93;:::i;:::-;20965:2;20960:3;20956:12;20949:19;;20608:366;;;:::o;20980:419::-;21146:4;21184:2;21173:9;21169:18;21161:26;;21233:9;21227:4;21223:20;21219:1;21208:9;21204:17;21197:47;21261:131;21387:4;21261:131;:::i;:::-;21253:139;;20980:419;;;:::o;21405:221::-;21545:34;21541:1;21533:6;21529:14;21522:58;21614:4;21609:2;21601:6;21597:15;21590:29;21405:221;:::o;21632:366::-;21774:3;21795:67;21859:2;21854:3;21795:67;:::i;:::-;21788:74;;21871:93;21960:3;21871:93;:::i;:::-;21989:2;21984:3;21980:12;21973:19;;21632:366;;;:::o;22004:419::-;22170:4;22208:2;22197:9;22193:18;22185:26;;22257:9;22251:4;22247:20;22243:1;22232:9;22228:17;22221:47;22285:131;22411:4;22285:131;:::i;:::-;22277:139;;22004:419;;;:::o;22429:224::-;22569:34;22565:1;22557:6;22553:14;22546:58;22638:7;22633:2;22625:6;22621:15;22614:32;22429:224;:::o;22659:366::-;22801:3;22822:67;22886:2;22881:3;22822:67;:::i;:::-;22815:74;;22898:93;22987:3;22898:93;:::i;:::-;23016:2;23011:3;23007:12;23000:19;;22659:366;;;:::o;23031:419::-;23197:4;23235:2;23224:9;23220:18;23212:26;;23284:9;23278:4;23274:20;23270:1;23259:9;23255:17;23248:47;23312:131;23438:4;23312:131;:::i;:::-;23304:139;;23031:419;;;:::o;23456:222::-;23596:34;23592:1;23584:6;23580:14;23573:58;23665:5;23660:2;23652:6;23648:15;23641:30;23456:222;:::o;23684:366::-;23826:3;23847:67;23911:2;23906:3;23847:67;:::i;:::-;23840:74;;23923:93;24012:3;23923:93;:::i;:::-;24041:2;24036:3;24032:12;24025:19;;23684:366;;;:::o;24056:419::-;24222:4;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:131;24463:4;24337:131;:::i;:::-;24329:139;;24056:419;;;:::o;24481:228::-;24621:34;24617:1;24609:6;24605:14;24598:58;24690:11;24685:2;24677:6;24673:15;24666:36;24481:228;:::o;24715:366::-;24857:3;24878:67;24942:2;24937:3;24878:67;:::i;:::-;24871:74;;24954:93;25043:3;24954:93;:::i;:::-;25072:2;25067:3;25063:12;25056:19;;24715:366;;;:::o;25087:419::-;25253:4;25291:2;25280:9;25276:18;25268:26;;25340:9;25334:4;25330:20;25326:1;25315:9;25311:17;25304:47;25368:131;25494:4;25368:131;:::i;:::-;25360:139;;25087:419;;;:::o;25512:177::-;25652:29;25648:1;25640:6;25636:14;25629:53;25512:177;:::o;25695:366::-;25837:3;25858:67;25922:2;25917:3;25858:67;:::i;:::-;25851:74;;25934:93;26023:3;25934:93;:::i;:::-;26052:2;26047:3;26043:12;26036:19;;25695:366;;;:::o;26067:419::-;26233:4;26271:2;26260:9;26256:18;26248:26;;26320:9;26314:4;26310:20;26306:1;26295:9;26291:17;26284:47;26348:131;26474:4;26348:131;:::i;:::-;26340:139;;26067:419;;;:::o;26492:348::-;26532:7;26555:20;26573:1;26555:20;:::i;:::-;26550:25;;26589:20;26607:1;26589:20;:::i;:::-;26584:25;;26777:1;26709:66;26705:74;26702:1;26699:81;26694:1;26687:9;26680:17;26676:105;26673:131;;;26784:18;;:::i;:::-;26673:131;26832:1;26829;26825:9;26814:20;;26492:348;;;;:::o;26846:180::-;26894:77;26891:1;26884:88;26991:4;26988:1;26981:15;27015:4;27012:1;27005:15;27032:185;27072:1;27089:20;27107:1;27089:20;:::i;:::-;27084:25;;27123:20;27141:1;27123:20;:::i;:::-;27118:25;;27162:1;27152:35;;27167:18;;:::i;:::-;27152:35;27209:1;27206;27202:9;27197:14;;27032:185;;;;:::o;27223:220::-;27363:34;27359:1;27351:6;27347:14;27340:58;27432:3;27427:2;27419:6;27415:15;27408:28;27223:220;:::o;27449:366::-;27591:3;27612:67;27676:2;27671:3;27612:67;:::i;:::-;27605:74;;27688:93;27777:3;27688:93;:::i;:::-;27806:2;27801:3;27797:12;27790:19;;27449:366;;;:::o;27821:419::-;27987:4;28025:2;28014:9;28010:18;28002:26;;28074:9;28068:4;28064:20;28060:1;28049:9;28045:17;28038:47;28102:131;28228:4;28102:131;:::i;:::-;28094:139;;27821:419;;;:::o;28246:442::-;28395:4;28433:2;28422:9;28418:18;28410:26;;28446:71;28514:1;28503:9;28499:17;28490:6;28446:71;:::i;:::-;28527:72;28595:2;28584:9;28580:18;28571:6;28527:72;:::i;:::-;28609;28677:2;28666:9;28662:18;28653:6;28609:72;:::i;:::-;28246:442;;;;;;:::o;28694:227::-;28834:34;28830:1;28822:6;28818:14;28811:58;28903:10;28898:2;28890:6;28886:15;28879:35;28694:227;:::o;28927:366::-;29069:3;29090:67;29154:2;29149:3;29090:67;:::i;:::-;29083:74;;29166:93;29255:3;29166:93;:::i;:::-;29284:2;29279:3;29275:12;29268:19;;28927:366;;;:::o;29299:419::-;29465:4;29503:2;29492:9;29488:18;29480:26;;29552:9;29546:4;29542:20;29538:1;29527:9;29523:17;29516:47;29580:131;29706:4;29580:131;:::i;:::-;29572:139;;29299:419;;;:::o;29724:180::-;29772:77;29769:1;29762:88;29869:4;29866:1;29859:15;29893:4;29890:1;29883:15;29910:143;29967:5;29998:6;29992:13;29983:22;;30014:33;30041:5;30014:33;:::i;:::-;29910:143;;;;:::o;30059:351::-;30129:6;30178:2;30166:9;30157:7;30153:23;30149:32;30146:119;;;30184:79;;:::i;:::-;30146:119;30304:1;30329:64;30385:7;30376:6;30365:9;30361:22;30329:64;:::i;:::-;30319:74;;30275:128;30059:351;;;;:::o;30416:85::-;30461:7;30490:5;30479:16;;30416:85;;;:::o;30507:158::-;30565:9;30598:61;30616:42;30625:32;30651:5;30625:32;:::i;:::-;30616:42;:::i;:::-;30598:61;:::i;:::-;30585:74;;30507:158;;;:::o;30671:147::-;30766:45;30805:5;30766:45;:::i;:::-;30761:3;30754:58;30671:147;;:::o;30824:114::-;30891:6;30925:5;30919:12;30909:22;;30824:114;;;:::o;30944:184::-;31043:11;31077:6;31072:3;31065:19;31117:4;31112:3;31108:14;31093:29;;30944:184;;;;:::o;31134:132::-;31201:4;31224:3;31216:11;;31254:4;31249:3;31245:14;31237:22;;31134:132;;;:::o;31272:108::-;31349:24;31367:5;31349:24;:::i;:::-;31344:3;31337:37;31272:108;;:::o;31386:179::-;31455:10;31476:46;31518:3;31510:6;31476:46;:::i;:::-;31554:4;31549:3;31545:14;31531:28;;31386:179;;;;:::o;31571:113::-;31641:4;31673;31668:3;31664:14;31656:22;;31571:113;;;:::o;31720:732::-;31839:3;31868:54;31916:5;31868:54;:::i;:::-;31938:86;32017:6;32012:3;31938:86;:::i;:::-;31931:93;;32048:56;32098:5;32048:56;:::i;:::-;32127:7;32158:1;32143:284;32168:6;32165:1;32162:13;32143:284;;;32244:6;32238:13;32271:63;32330:3;32315:13;32271:63;:::i;:::-;32264:70;;32357:60;32410:6;32357:60;:::i;:::-;32347:70;;32203:224;32190:1;32187;32183:9;32178:14;;32143:284;;;32147:14;32443:3;32436:10;;31844:608;;;31720:732;;;;:::o;32458:831::-;32721:4;32759:3;32748:9;32744:19;32736:27;;32773:71;32841:1;32830:9;32826:17;32817:6;32773:71;:::i;:::-;32854:80;32930:2;32919:9;32915:18;32906:6;32854:80;:::i;:::-;32981:9;32975:4;32971:20;32966:2;32955:9;32951:18;32944:48;33009:108;33112:4;33103:6;33009:108;:::i;:::-;33001:116;;33127:72;33195:2;33184:9;33180:18;33171:6;33127:72;:::i;:::-;33209:73;33277:3;33266:9;33262:19;33253:6;33209:73;:::i;:::-;32458:831;;;;;;;;:::o;33295:807::-;33544:4;33582:3;33571:9;33567:19;33559:27;;33596:71;33664:1;33653:9;33649:17;33640:6;33596:71;:::i;:::-;33677:72;33745:2;33734:9;33730:18;33721:6;33677:72;:::i;:::-;33759:80;33835:2;33824:9;33820:18;33811:6;33759:80;:::i;:::-;33849;33925:2;33914:9;33910:18;33901:6;33849:80;:::i;:::-;33939:73;34007:3;33996:9;33992:19;33983:6;33939:73;:::i;:::-;34022;34090:3;34079:9;34075:19;34066:6;34022:73;:::i;:::-;33295:807;;;;;;;;;:::o;34108:143::-;34165:5;34196:6;34190:13;34181:22;;34212:33;34239:5;34212:33;:::i;:::-;34108:143;;;;:::o;34257:663::-;34345:6;34353;34361;34410:2;34398:9;34389:7;34385:23;34381:32;34378:119;;;34416:79;;:::i;:::-;34378:119;34536:1;34561:64;34617:7;34608:6;34597:9;34593:22;34561:64;:::i;:::-;34551:74;;34507:128;34674:2;34700:64;34756:7;34747:6;34736:9;34732:22;34700:64;:::i;:::-;34690:74;;34645:129;34813:2;34839:64;34895:7;34886:6;34875:9;34871:22;34839:64;:::i;:::-;34829:74;;34784:129;34257:663;;;;;:::o
Swarm Source
ipfs://21e18426fc3b6533500d4a4de7597ac13904d465e948136ff04367291bbb7e84
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.