ERC-20
Website Down
Overview
Max Total Supply
100,000,000,000,000,000 OCCT
Holders
2,015 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
855,737,979,449.473640546012254249 OCCTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OCCT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-06 */ /** ██████ ██████ ██████ ████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT 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; } } // 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; } contract OCCT 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**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string public _name = "Official Crypto Cowboy Token"; string public _symbol = "OCCT"; uint8 public _decimals = 18; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 0; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 1; uint256 private _previousBurnFee = _burnFee; uint256 public _marketingFee = 1; address private marketingWallet = 0x55FC33E87064553C95085ec8719372935b56376A; uint256 private _previousmarketingFee = _marketingFee; address public deadAddress = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 250000000000000 * 10**18; uint256 private numTokensSellToAddToLiquidity = 500000000 * 10**18; 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); // mainnet // 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; // exclude marketing and burn adress from Reward _isExcluded[marketingWallet] = true; _isExcluded[deadAddress] = 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 _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 = 1; _liquidityFee = 0; _burnFee = 1; _marketingFee = 1; } 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 _transferToExcluded(sender, deadAddress, burnAmt); _transferToExcluded(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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526e13426172c74d822b878fe80000000060095560095460001962000029919062000994565b600019620000389190620008e5565b600a556040518060400160405280601c81526020017f4f6666696369616c2043727970746f20436f77626f7920546f6b656e00000000815250600c90805190602001906200008892919062000786565b506040518060400160405280600481526020017f4f43435400000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000d692919062000786565b506012600e60006101000a81548160ff021916908360ff1602179055506001600f55600f546010556000601155601154601255600160135560135460145560016015557355fc33e87064553c95085ec8719372935b56376a601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060155460175561dead601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860156101000a81548160ff0219169083151502179055506d0c5371912364ce3056c2800000006019556b019d971e4fe8401e74000000601a553480156200020157600080fd5b506000620002146200075560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002c96200075560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036757600080fd5b505afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a291906200084d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040557600080fd5b505afa1580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044091906200084d565b6040518363ffffffff1660e01b81526004016200045f9291906200089b565b602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b591906200084d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005386200075d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e56200075560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620007469190620008c8565b60405180910390a35062000a73565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000794906200095e565b90600052602060002090601f016020900481019282620007b8576000855562000804565b82601f10620007d357805160ff191683800117855562000804565b8280016001018555821562000804579182015b8281111562000803578251825591602001919060010190620007e6565b5b50905062000813919062000817565b5090565b5b808211156200083257600081600090555060010162000818565b5090565b600081519050620008478162000a59565b92915050565b6000602082840312156200086057600080fd5b6000620008708482850162000836565b91505092915050565b620008848162000920565b82525050565b620008958162000954565b82525050565b6000604082019050620008b2600083018562000879565b620008c1602083018462000879565b9392505050565b6000602082019050620008df60008301846200088a565b92915050565b6000620008f28262000954565b9150620008ff8362000954565b925082821015620009155762000914620009cc565b5b828203905092915050565b60006200092d8262000934565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200097757607f821691505b602082108114156200098e576200098d62000a2a565b5b50919050565b6000620009a18262000954565b9150620009ae8362000954565b925082620009c157620009c0620009fb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000a648162000920565b811462000a7057600080fd5b50565b60805160601c60a05160601c61518062000ac96000396000818161128501526122b6015260008181610b9a015281816132130152818161332901528181613350015281816133ec015261341301526151806000f3fe6080604052600436106102605760003560e01c80635342acb411610144578063af465a27116100b6578063d28d88521161007a578063d28d885214610933578063d543dbeb1461095e578063dd62ed3e14610987578063ea2f0b37146109c4578063ec28438a146109ed578063f2fde38b14610a1657610267565b8063af465a2714610860578063b09f12661461088b578063c0b0fda2146108b6578063c49b9a80146108e1578063cea269581461090a57610267565b806388f820201161010857806388f820201461072a5780638da5cb5b146107675780638ee88c531461079257806395d89b41146107bb578063a457c2d7146107e6578063a9059cbb1461082357610267565b80635342acb4146106435780636bc87c3a1461068057806370a08231146106ab578063715018a6146106e85780637d1db4a5146106ff57610267565b80632d838119116101dd5780633bd5d173116101a15780633bd5d17314610535578063437823ec1461055e5780634549b03914610587578063457c194c146105c457806349bd5a5e146105ed5780634a74bb021461061857610267565b80632d8381191461043a578063313ce5671461047757806332424aa3146104a257806339509351146104cd5780633b124fe71461050a57610267565b806318160ddd1161022457806318160ddd14610353578063224611731461037e57806322976e0d146103a757806323b872dd146103d257806327c8f8351461040f57610267565b8063061c82d01461026c57806306fdde0314610295578063095ea7b3146102c057806313114a9d146102fd5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190614286565b610a3f565b005b3480156102a157600080fd5b506102aa610ade565b6040516102b791906146ee565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190614221565b610b70565b6040516102f491906146b8565b60405180910390f35b34801561030957600080fd5b50610312610b8e565b60405161031f91906148d0565b60405180910390f35b34801561033457600080fd5b5061033d610b98565b60405161034a91906146d3565b60405180910390f35b34801561035f57600080fd5b50610368610bbc565b60405161037591906148d0565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614144565b610bc6565b005b3480156103b357600080fd5b506103bc610c9f565b6040516103c991906148d0565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906141d2565b610ca5565b60405161040691906146b8565b60405180910390f35b34801561041b57600080fd5b50610424610d7e565b604051610431919061463c565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614286565b610da4565b60405161046e91906148d0565b60405180910390f35b34801561048357600080fd5b5061048c610e12565b604051610499919061497c565b60405180910390f35b3480156104ae57600080fd5b506104b7610e29565b6040516104c4919061497c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614221565b610e3c565b60405161050191906146b8565b60405180910390f35b34801561051657600080fd5b5061051f610eef565b60405161052c91906148d0565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614286565b610ef5565b005b34801561056a57600080fd5b5061058560048036038101906105809190614144565b611070565b005b34801561059357600080fd5b506105ae60048036038101906105a991906142af565b611160565b6040516105bb91906148d0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614286565b6111e4565b005b3480156105f957600080fd5b50610602611283565b60405161060f919061463c565b60405180910390f35b34801561062457600080fd5b5061062d6112a7565b60405161063a91906146b8565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614144565b6112ba565b60405161067791906146b8565b60405180910390f35b34801561068c57600080fd5b50610695611310565b6040516106a291906148d0565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614144565b611316565b6040516106df91906148d0565b60405180910390f35b3480156106f457600080fd5b506106fd611401565b005b34801561070b57600080fd5b50610714611554565b60405161072191906148d0565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190614144565b61155a565b60405161075e91906146b8565b60405180910390f35b34801561077357600080fd5b5061077c6115b0565b604051610789919061463c565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614286565b6115d9565b005b3480156107c757600080fd5b506107d0611678565b6040516107dd91906146ee565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614221565b61170a565b60405161081a91906146b8565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190614221565b6117d7565b60405161085791906146b8565b60405180910390f35b34801561086c57600080fd5b506108756117f5565b60405161088291906148d0565b60405180910390f35b34801561089757600080fd5b506108a06117fb565b6040516108ad91906146ee565b60405180910390f35b3480156108c257600080fd5b506108cb611889565b6040516108d891906148d0565b60405180910390f35b3480156108ed57600080fd5b506109086004803603810190610903919061425d565b61188f565b005b34801561091657600080fd5b50610931600480360381019061092c9190614286565b611978565b005b34801561093f57600080fd5b50610948611a17565b60405161095591906146ee565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614286565b611aa5565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614196565b611bae565b6040516109bb91906148d0565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e69190614144565b611c35565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614286565b611d25565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190614144565b611dc4565b005b610a47611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614830565b60405180910390fd5b80600f8190555050565b6060600c8054610aed90614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614bbf565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d611f86565b8484611f8e565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b610bce611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290614830565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610cb2848484612159565b610d7384610cbe611f86565b610d6e856040518060600160405280602881526020016150fe60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d24611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290614730565b60405180910390fd5b6000610df56123a7565b9050610e0a81846123d290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b6000610ee5610e49611f86565b84610ee08560056000610e5a611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b611f8e565b6001905092915050565b600f5481565b6000610eff611f86565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906148b0565b60405180910390fd5b6000610f998361247a565b50505050509050610ff281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061104a81600a546124d690919063ffffffff16565b600a8190555061106583600b5461241c90919063ffffffff16565b600b81905550505050565b611078611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614830565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906147b0565b60405180910390fd5b816111c75760006111b78461247a565b50505050509050809150506111de565b60006111d28461247a565b50505050915050809150505b92915050565b6111ec611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614830565b60405180910390fd5b8060158190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113b157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113fc565b6113f9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da4565b90505b919050565b611409611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115e1611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614830565b60405180910390fd5b8060118190555050565b6060600d805461168790614bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390614bbf565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b5050505050905090565b60006117cd611717611f86565b846117c8856040518060600160405280602581526020016151266025913960056000611741611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b6001905092915050565b60006117eb6117e4611f86565b8484612159565b6001905092915050565b60095481565b600d805461180890614bbf565b80601f016020809104026020016040519081016040528092919081815260200182805461183490614bbf565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b505050505081565b60135481565b611897611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614830565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161196d91906146b8565b60405180910390a150565b611980611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614830565b60405180910390fd5b8060138190555050565b600c8054611a2490614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5090614bbf565b8015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b505050505081565b611aad611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614830565b60405180910390fd5b60018111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906147f0565b60405180910390fd5b611ba56064611b978360095461252090919063ffffffff16565b6123d290919063ffffffff16565b60198190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190614830565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d2d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614830565b60405180910390fd5b8060198190555050565b611dcc611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090614750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614890565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614770565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161214c91906148d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614710565b60405180910390fd5b6000811161227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614850565b60405180910390fd5b600061228730611316565b90506000601a5482101590508080156122ad5750601860149054906101000a900460ff16155b801561230557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561231d5750601860159054906101000a900460ff165b1561233157601a5491506123308261259b565b5b61233c858585612671565b5050505050565b600083831115829061238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238291906146ee565b60405180910390fd5b506000838561239a9190614acd565b9050809150509392505050565b60008060006123b4612c97565b915091506123cb81836123d290919063ffffffff16565b9250505090565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fe2565b905092915050565b600080828461242b91906149ec565b905083811015612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614790565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124918a613045565b92509250925060008060006124af8d86866124aa6123a7565b61309f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061251883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612343565b905092915050565b6000808314156125335760009050612595565b600082846125419190614a73565b90508284826125509190614a42565b14612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614810565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff02191690831515021790555060006125cc6002836123d290919063ffffffff16565b905060006125e382846124d690919063ffffffff16565b905060004790506125f383613128565b600061260882476124d690919063ffffffff16565b905061261483826133e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161264793929190614945565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127125750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127245761271f6134d6565b61276a565b601954811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906147d0565b60405180910390fd5b5b600061279460646127866013548561252090919063ffffffff16565b6123d290919063ffffffff16565b905060006127c060646127b26015548661252090919063ffffffff16565b6123d290919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128655750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e5761289985856128948461288687896124d690919063ffffffff16565b6124d690919063ffffffff16565b6134f8565b612b65565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129415750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561297a5761297585856129708461296287896124d690919063ffffffff16565b6124d690919063ffffffff16565b613758565b612b64565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a5757612a528585612a4d84612a3f87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b612b63565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af95750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3257612b2d8585612b2884612b1a87896124d690919063ffffffff16565b6124d690919063ffffffff16565b613b83565b612b62565b612b618585612b5c84612b4e87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b5b5b5b5b6000600f819055506000601181905550612ba285601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613758565b612bcf85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613758565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c825750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9057612c8f613e78565b5b5050505050565b6000806000600a5490506000600954905060005b600880549050811015612fa557826003600060088481548110612cf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e0b5750816004600060088481548110612da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e2257600a5460095494509450505050612fde565b612ed86003600060088481548110612e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846124d690919063ffffffff16565b9250612f906004600060088481548110612f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836124d690919063ffffffff16565b91508080612f9d90614bf1565b915050612cab565b50612fbd600954600a546123d290919063ffffffff16565b821015612fd557600a54600954935093505050612fde565b81819350935050505b9091565b60008083118290613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302091906146ee565b60405180910390fd5b50600083856130389190614a42565b9050809150509392505050565b60008060008061305485613e9a565b9050600061306186613ecb565b9050600061308a8261307c858a6124d690919063ffffffff16565b6124d690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130b8858961252090919063ffffffff16565b905060006130cf868961252090919063ffffffff16565b905060006130e6878961252090919063ffffffff16565b9050600061310f8261310185876124d690919063ffffffff16565b6124d690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561316b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131995781602001602082028036833780820191505090505b50905030816000815181106131d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561327757600080fd5b505afa15801561328b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132af919061416d565b816001815181106132e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334e307f000000000000000000000000000000000000000000000000000000000000000084611f8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133b09594939291906148eb565b600060405180830381600087803b1580156133ca57600080fd5b505af11580156133de573d6000803e3d6000fd5b505050505050565b613411307f000000000000000000000000000000000000000000000000000000000000000084611f8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061345b6115b0565b426040518863ffffffff1660e01b815260040161347d96959493929190614657565b6060604051808303818588803b15801561349657600080fd5b505af11580156134aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cf91906142eb565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b60008060008060008061350a8761247a565b95509550955095509550955061356887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136de81613efc565b6136e884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374591906148d0565b60405180910390a3505050505050505050565b60008060008060008061376a8761247a565b9550955095509550955095506137c886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e81613efc565b61394884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139a591906148d0565b60405180910390a3505050505050505050565b6000806000806000806139ca8761247a565b955095509550955095509550613a2886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0981613efc565b613b1384836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7091906148d0565b60405180910390a3505050505050505050565b600080600080600080613b958761247a565b955095509550955095509550613bf387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dfe81613efc565b613e0884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e6591906148d0565b60405180910390a3505050505050505050565b6001600f81905550600060118190555060016013819055506001601581905550565b6000613ec46064613eb6600f548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613ef56064613ee76011548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613f066123a7565b90506000613f1d828461252090919063ffffffff16565b9050613f7181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561409c5761405883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140b682600a546124d690919063ffffffff16565b600a819055506140d181600b5461241c90919063ffffffff16565b600b819055505050565b6000813590506140ea816150b8565b92915050565b6000815190506140ff816150b8565b92915050565b600081359050614114816150cf565b92915050565b600081359050614129816150e6565b92915050565b60008151905061413e816150e6565b92915050565b60006020828403121561415657600080fd5b6000614164848285016140db565b91505092915050565b60006020828403121561417f57600080fd5b600061418d848285016140f0565b91505092915050565b600080604083850312156141a957600080fd5b60006141b7858286016140db565b92505060206141c8858286016140db565b9150509250929050565b6000806000606084860312156141e757600080fd5b60006141f5868287016140db565b9350506020614206868287016140db565b92505060406142178682870161411a565b9150509250925092565b6000806040838503121561423457600080fd5b6000614242858286016140db565b92505060206142538582860161411a565b9150509250929050565b60006020828403121561426f57600080fd5b600061427d84828501614105565b91505092915050565b60006020828403121561429857600080fd5b60006142a68482850161411a565b91505092915050565b600080604083850312156142c257600080fd5b60006142d08582860161411a565b92505060206142e185828601614105565b9150509250929050565b60008060006060848603121561430057600080fd5b600061430e8682870161412f565b935050602061431f8682870161412f565b92505060406143308682870161412f565b9150509250925092565b60006143468383614352565b60208301905092915050565b61435b81614b01565b82525050565b61436a81614b01565b82525050565b600061437b826149a7565b61438581856149ca565b935061439083614997565b8060005b838110156143c15781516143a8888261433a565b97506143b3836149bd565b925050600181019050614394565b5085935050505092915050565b6143d781614b13565b82525050565b6143e681614b56565b82525050565b6143f581614b7a565b82525050565b6000614406826149b2565b61441081856149db565b9350614420818560208601614b8c565b61442981614cc7565b840191505092915050565b60006144416023836149db565b915061444c82614cd8565b604082019050919050565b6000614464602a836149db565b915061446f82614d27565b604082019050919050565b60006144876026836149db565b915061449282614d76565b604082019050919050565b60006144aa6022836149db565b91506144b582614dc5565b604082019050919050565b60006144cd601b836149db565b91506144d882614e14565b602082019050919050565b60006144f0601f836149db565b91506144fb82614e3d565b602082019050919050565b60006145136028836149db565b915061451e82614e66565b604082019050919050565b60006145366033836149db565b915061454182614eb5565b604082019050919050565b60006145596021836149db565b915061456482614f04565b604082019050919050565b600061457c6020836149db565b915061458782614f53565b602082019050919050565b600061459f6029836149db565b91506145aa82614f7c565b604082019050919050565b60006145c26025836149db565b91506145cd82614fcb565b604082019050919050565b60006145e56024836149db565b91506145f08261501a565b604082019050919050565b6000614608602c836149db565b915061461382615069565b604082019050919050565b61462781614b3f565b82525050565b61463681614b49565b82525050565b60006020820190506146516000830184614361565b92915050565b600060c08201905061466c6000830189614361565b614679602083018861461e565b61468660408301876143ec565b61469360608301866143ec565b6146a06080830185614361565b6146ad60a083018461461e565b979650505050505050565b60006020820190506146cd60008301846143ce565b92915050565b60006020820190506146e860008301846143dd565b92915050565b6000602082019050818103600083015261470881846143fb565b905092915050565b6000602082019050818103600083015261472981614434565b9050919050565b6000602082019050818103600083015261474981614457565b9050919050565b600060208201905081810360008301526147698161447a565b9050919050565b600060208201905081810360008301526147898161449d565b9050919050565b600060208201905081810360008301526147a9816144c0565b9050919050565b600060208201905081810360008301526147c9816144e3565b9050919050565b600060208201905081810360008301526147e981614506565b9050919050565b6000602082019050818103600083015261480981614529565b9050919050565b600060208201905081810360008301526148298161454c565b9050919050565b600060208201905081810360008301526148498161456f565b9050919050565b6000602082019050818103600083015261486981614592565b9050919050565b60006020820190508181036000830152614889816145b5565b9050919050565b600060208201905081810360008301526148a9816145d8565b9050919050565b600060208201905081810360008301526148c9816145fb565b9050919050565b60006020820190506148e5600083018461461e565b92915050565b600060a082019050614900600083018861461e565b61490d60208301876143ec565b818103604083015261491f8186614370565b905061492e6060830185614361565b61493b608083018461461e565b9695505050505050565b600060608201905061495a600083018661461e565b614967602083018561461e565b614974604083018461461e565b949350505050565b6000602082019050614991600083018461462d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f782614b3f565b9150614a0283614b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a3757614a36614c3a565b5b828201905092915050565b6000614a4d82614b3f565b9150614a5883614b3f565b925082614a6857614a67614c69565b5b828204905092915050565b6000614a7e82614b3f565b9150614a8983614b3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac257614ac1614c3a565b5b828202905092915050565b6000614ad882614b3f565b9150614ae383614b3f565b925082821015614af657614af5614c3a565b5b828203905092915050565b6000614b0c82614b1f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b6182614b68565b9050919050565b6000614b7382614b1f565b9050919050565b6000614b8582614b3f565b9050919050565b60005b83811015614baa578082015181840152602081019050614b8f565b83811115614bb9576000848401525b50505050565b60006002820490506001821680614bd757607f821691505b60208210811415614beb57614bea614c98565b5b50919050565b6000614bfc82614b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6150c181614b01565b81146150cc57600080fd5b50565b6150d881614b13565b81146150e357600080fd5b50565b6150ef81614b3f565b81146150fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053ccdca43730a50bd0fdcfaa5e32ea5a2293887cc4c8d0ed5eda88954482ad8c64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102605760003560e01c80635342acb411610144578063af465a27116100b6578063d28d88521161007a578063d28d885214610933578063d543dbeb1461095e578063dd62ed3e14610987578063ea2f0b37146109c4578063ec28438a146109ed578063f2fde38b14610a1657610267565b8063af465a2714610860578063b09f12661461088b578063c0b0fda2146108b6578063c49b9a80146108e1578063cea269581461090a57610267565b806388f820201161010857806388f820201461072a5780638da5cb5b146107675780638ee88c531461079257806395d89b41146107bb578063a457c2d7146107e6578063a9059cbb1461082357610267565b80635342acb4146106435780636bc87c3a1461068057806370a08231146106ab578063715018a6146106e85780637d1db4a5146106ff57610267565b80632d838119116101dd5780633bd5d173116101a15780633bd5d17314610535578063437823ec1461055e5780634549b03914610587578063457c194c146105c457806349bd5a5e146105ed5780634a74bb021461061857610267565b80632d8381191461043a578063313ce5671461047757806332424aa3146104a257806339509351146104cd5780633b124fe71461050a57610267565b806318160ddd1161022457806318160ddd14610353578063224611731461037e57806322976e0d146103a757806323b872dd146103d257806327c8f8351461040f57610267565b8063061c82d01461026c57806306fdde0314610295578063095ea7b3146102c057806313114a9d146102fd5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190614286565b610a3f565b005b3480156102a157600080fd5b506102aa610ade565b6040516102b791906146ee565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190614221565b610b70565b6040516102f491906146b8565b60405180910390f35b34801561030957600080fd5b50610312610b8e565b60405161031f91906148d0565b60405180910390f35b34801561033457600080fd5b5061033d610b98565b60405161034a91906146d3565b60405180910390f35b34801561035f57600080fd5b50610368610bbc565b60405161037591906148d0565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190614144565b610bc6565b005b3480156103b357600080fd5b506103bc610c9f565b6040516103c991906148d0565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906141d2565b610ca5565b60405161040691906146b8565b60405180910390f35b34801561041b57600080fd5b50610424610d7e565b604051610431919061463c565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614286565b610da4565b60405161046e91906148d0565b60405180910390f35b34801561048357600080fd5b5061048c610e12565b604051610499919061497c565b60405180910390f35b3480156104ae57600080fd5b506104b7610e29565b6040516104c4919061497c565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614221565b610e3c565b60405161050191906146b8565b60405180910390f35b34801561051657600080fd5b5061051f610eef565b60405161052c91906148d0565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614286565b610ef5565b005b34801561056a57600080fd5b5061058560048036038101906105809190614144565b611070565b005b34801561059357600080fd5b506105ae60048036038101906105a991906142af565b611160565b6040516105bb91906148d0565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190614286565b6111e4565b005b3480156105f957600080fd5b50610602611283565b60405161060f919061463c565b60405180910390f35b34801561062457600080fd5b5061062d6112a7565b60405161063a91906146b8565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614144565b6112ba565b60405161067791906146b8565b60405180910390f35b34801561068c57600080fd5b50610695611310565b6040516106a291906148d0565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190614144565b611316565b6040516106df91906148d0565b60405180910390f35b3480156106f457600080fd5b506106fd611401565b005b34801561070b57600080fd5b50610714611554565b60405161072191906148d0565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190614144565b61155a565b60405161075e91906146b8565b60405180910390f35b34801561077357600080fd5b5061077c6115b0565b604051610789919061463c565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614286565b6115d9565b005b3480156107c757600080fd5b506107d0611678565b6040516107dd91906146ee565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614221565b61170a565b60405161081a91906146b8565b60405180910390f35b34801561082f57600080fd5b5061084a60048036038101906108459190614221565b6117d7565b60405161085791906146b8565b60405180910390f35b34801561086c57600080fd5b506108756117f5565b60405161088291906148d0565b60405180910390f35b34801561089757600080fd5b506108a06117fb565b6040516108ad91906146ee565b60405180910390f35b3480156108c257600080fd5b506108cb611889565b6040516108d891906148d0565b60405180910390f35b3480156108ed57600080fd5b506109086004803603810190610903919061425d565b61188f565b005b34801561091657600080fd5b50610931600480360381019061092c9190614286565b611978565b005b34801561093f57600080fd5b50610948611a17565b60405161095591906146ee565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190614286565b611aa5565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614196565b611bae565b6040516109bb91906148d0565b60405180910390f35b3480156109d057600080fd5b506109eb60048036038101906109e69190614144565b611c35565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614286565b611d25565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190614144565b611dc4565b005b610a47611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614830565b60405180910390fd5b80600f8190555050565b6060600c8054610aed90614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1990614bbf565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b5050505050905090565b6000610b84610b7d611f86565b8484611f8e565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b610bce611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290614830565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610cb2848484612159565b610d7384610cbe611f86565b610d6e856040518060600160405280602881526020016150fe60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d24611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290614730565b60405180910390fd5b6000610df56123a7565b9050610e0a81846123d290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b600e60009054906101000a900460ff1681565b6000610ee5610e49611f86565b84610ee08560056000610e5a611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b611f8e565b6001905092915050565b600f5481565b6000610eff611f86565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906148b0565b60405180910390fd5b6000610f998361247a565b50505050509050610ff281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061104a81600a546124d690919063ffffffff16565b600a8190555061106583600b5461241c90919063ffffffff16565b600b81905550505050565b611078611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614830565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906147b0565b60405180910390fd5b816111c75760006111b78461247a565b50505050509050809150506111de565b60006111d28461247a565b50505050915050809150505b92915050565b6111ec611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090614830565b60405180910390fd5b8060158190555050565b7f000000000000000000000000f27fb8b8113f5e10b5fa91ad3fa033173f0b14e181565b601860159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113b157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113fc565b6113f9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da4565b90505b919050565b611409611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115e1611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614830565b60405180910390fd5b8060118190555050565b6060600d805461168790614bbf565b80601f01602080910402602001604051908101604052809291908181526020018280546116b390614bbf565b80156117005780601f106116d557610100808354040283529160200191611700565b820191906000526020600020905b8154815290600101906020018083116116e357829003601f168201915b5050505050905090565b60006117cd611717611f86565b846117c8856040518060600160405280602581526020016151266025913960056000611741611f86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123439092919063ffffffff16565b611f8e565b6001905092915050565b60006117eb6117e4611f86565b8484612159565b6001905092915050565b60095481565b600d805461180890614bbf565b80601f016020809104026020016040519081016040528092919081815260200182805461183490614bbf565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b505050505081565b60135481565b611897611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614830565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161196d91906146b8565b60405180910390a150565b611980611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614830565b60405180910390fd5b8060138190555050565b600c8054611a2490614bbf565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5090614bbf565b8015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b505050505081565b611aad611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190614830565b60405180910390fd5b60018111611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906147f0565b60405180910390fd5b611ba56064611b978360095461252090919063ffffffff16565b6123d290919063ffffffff16565b60198190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c3d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190614830565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d2d611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614830565b60405180910390fd5b8060198190555050565b611dcc611f86565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090614750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614890565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614770565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161214c91906148d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614870565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614710565b60405180910390fd5b6000811161227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614850565b60405180910390fd5b600061228730611316565b90506000601a5482101590508080156122ad5750601860149054906101000a900460ff16155b801561230557507f000000000000000000000000f27fb8b8113f5e10b5fa91ad3fa033173f0b14e173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561231d5750601860159054906101000a900460ff165b1561233157601a5491506123308261259b565b5b61233c858585612671565b5050505050565b600083831115829061238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238291906146ee565b60405180910390fd5b506000838561239a9190614acd565b9050809150509392505050565b60008060006123b4612c97565b915091506123cb81836123d290919063ffffffff16565b9250505090565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612fe2565b905092915050565b600080828461242b91906149ec565b905083811015612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246790614790565b60405180910390fd5b8091505092915050565b60008060008060008060008060006124918a613045565b92509250925060008060006124af8d86866124aa6123a7565b61309f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061251883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612343565b905092915050565b6000808314156125335760009050612595565b600082846125419190614a73565b90508284826125509190614a42565b14612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614810565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff02191690831515021790555060006125cc6002836123d290919063ffffffff16565b905060006125e382846124d690919063ffffffff16565b905060004790506125f383613128565b600061260882476124d690919063ffffffff16565b905061261483826133e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161264793929190614945565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127125750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127245761271f6134d6565b61276a565b601954811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906147d0565b60405180910390fd5b5b600061279460646127866013548561252090919063ffffffff16565b6123d290919063ffffffff16565b905060006127c060646127b26015548661252090919063ffffffff16565b6123d290919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128655750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e5761289985856128948461288687896124d690919063ffffffff16565b6124d690919063ffffffff16565b6134f8565b612b65565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129415750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561297a5761297585856129708461296287896124d690919063ffffffff16565b6124d690919063ffffffff16565b613758565b612b64565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a1e5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a5757612a528585612a4d84612a3f87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b612b63565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af95750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3257612b2d8585612b2884612b1a87896124d690919063ffffffff16565b6124d690919063ffffffff16565b613b83565b612b62565b612b618585612b5c84612b4e87896124d690919063ffffffff16565b6124d690919063ffffffff16565b6139b8565b5b5b5b5b6000600f819055506000601181905550612ba285601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613758565b612bcf85601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613758565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c825750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9057612c8f613e78565b5b5050505050565b6000806000600a5490506000600954905060005b600880549050811015612fa557826003600060088481548110612cf7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e0b5750816004600060088481548110612da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e2257600a5460095494509450505050612fde565b612ed86003600060088481548110612e63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846124d690919063ffffffff16565b9250612f906004600060088481548110612f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836124d690919063ffffffff16565b91508080612f9d90614bf1565b915050612cab565b50612fbd600954600a546123d290919063ffffffff16565b821015612fd557600a54600954935093505050612fde565b81819350935050505b9091565b60008083118290613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302091906146ee565b60405180910390fd5b50600083856130389190614a42565b9050809150509392505050565b60008060008061305485613e9a565b9050600061306186613ecb565b9050600061308a8261307c858a6124d690919063ffffffff16565b6124d690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130b8858961252090919063ffffffff16565b905060006130cf868961252090919063ffffffff16565b905060006130e6878961252090919063ffffffff16565b9050600061310f8261310185876124d690919063ffffffff16565b6124d690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561316b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131995781602001602082028036833780820191505090505b50905030816000815181106131d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561327757600080fd5b505afa15801561328b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132af919061416d565b816001815181106132e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f8e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133b09594939291906148eb565b600060405180830381600087803b1580156133ca57600080fd5b505af11580156133de573d6000803e3d6000fd5b505050505050565b613411307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f8e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061345b6115b0565b426040518863ffffffff1660e01b815260040161347d96959493929190614657565b6060604051808303818588803b15801561349657600080fd5b505af11580156134aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cf91906142eb565b5050505050565b6000600f81905550600060118190555060006013819055506000601581905550565b60008060008060008061350a8761247a565b95509550955095509550955061356887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136de81613efc565b6136e884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161374591906148d0565b60405180910390a3505050505050505050565b60008060008060008061376a8761247a565b9550955095509550955095506137c886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138f285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061393e81613efc565b61394884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139a591906148d0565b60405180910390a3505050505050505050565b6000806000806000806139ca8761247a565b955095509550955095509550613a2886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613abd85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b0981613efc565b613b1384836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b7091906148d0565b60405180910390a3505050505050505050565b600080600080600080613b958761247a565b955095509550955095509550613bf387600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124d690919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1d83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dfe81613efc565b613e0884836140a1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e6591906148d0565b60405180910390a3505050505050505050565b6001600f81905550600060118190555060016013819055506001601581905550565b6000613ec46064613eb6600f548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613ef56064613ee76011548561252090919063ffffffff16565b6123d290919063ffffffff16565b9050919050565b6000613f066123a7565b90506000613f1d828461252090919063ffffffff16565b9050613f7181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561409c5761405883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241c90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6140b682600a546124d690919063ffffffff16565b600a819055506140d181600b5461241c90919063ffffffff16565b600b819055505050565b6000813590506140ea816150b8565b92915050565b6000815190506140ff816150b8565b92915050565b600081359050614114816150cf565b92915050565b600081359050614129816150e6565b92915050565b60008151905061413e816150e6565b92915050565b60006020828403121561415657600080fd5b6000614164848285016140db565b91505092915050565b60006020828403121561417f57600080fd5b600061418d848285016140f0565b91505092915050565b600080604083850312156141a957600080fd5b60006141b7858286016140db565b92505060206141c8858286016140db565b9150509250929050565b6000806000606084860312156141e757600080fd5b60006141f5868287016140db565b9350506020614206868287016140db565b92505060406142178682870161411a565b9150509250925092565b6000806040838503121561423457600080fd5b6000614242858286016140db565b92505060206142538582860161411a565b9150509250929050565b60006020828403121561426f57600080fd5b600061427d84828501614105565b91505092915050565b60006020828403121561429857600080fd5b60006142a68482850161411a565b91505092915050565b600080604083850312156142c257600080fd5b60006142d08582860161411a565b92505060206142e185828601614105565b9150509250929050565b60008060006060848603121561430057600080fd5b600061430e8682870161412f565b935050602061431f8682870161412f565b92505060406143308682870161412f565b9150509250925092565b60006143468383614352565b60208301905092915050565b61435b81614b01565b82525050565b61436a81614b01565b82525050565b600061437b826149a7565b61438581856149ca565b935061439083614997565b8060005b838110156143c15781516143a8888261433a565b97506143b3836149bd565b925050600181019050614394565b5085935050505092915050565b6143d781614b13565b82525050565b6143e681614b56565b82525050565b6143f581614b7a565b82525050565b6000614406826149b2565b61441081856149db565b9350614420818560208601614b8c565b61442981614cc7565b840191505092915050565b60006144416023836149db565b915061444c82614cd8565b604082019050919050565b6000614464602a836149db565b915061446f82614d27565b604082019050919050565b60006144876026836149db565b915061449282614d76565b604082019050919050565b60006144aa6022836149db565b91506144b582614dc5565b604082019050919050565b60006144cd601b836149db565b91506144d882614e14565b602082019050919050565b60006144f0601f836149db565b91506144fb82614e3d565b602082019050919050565b60006145136028836149db565b915061451e82614e66565b604082019050919050565b60006145366033836149db565b915061454182614eb5565b604082019050919050565b60006145596021836149db565b915061456482614f04565b604082019050919050565b600061457c6020836149db565b915061458782614f53565b602082019050919050565b600061459f6029836149db565b91506145aa82614f7c565b604082019050919050565b60006145c26025836149db565b91506145cd82614fcb565b604082019050919050565b60006145e56024836149db565b91506145f08261501a565b604082019050919050565b6000614608602c836149db565b915061461382615069565b604082019050919050565b61462781614b3f565b82525050565b61463681614b49565b82525050565b60006020820190506146516000830184614361565b92915050565b600060c08201905061466c6000830189614361565b614679602083018861461e565b61468660408301876143ec565b61469360608301866143ec565b6146a06080830185614361565b6146ad60a083018461461e565b979650505050505050565b60006020820190506146cd60008301846143ce565b92915050565b60006020820190506146e860008301846143dd565b92915050565b6000602082019050818103600083015261470881846143fb565b905092915050565b6000602082019050818103600083015261472981614434565b9050919050565b6000602082019050818103600083015261474981614457565b9050919050565b600060208201905081810360008301526147698161447a565b9050919050565b600060208201905081810360008301526147898161449d565b9050919050565b600060208201905081810360008301526147a9816144c0565b9050919050565b600060208201905081810360008301526147c9816144e3565b9050919050565b600060208201905081810360008301526147e981614506565b9050919050565b6000602082019050818103600083015261480981614529565b9050919050565b600060208201905081810360008301526148298161454c565b9050919050565b600060208201905081810360008301526148498161456f565b9050919050565b6000602082019050818103600083015261486981614592565b9050919050565b60006020820190508181036000830152614889816145b5565b9050919050565b600060208201905081810360008301526148a9816145d8565b9050919050565b600060208201905081810360008301526148c9816145fb565b9050919050565b60006020820190506148e5600083018461461e565b92915050565b600060a082019050614900600083018861461e565b61490d60208301876143ec565b818103604083015261491f8186614370565b905061492e6060830185614361565b61493b608083018461461e565b9695505050505050565b600060608201905061495a600083018661461e565b614967602083018561461e565b614974604083018461461e565b949350505050565b6000602082019050614991600083018461462d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f782614b3f565b9150614a0283614b3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a3757614a36614c3a565b5b828201905092915050565b6000614a4d82614b3f565b9150614a5883614b3f565b925082614a6857614a67614c69565b5b828204905092915050565b6000614a7e82614b3f565b9150614a8983614b3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac257614ac1614c3a565b5b828202905092915050565b6000614ad882614b3f565b9150614ae383614b3f565b925082821015614af657614af5614c3a565b5b828203905092915050565b6000614b0c82614b1f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b6182614b68565b9050919050565b6000614b7382614b1f565b9050919050565b6000614b8582614b3f565b9050919050565b60005b83811015614baa578082015181840152602081019050614b8f565b83811115614bb9576000848401525b50505050565b60006002820490506001821680614bd757607f821691505b60208210811415614beb57614bea614c98565b5b50919050565b6000614bfc82614b3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c3a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e2031302070657263656e742100000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6150c181614b01565b81146150cc57600080fd5b50565b6150d881614b13565b81146150e357600080fd5b50565b6150ef81614b3f565b81146150fa57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053ccdca43730a50bd0fdcfaa5e32ea5a2293887cc4c8d0ed5eda88954482ad8c64736f6c63430008040033
Deployed Bytecode Sourcemap
25197:18887:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30387:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28114:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29026:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30147:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26523:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28391:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43393:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26254:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29195:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26439:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31576:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28300:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25940:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29516:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25980:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30747:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43146:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31132:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30247:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26581:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26660:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35708:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26067:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28494:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16544:148;;;;;;;;;;;;;:::i;:::-;;26709:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30019:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15901:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30498:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28205:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29742:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28700:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25694:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25903:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26168:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43904:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30633:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25844:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43643:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28875:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43269:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43519:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16847:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30387:98;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30471:6:::1;30461:7;:16;;;;30387:98:::0;:::o;28114:83::-;28151:13;28184:5;28177:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28114:83;:::o;29026:161::-;29101:4;29118:39;29127:12;:10;:12::i;:::-;29141:7;29150:6;29118:8;:39::i;:::-;29175:4;29168:11;;29026:161;;;;:::o;30147:87::-;30189:7;30216:10;;30209:17;;30147:87;:::o;26523:51::-;;;:::o;28391:95::-;28444:7;28471;;28464:14;;28391:95;:::o;43393:114::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43490:9:::1;43472:15;;:27;;;;;;;;;;;;;;;;;;43393:114:::0;:::o;26254:32::-;;;;:::o;29195:313::-;29293:4;29310:36;29320:6;29328:9;29339:6;29310:9;:36::i;:::-;29357:121;29366:6;29374:12;:10;:12::i;:::-;29388:89;29426:6;29388:89;;;;;;;;;;;;;;;;;:11;:19;29400:6;29388:19;;;;;;;;;;;;;;;:33;29408:12;:10;:12::i;:::-;29388:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29357:8;:121::i;:::-;29496:4;29489:11;;29195:313;;;;;:::o;26439:71::-;;;;;;;;;;;;;:::o;31576:253::-;31642:7;31681;;31670;:18;;31662:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31746:19;31769:10;:8;:10::i;:::-;31746:33;;31797:24;31809:11;31797:7;:11;;:24;;;;:::i;:::-;31790:31;;;31576:253;;;:::o;28300:83::-;28341:5;28366:9;;;;;;;;;;;28359:16;;28300:83;:::o;25940:27::-;;;;;;;;;;;;;:::o;29516:218::-;29604:4;29621:83;29630:12;:10;:12::i;:::-;29644:7;29653:50;29692:10;29653:11;:25;29665:12;:10;:12::i;:::-;29653:25;;;;;;;;;;;;;;;:34;29679:7;29653:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29621:8;:83::i;:::-;29722:4;29715:11;;29516:218;;;;:::o;25980:26::-;;;;:::o;30747:377::-;30799:14;30816:12;:10;:12::i;:::-;30799:29;;30848:11;:19;30860:6;30848:19;;;;;;;;;;;;;;;;;;;;;;;;;30847:20;30839:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30928:15;30952:19;30963:7;30952:10;:19::i;:::-;30927:44;;;;;;;31000:28;31020:7;31000;:15;31008:6;31000:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30982:7;:15;30990:6;30982:15;;;;;;;;;;;;;;;:46;;;;31049:20;31061:7;31049;;:11;;:20;;;;:::i;:::-;31039:7;:30;;;;31093:23;31108:7;31093:10;;:14;;:23;;;;:::i;:::-;31080:10;:36;;;;30747:377;;;:::o;43146:111::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43245:4:::1;43215:18;:27;43234:7;43215:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43146:111:::0;:::o;31132:436::-;31222:7;31261;;31250;:18;;31242:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31320:17;31315:246;;31355:15;31379:19;31390:7;31379:10;:19::i;:::-;31354:44;;;;;;;31420:7;31413:14;;;;;31315:246;31462:23;31493:19;31504:7;31493:10;:19::i;:::-;31460:52;;;;;;;31534:15;31527:22;;;31132:436;;;;;:::o;30247:128::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30352:15:::1;30336:13;:31;;;;30247:128:::0;:::o;26581:38::-;;;:::o;26660:40::-;;;;;;;;;;;;;:::o;35708:123::-;35772:4;35796:18;:27;35815:7;35796:27;;;;;;;;;;;;;;;;;;;;;;;;;35789:34;;35708:123;;;:::o;26067:32::-;;;;:::o;28494:198::-;28560:7;28584:11;:20;28596:7;28584:20;;;;;;;;;;;;;;;;;;;;;;;;;28580:49;;;28613:7;:16;28621:7;28613:16;;;;;;;;;;;;;;;;28606:23;;;;28580:49;28647:37;28667:7;:16;28675:7;28667:16;;;;;;;;;;;;;;;;28647:19;:37::i;:::-;28640:44;;28494:198;;;;:::o;16544:148::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16651:1:::1;16614:40;;16635:6;::::0;::::1;;;;;;;;16614:40;;;;;;;;;;;;16682:1;16665:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16544:148::o:0;26709:54::-;;;;:::o;30019:120::-;30087:4;30111:11;:20;30123:7;30111:20;;;;;;;;;;;;;;;;;;;;;;;;;30104:27;;30019:120;;;:::o;15901:79::-;15939:7;15966:6;;;;;;;;;;;15959:13;;15901:79;:::o;30498:122::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30600:12:::1;30584:13;:28;;;;30498:122:::0;:::o;28205:87::-;28244:13;28277:7;28270:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28205:87;:::o;29742:269::-;29835:4;29852:129;29861:12;:10;:12::i;:::-;29875:7;29884:96;29923:15;29884:96;;;;;;;;;;;;;;;;;:11;:25;29896:12;:10;:12::i;:::-;29884:25;;;;;;;;;;;;;;;:34;29910:7;29884:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29852:8;:129::i;:::-;29999:4;29992:11;;29742:269;;;;:::o;28700:167::-;28778:4;28795:42;28805:12;:10;:12::i;:::-;28819:9;28830:6;28795:9;:42::i;:::-;28855:4;28848:11;;28700:167;;;;:::o;25694:52::-;;;;:::o;25903:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26168:27::-;;;;:::o;43904:171::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44005:8:::1;43981:21;;:32;;;;;;;;;;;;;;;;;;44029:38;44058:8;44029:38;;;;;;:::i;:::-;;;;;;;;43904:171:::0;:::o;30633:102::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30720:7:::1;30709:8;:18;;;;30633:102:::0;:::o;25844:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43643:253::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43745:1:::1;43730:12;:16;43722:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43828:60;43872:5;43828:25;43840:12;43828:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;43813:12;:75;;;;43643:253:::0;:::o;28875:143::-;28956:7;28983:11;:18;28995:5;28983:18;;;;;;;;;;;;;;;:27;29002:7;28983:27;;;;;;;;;;;;;;;;28976:34;;28875:143;;;;:::o;43269:110::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43366:5:::1;43336:18;:27;43355:7;43336:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43269:110:::0;:::o;43519:112::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43611:11:::1;43596:12;:26;;;;43519:112:::0;:::o;16847:244::-;16123:12;:10;:12::i;:::-;16113:22;;:6;;;;;;;;;;:22;;;16105:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16956:1:::1;16936:22;;:8;:22;;;;16928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17046:8;17017:38;;17038:6;::::0;::::1;;;;;;;;17017:38;;;;;;;;;;;;17075:8;17066:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16847:244:::0;:::o;8310:115::-;8363:15;8406:10;8391:26;;8310:115;:::o;35839:337::-;35949:1;35932:19;;:5;:19;;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36030:1;36011:21;;:7;:21;;;;36003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36114:6;36084:11;:18;36096:5;36084:18;;;;;;;;;;;;;;;:27;36103:7;36084:27;;;;;;;;;;;;;;;:36;;;;36152:7;36136:32;;36145:5;36136:32;;;36161:6;36136:32;;;;;;:::i;:::-;;;;;;;;35839:337;;;:::o;36184:1234::-;36322:1;36306:18;;:4;:18;;;;36298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36399:1;36385:16;;:2;:16;;;;36377:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36469:1;36460:6;:10;36452:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36811:28;36842:24;36860:4;36842:9;:24::i;:::-;36811:55;;36885:24;36936:29;;36912:20;:53;;36885:80;;36994:19;:53;;;;;37031:16;;;;;;;;;;;37030:17;36994:53;:91;;;;;37072:13;37064:21;;:4;:21;;;;36994:91;:129;;;;;37102:21;;;;;;;;;;;36994:129;36976:318;;;37173:29;;37150:52;;37246:36;37261:20;37246:14;:36::i;:::-;36976:318;37380:30;37395:4;37400:2;37403:6;37380:14;:30::i;:::-;36184:1234;;;;;:::o;4720:192::-;4806:7;4839:1;4834;:6;;4842:12;4826:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4866:9;4882:1;4878;:5;;;;:::i;:::-;4866:17;;4903:1;4896:8;;;4720:192;;;;;:::o;33950:163::-;33991:7;34012:15;34029;34048:19;:17;:19::i;:::-;34011:56;;;;34085:20;34097:7;34085;:11;;:20;;;;:::i;:::-;34078:27;;;;33950:163;:::o;6118:132::-;6176:7;6203:39;6207:1;6210;6203:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6196:46;;6118:132;;;;:::o;3817:181::-;3875:7;3895:9;3911:1;3907;:5;;;;:::i;:::-;3895:17;;3936:1;3931;:6;;3923:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3989:1;3982:8;;;3817:181;;;;:::o;32748:419::-;32807:7;32816;32825;32834;32843;32852;32873:23;32898:12;32912:18;32934:20;32946:7;32934:11;:20::i;:::-;32872:82;;;;;;32966:15;32983:23;33008:12;33024:50;33036:7;33045:4;33051:10;33063;:8;:10::i;:::-;33024:11;:50::i;:::-;32965:109;;;;;;33093:7;33102:15;33119:4;33125:15;33142:4;33148:10;33085:74;;;;;;;;;;;;;;;;;;32748:419;;;;;;;:::o;4281:136::-;4339:7;4366:43;4370:1;4373;4366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4359:50;;4281:136;;;;:::o;5171:471::-;5229:7;5479:1;5474;:6;5470:47;;;5504:1;5497:8;;;;5470:47;5529:9;5545:1;5541;:5;;;;:::i;:::-;5529:17;;5574:1;5569;5565;:5;;;;:::i;:::-;:10;5557:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5633:1;5626:8;;;5171:471;;;;;:::o;37426:985::-;27162:4;27143:16;;:23;;;;;;;;;;;;;;;;;;37562:12:::1;37577:27;37602:1;37577:20;:24;;:27;;;;:::i;:::-;37562:42;;37615:17;37635:30;37660:4;37635:20;:24;;:30;;;;:::i;:::-;37615:50;;37943:22;37968:21;37943:46;;38034:22;38051:4;38034:16;:22::i;:::-;38187:18;38208:41;38234:14;38208:21;:25;;:41;;;;:::i;:::-;38187:62;;38299:35;38312:9;38323:10;38299:12;:35::i;:::-;38360:43;38375:4;38381:10;38393:9;38360:43;;;;;;;;:::i;:::-;;;;;;;;27177:1;;;;27208:5:::0;27189:16;;:24;;;;;;;;;;;;;;;;;;37426:985;:::o;39610:1850::-;39707:18;:26;39726:6;39707:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39737:18;:29;39756:9;39737:29;;;;;;;;;;;;;;;;;;;;;;;;;39707:59;39704:220;;;39782:14;:12;:14::i;:::-;39704:220;;;39855:12;;39845:6;:22;;39837:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39704:220;39998:15;40016:29;40041:3;40016:20;40027:8;;40016:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;39998:47;;40056:20;40079:34;40109:3;40079:25;40090:13;;40079:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40056:57;;40130:11;:19;40142:6;40130:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40154:11;:22;40166:9;40154:22;;;;;;;;;;;;;;;;;;;;;;;;;40153:23;40130:46;40126:762;;;40193:81;40215:6;40223:9;40235:37;40259:12;40235:19;40246:7;40235:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40193:21;:81::i;:::-;40126:762;;;40297:11;:19;40309:6;40297:19;;;;;;;;;;;;;;;;;;;;;;;;;40296:20;:46;;;;;40320:11;:22;40332:9;40320:22;;;;;;;;;;;;;;;;;;;;;;;;;40296:46;40292:596;;;40359:79;40379:6;40387:9;40399:37;40423:12;40399:19;40410:7;40399:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40359:19;:79::i;:::-;40292:596;;;40461:11;:19;40473:6;40461:19;;;;;;;;;;;;;;;;;;;;;;;;;40460:20;:47;;;;;40485:11;:22;40497:9;40485:22;;;;;;;;;;;;;;;;;;;;;;;;;40484:23;40460:47;40456:432;;;40524:77;40542:6;40550:9;40562:37;40586:12;40562:19;40573:7;40562:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40524:17;:77::i;:::-;40456:432;;;40623:11;:19;40635:6;40623:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40646:11;:22;40658:9;40646:22;;;;;;;;;;;;;;;;;;;;;;;;;40623:45;40619:269;;;40685:81;40707:6;40715:9;40727:37;40751:12;40727:19;40738:7;40727:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40685:21;:81::i;:::-;40619:269;;;40799:77;40817:6;40825:9;40837:37;40861:12;40837:19;40848:7;40837:6;:10;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;40799:17;:77::i;:::-;40619:269;40456:432;40292:596;40126:762;41002:1;40992:7;:11;;;;41030:1;41014:13;:17;;;;41099:49;41119:6;41127:11;;;;;;;;;;;41140:7;41099:19;:49::i;:::-;41159:58;41179:6;41187:15;;;;;;;;;;;41204:12;41159:19;:58::i;:::-;41282:15;;41272:7;:25;;;;41324:21;;41308:13;:37;;;;41363:18;:26;41382:6;41363:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41393:18;:29;41412:9;41393:29;;;;;;;;;;;;;;;;;;;;;;;;;41363:59;41360:92;;;41437:15;:13;:15::i;:::-;41360:92;39610:1850;;;;;:::o;34121:561::-;34171:7;34180;34200:15;34218:7;;34200:25;;34236:15;34254:7;;34236:25;;34283:9;34278:289;34302:9;:16;;;;34298:1;:20;34278:289;;;34368:7;34344;:21;34352:9;34362:1;34352:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34344:21;;;;;;;;;;;;;;;;:31;:66;;;;34403:7;34379;:21;34387:9;34397:1;34387:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34379:21;;;;;;;;;;;;;;;;:31;34344:66;34340:97;;;34420:7;;34429;;34412:25;;;;;;;;;34340:97;34462:34;34474:7;:21;34482:9;34492:1;34482:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34474:21;;;;;;;;;;;;;;;;34462:7;:11;;:34;;;;:::i;:::-;34452:44;;34521:34;34533:7;:21;34541:9;34551:1;34541:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34533:21;;;;;;;;;;;;;;;;34521:7;:11;;:34;;;;:::i;:::-;34511:44;;34320:3;;;;;:::i;:::-;;;;34278:289;;;;34591:20;34603:7;;34591;;:11;;:20;;;;:::i;:::-;34581:7;:30;34577:61;;;34621:7;;34630;;34613:25;;;;;;;;34577:61;34657:7;34666;34649:25;;;;;;34121:561;;;:::o;6746:278::-;6832:7;6864:1;6860;:5;6867:12;6852:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6891:9;6907:1;6903;:5;;;;:::i;:::-;6891:17;;7015:1;7008:8;;;6746:278;;;;;:::o;33175:330::-;33235:7;33244;33253;33273:12;33288:24;33304:7;33288:15;:24::i;:::-;33273:39;;33323:18;33344:30;33366:7;33344:21;:30::i;:::-;33323:51;;33385:23;33411:33;33433:10;33411:17;33423:4;33411:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33385:59;;33463:15;33480:4;33486:10;33455:42;;;;;;;;;33175:330;;;;;:::o;33513:429::-;33628:7;33637;33646;33666:15;33684:24;33696:11;33684:7;:11;;:24;;;;:::i;:::-;33666:42;;33719:12;33734:21;33743:11;33734:4;:8;;:21;;;;:::i;:::-;33719:36;;33766:18;33787:27;33802:11;33787:10;:14;;:27;;;;:::i;:::-;33766:48;;33825:23;33851:33;33873:10;33851:17;33863:4;33851:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33825:59;;33903:7;33912:15;33929:4;33895:39;;;;;;;;;;33513:429;;;;;;;;:::o;38419:589::-;38545:21;38583:1;38569:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38545:40;;38614:4;38596;38601:1;38596:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;38640:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38630:4;38635:1;38630:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;38675:62;38692:4;38707:15;38725:11;38675:8;:62::i;:::-;38776:15;:66;;;38857:11;38883:1;38927:4;38954;38974:15;38776:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38419:589;;:::o;39016:513::-;39164:62;39181:4;39196:15;39214:11;39164:8;:62::i;:::-;39269:15;:31;;;39308:9;39341:4;39361:11;39387:1;39430;39473:7;:5;:7::i;:::-;39495:15;39269:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39016:513;;:::o;35401:141::-;35454:1;35444:7;:11;;;;35482:1;35466:13;:17;;;;35505:1;35494:8;:12;;;;35533:1;35517:13;:17;;;;35401:141::o;42572:566::-;42675:15;42692:23;42717:12;42731:23;42756:12;42770:18;42792:19;42803:7;42792:10;:19::i;:::-;42674:137;;;;;;;;;;;;42840:28;42860:7;42840;:15;42848:6;42840:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42822:7;:15;42830:6;42822:15;;;;;;;;;;;;;;;:46;;;;42897:28;42917:7;42897;:15;42905:6;42897:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42879:7;:15;42887:6;42879:15;;;;;;;;;;;;;;;:46;;;;42957:39;42980:15;42957:7;:18;42965:9;42957:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42936:7;:18;42944:9;42936:18;;;;;;;;;;;;;;;:60;;;;43010:26;43025:10;43010:14;:26::i;:::-;43047:23;43059:4;43065;43047:11;:23::i;:::-;43103:9;43086:44;;43095:6;43086:44;;;43114:15;43086:44;;;;;;:::i;:::-;;;;;;;;42572:566;;;;;;;;;:::o;41978:586::-;42079:15;42096:23;42121:12;42135:23;42160:12;42174:18;42196:19;42207:7;42196:10;:19::i;:::-;42078:137;;;;;;;;;;;;42244:28;42264:7;42244;:15;42252:6;42244:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42226:7;:15;42234:6;42226:15;;;;;;;;;;;;;;;:46;;;;42304:39;42327:15;42304:7;:18;42312:9;42304:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42283:7;:18;42291:9;42283:18;;;;;;;;;;;;;;;:60;;;;42375:39;42398:15;42375:7;:18;42383:9;42375:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42354:7;:18;42362:9;42354:18;;;;;;;;;;;;;;;:60;;;;42436:26;42451:10;42436:14;:26::i;:::-;42473:23;42485:4;42491;42473:11;:23::i;:::-;42529:9;42512:44;;42521:6;42512:44;;;42540:15;42512:44;;;;;;:::i;:::-;;;;;;;;41978:586;;;;;;;;;:::o;41468:502::-;41567:15;41584:23;41609:12;41623:23;41648:12;41662:18;41684:19;41695:7;41684:10;:19::i;:::-;41566:137;;;;;;;;;;;;41732:28;41752:7;41732;:15;41740:6;41732:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41714:7;:15;41722:6;41714:15;;;;;;;;;;;;;;;:46;;;;41792:39;41815:15;41792:7;:18;41800:9;41792:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41771:7;:18;41779:9;41771:18;;;;;;;;;;;;;;;:60;;;;41842:26;41857:10;41842:14;:26::i;:::-;41879:23;41891:4;41897;41879:11;:23::i;:::-;41935:9;41918:44;;41927:6;41918:44;;;41946:15;41918:44;;;;;;:::i;:::-;;;;;;;;41468:502;;;;;;;;;:::o;31837:642::-;31940:15;31957:23;31982:12;31996:23;32021:12;32035:18;32057:19;32068:7;32057:10;:19::i;:::-;31939:137;;;;;;;;;;;;32105:28;32125:7;32105;:15;32113:6;32105:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32087:7;:15;32095:6;32087:15;;;;;;;;;;;;;;;:46;;;;32162:28;32182:7;32162;:15;32170:6;32162:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32144:7;:15;32152:6;32144:15;;;;;;;;;;;;;;;:46;;;;32222:39;32245:15;32222:7;:18;32230:9;32222:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32201:7;:18;32209:9;32201:18;;;;;;;;;;;;;;;:60;;;;32293:39;32316:15;32293:7;:18;32301:9;32293:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32272:7;:18;32280:9;32272:18;;;;;;;;;;;;;;;:60;;;;32351:26;32366:10;32351:14;:26::i;:::-;32388:23;32400:4;32406;32388:11;:23::i;:::-;32444:9;32427:44;;32436:6;32427:44;;;32455:15;32427:44;;;;;;:::i;:::-;;;;;;;;31837:642;;;;;;;;;:::o;35554:142::-;35608:1;35598:7;:11;;;;35636:1;35620:13;:17;;;;35659:1;35648:8;:12;;;;35687:1;35671:13;:17;;;;35554:142::o;35061:154::-;35125:7;35152:55;35191:5;35152:20;35164:7;;35152;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35145:62;;35061:154;;;:::o;35223:166::-;35293:7;35320:61;35365:5;35320:26;35332:13;;35320:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35313:68;;35223:166;;;:::o;34694:355::-;34757:19;34780:10;:8;:10::i;:::-;34757:33;;34801:18;34822:27;34837:11;34822:10;:14;;:27;;;;:::i;:::-;34801:48;;34885:38;34912:10;34885:7;:22;34901:4;34885:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34860:7;:22;34876:4;34860:22;;;;;;;;;;;;;;;:63;;;;34937:11;:26;34957:4;34937:26;;;;;;;;;;;;;;;;;;;;;;;;;34934:107;;;35003:38;35030:10;35003:7;:22;35019:4;35003:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34978:7;:22;34994:4;34978:22;;;;;;;;;;;;;;;:63;;;;34934:107;34694:355;;;:::o;32593:147::-;32671:17;32683:4;32671:7;;:11;;:17;;;;:::i;:::-;32661:7;:27;;;;32712:20;32727:4;32712:10;;:14;;:20;;;;:::i;:::-;32699:10;:33;;;;32593:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;2732:6;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;2997:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;3701:6;3709;3717;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;4284:10;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;4787:3;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;5953:3;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;6377:3;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;6749:3;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;7121:3;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;7493:3;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;7865:3;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;8237:3;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;8609:3;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;8981:3;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;9353:3;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;10097:3;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;10469:3;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;10841:3;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:366::-;11213:3;11234:67;11298:2;11293:3;11234:67;:::i;:::-;11227:74;;11310:93;11399:3;11310:93;:::i;:::-;11428:2;11423:3;11419:12;11412:19;;11217:220;;;:::o;11443:118::-;11530:24;11548:5;11530:24;:::i;:::-;11525:3;11518:37;11508:53;;:::o;11567:112::-;11650:22;11666:5;11650:22;:::i;:::-;11645:3;11638:35;11628:51;;:::o;11685:222::-;11778:4;11816:2;11805:9;11801:18;11793:26;;11829:71;11897:1;11886:9;11882:17;11873:6;11829:71;:::i;:::-;11783:124;;;;:::o;11913:807::-;12162:4;12200:3;12189:9;12185:19;12177:27;;12214:71;12282:1;12271:9;12267:17;12258:6;12214:71;:::i;:::-;12295:72;12363:2;12352:9;12348:18;12339:6;12295:72;:::i;:::-;12377:80;12453:2;12442:9;12438:18;12429:6;12377:80;:::i;:::-;12467;12543:2;12532:9;12528:18;12519:6;12467:80;:::i;:::-;12557:73;12625:3;12614:9;12610:19;12601:6;12557:73;:::i;:::-;12640;12708:3;12697:9;12693:19;12684:6;12640:73;:::i;:::-;12167:553;;;;;;;;;:::o;12726:210::-;12813:4;12851:2;12840:9;12836:18;12828:26;;12864:65;12926:1;12915:9;12911:17;12902:6;12864:65;:::i;:::-;12818:118;;;;:::o;12942:276::-;13062:4;13100:2;13089:9;13085:18;13077:26;;13113:98;13208:1;13197:9;13193:17;13184:6;13113:98;:::i;:::-;13067:151;;;;:::o;13224:313::-;13337:4;13375:2;13364:9;13360:18;13352:26;;13424:9;13418:4;13414:20;13410:1;13399:9;13395:17;13388:47;13452:78;13525:4;13516:6;13452:78;:::i;:::-;13444:86;;13342:195;;;;:::o;13543:419::-;13709:4;13747:2;13736:9;13732:18;13724:26;;13796:9;13790:4;13786:20;13782:1;13771:9;13767:17;13760:47;13824:131;13950:4;13824:131;:::i;:::-;13816:139;;13714:248;;;:::o;13968:419::-;14134:4;14172:2;14161:9;14157:18;14149:26;;14221:9;14215:4;14211:20;14207:1;14196:9;14192:17;14185:47;14249:131;14375:4;14249:131;:::i;:::-;14241:139;;14139:248;;;:::o;14393:419::-;14559:4;14597:2;14586:9;14582:18;14574:26;;14646:9;14640:4;14636:20;14632:1;14621:9;14617:17;14610:47;14674:131;14800:4;14674:131;:::i;:::-;14666:139;;14564:248;;;:::o;14818:419::-;14984:4;15022:2;15011:9;15007:18;14999:26;;15071:9;15065:4;15061:20;15057:1;15046:9;15042:17;15035:47;15099:131;15225:4;15099:131;:::i;:::-;15091:139;;14989:248;;;:::o;15243:419::-;15409:4;15447:2;15436:9;15432:18;15424:26;;15496:9;15490:4;15486:20;15482:1;15471:9;15467:17;15460:47;15524:131;15650:4;15524:131;:::i;:::-;15516:139;;15414:248;;;:::o;15668:419::-;15834:4;15872:2;15861:9;15857:18;15849:26;;15921:9;15915:4;15911:20;15907:1;15896:9;15892:17;15885:47;15949:131;16075:4;15949:131;:::i;:::-;15941:139;;15839:248;;;:::o;16093:419::-;16259:4;16297:2;16286:9;16282:18;16274:26;;16346:9;16340:4;16336:20;16332:1;16321:9;16317:17;16310:47;16374:131;16500:4;16374:131;:::i;:::-;16366:139;;16264:248;;;:::o;16518:419::-;16684:4;16722:2;16711:9;16707:18;16699:26;;16771:9;16765:4;16761:20;16757:1;16746:9;16742:17;16735:47;16799:131;16925:4;16799:131;:::i;:::-;16791:139;;16689:248;;;:::o;16943:419::-;17109:4;17147:2;17136:9;17132:18;17124:26;;17196:9;17190:4;17186:20;17182:1;17171:9;17167:17;17160:47;17224:131;17350:4;17224:131;:::i;:::-;17216:139;;17114:248;;;:::o;17368:419::-;17534:4;17572:2;17561:9;17557:18;17549:26;;17621:9;17615:4;17611:20;17607:1;17596:9;17592:17;17585:47;17649:131;17775:4;17649:131;:::i;:::-;17641:139;;17539:248;;;:::o;17793:419::-;17959:4;17997:2;17986:9;17982:18;17974:26;;18046:9;18040:4;18036:20;18032:1;18021:9;18017:17;18010:47;18074:131;18200:4;18074:131;:::i;:::-;18066:139;;17964:248;;;:::o;18218:419::-;18384:4;18422:2;18411:9;18407:18;18399:26;;18471:9;18465:4;18461:20;18457:1;18446:9;18442:17;18435:47;18499:131;18625:4;18499:131;:::i;:::-;18491:139;;18389:248;;;:::o;18643:419::-;18809:4;18847:2;18836:9;18832:18;18824:26;;18896:9;18890:4;18886:20;18882:1;18871:9;18867:17;18860:47;18924:131;19050:4;18924:131;:::i;:::-;18916:139;;18814:248;;;:::o;19068:419::-;19234:4;19272:2;19261:9;19257:18;19249:26;;19321:9;19315:4;19311:20;19307:1;19296:9;19292:17;19285:47;19349:131;19475:4;19349:131;:::i;:::-;19341:139;;19239:248;;;:::o;19493:222::-;19586:4;19624:2;19613:9;19609:18;19601:26;;19637:71;19705:1;19694:9;19690:17;19681:6;19637:71;:::i;:::-;19591:124;;;;:::o;19721:831::-;19984:4;20022:3;20011:9;20007:19;19999:27;;20036:71;20104:1;20093:9;20089:17;20080:6;20036:71;:::i;:::-;20117:80;20193:2;20182:9;20178:18;20169:6;20117:80;:::i;:::-;20244:9;20238:4;20234:20;20229:2;20218:9;20214:18;20207:48;20272:108;20375:4;20366:6;20272:108;:::i;:::-;20264:116;;20390:72;20458:2;20447:9;20443:18;20434:6;20390:72;:::i;:::-;20472:73;20540:3;20529:9;20525:19;20516:6;20472:73;:::i;:::-;19989:563;;;;;;;;:::o;20558:442::-;20707:4;20745:2;20734:9;20730:18;20722:26;;20758:71;20826:1;20815:9;20811:17;20802:6;20758:71;:::i;:::-;20839:72;20907:2;20896:9;20892:18;20883:6;20839:72;:::i;:::-;20921;20989:2;20978:9;20974:18;20965:6;20921:72;:::i;:::-;20712:288;;;;;;:::o;21006:214::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:67;21210:1;21199:9;21195:17;21186:6;21146:67;:::i;:::-;21100:120;;;;:::o;21226:132::-;21293:4;21316:3;21308:11;;21346:4;21341:3;21337:14;21329:22;;21298:60;;;:::o;21364:114::-;21431:6;21465:5;21459:12;21449:22;;21438:40;;;:::o;21484:99::-;21536:6;21570:5;21564:12;21554:22;;21543:40;;;:::o;21589:113::-;21659:4;21691;21686:3;21682:14;21674:22;;21664:38;;;:::o;21708:184::-;21807:11;21841:6;21836:3;21829:19;21881:4;21876:3;21872:14;21857:29;;21819:73;;;;:::o;21898:169::-;21982:11;22016:6;22011:3;22004:19;22056:4;22051:3;22047:14;22032:29;;21994:73;;;;:::o;22073:305::-;22113:3;22132:20;22150:1;22132:20;:::i;:::-;22127:25;;22166:20;22184:1;22166:20;:::i;:::-;22161:25;;22320:1;22252:66;22248:74;22245:1;22242:81;22239:2;;;22326:18;;:::i;:::-;22239:2;22370:1;22367;22363:9;22356:16;;22117:261;;;;:::o;22384:185::-;22424:1;22441:20;22459:1;22441:20;:::i;:::-;22436:25;;22475:20;22493:1;22475:20;:::i;:::-;22470:25;;22514:1;22504:2;;22519:18;;:::i;:::-;22504:2;22561:1;22558;22554:9;22549:14;;22426:143;;;;:::o;22575:348::-;22615:7;22638:20;22656:1;22638:20;:::i;:::-;22633:25;;22672:20;22690:1;22672:20;:::i;:::-;22667:25;;22860:1;22792:66;22788:74;22785:1;22782:81;22777:1;22770:9;22763:17;22759:105;22756:2;;;22867:18;;:::i;:::-;22756:2;22915:1;22912;22908:9;22897:20;;22623:300;;;;:::o;22929:191::-;22969:4;22989:20;23007:1;22989:20;:::i;:::-;22984:25;;23023:20;23041:1;23023:20;:::i;:::-;23018:25;;23062:1;23059;23056:8;23053:2;;;23067:18;;:::i;:::-;23053:2;23112:1;23109;23105:9;23097:17;;22974:146;;;;:::o;23126:96::-;23163:7;23192:24;23210:5;23192:24;:::i;:::-;23181:35;;23171:51;;;:::o;23228:90::-;23262:7;23305:5;23298:13;23291:21;23280:32;;23270:48;;;:::o;23324:126::-;23361:7;23401:42;23394:5;23390:54;23379:65;;23369:81;;;:::o;23456:77::-;23493:7;23522:5;23511:16;;23501:32;;;:::o;23539:86::-;23574:7;23614:4;23607:5;23603:16;23592:27;;23582:43;;;:::o;23631:180::-;23708:9;23741:64;23799:5;23741:64;:::i;:::-;23728:77;;23718:93;;;:::o;23817:140::-;23894:9;23927:24;23945:5;23927:24;:::i;:::-;23914:37;;23904:53;;;:::o;23963:121::-;24021:9;24054:24;24072:5;24054:24;:::i;:::-;24041:37;;24031:53;;;:::o;24090:307::-;24158:1;24168:113;24182:6;24179:1;24176:13;24168:113;;;24267:1;24262:3;24258:11;24252:18;24248:1;24243:3;24239:11;24232:39;24204:2;24201:1;24197:10;24192:15;;24168:113;;;24299:6;24296:1;24293:13;24290:2;;;24379:1;24370:6;24365:3;24361:16;24354:27;24290:2;24139:258;;;;:::o;24403:320::-;24447:6;24484:1;24478:4;24474:12;24464:22;;24531:1;24525:4;24521:12;24552:18;24542:2;;24608:4;24600:6;24596:17;24586:27;;24542:2;24670;24662:6;24659:14;24639:18;24636:38;24633:2;;;24689:18;;:::i;:::-;24633:2;24454:269;;;;:::o;24729:233::-;24768:3;24791:24;24809:5;24791:24;:::i;:::-;24782:33;;24837:66;24830:5;24827:77;24824:2;;;24907:18;;:::i;:::-;24824:2;24954:1;24947:5;24943:13;24936:20;;24772:190;;;:::o;24968:180::-;25016:77;25013:1;25006:88;25113:4;25110:1;25103:15;25137:4;25134:1;25127:15;25154:180;25202:77;25199:1;25192:88;25299:4;25296:1;25289:15;25323:4;25320:1;25313:15;25340:180;25388:77;25385:1;25378:88;25485:4;25482:1;25475:15;25509:4;25506:1;25499:15;25526:102;25567:6;25618:2;25614:7;25609:2;25602:5;25598:14;25594:28;25584:38;;25574:54;;;:::o;25634:222::-;25774:34;25770:1;25762:6;25758:14;25751:58;25843:5;25838:2;25830:6;25826:15;25819:30;25740:116;:::o;25862:229::-;26002:34;25998:1;25990:6;25986:14;25979:58;26071:12;26066:2;26058:6;26054:15;26047:37;25968:123;:::o;26097:225::-;26237:34;26233:1;26225:6;26221:14;26214:58;26306:8;26301:2;26293:6;26289:15;26282:33;26203:119;:::o;26328:221::-;26468:34;26464:1;26456:6;26452:14;26445:58;26537:4;26532:2;26524:6;26520:15;26513:29;26434:115;:::o;26555:177::-;26695:29;26691:1;26683:6;26679:14;26672:53;26661:71;:::o;26738:181::-;26878:33;26874:1;26866:6;26862:14;26855:57;26844:75;:::o;26925:227::-;27065:34;27061:1;27053:6;27049:14;27042:58;27134:10;27129:2;27121:6;27117:15;27110:35;27031:121;:::o;27158:238::-;27298:34;27294:1;27286:6;27282:14;27275:58;27367:21;27362:2;27354:6;27350:15;27343:46;27264:132;:::o;27402:220::-;27542:34;27538:1;27530:6;27526:14;27519:58;27611:3;27606:2;27598:6;27594:15;27587:28;27508:114;:::o;27628:182::-;27768:34;27764:1;27756:6;27752:14;27745:58;27734:76;:::o;27816:228::-;27956:34;27952:1;27944:6;27940:14;27933:58;28025:11;28020:2;28012:6;28008:15;28001:36;27922:122;:::o;28050:224::-;28190:34;28186:1;28178:6;28174:14;28167:58;28259:7;28254:2;28246:6;28242:15;28235:32;28156:118;:::o;28280:223::-;28420:34;28416:1;28408:6;28404:14;28397:58;28489:6;28484:2;28476:6;28472:15;28465:31;28386:117;:::o;28509:231::-;28649:34;28645:1;28637:6;28633:14;28626:58;28718:14;28713:2;28705:6;28701:15;28694:39;28615:125;:::o;28746:122::-;28819:24;28837:5;28819:24;:::i;:::-;28812:5;28809:35;28799:2;;28858:1;28855;28848:12;28799:2;28789:79;:::o;28874:116::-;28944:21;28959:5;28944:21;:::i;:::-;28937:5;28934:32;28924:2;;28980:1;28977;28970:12;28924:2;28914:76;:::o;28996:122::-;29069:24;29087:5;29069:24;:::i;:::-;29062:5;29059:35;29049:2;;29108:1;29105;29098:12;29049:2;29039:79;:::o
Swarm Source
ipfs://53ccdca43730a50bd0fdcfaa5e32ea5a2293887cc4c8d0ed5eda88954482ad8c
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.