ERC-20
Deflationary Token
Overview
Max Total Supply
2,000,000,000,000 RKR
Holders
1,941 ( -0.052%)
Market
Price
$0.00 @ 0.000000 ETH (+2.02%)
Onchain Market Cap
$7,425,439.03
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
142,660,544.831460532 RKRValue
$529.66 ( ~0.209660388303653 Eth) [0.0071%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
REAKTOR
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-21 */ /** * REAKTOR Token 9/20/2022 */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return 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 () internal { 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract REAKTOR 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 private _tTotal = 2000000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "REAKTOR"; string private _symbol = "RKR"; uint8 private _decimals = 9; uint256 public _taxFee = 25; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 25; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 50000 * 10**6 * 10**9; uint256 private numTokensSellToAddToLiquidity = 5000 * 10**6 * 10**9; bool public _lotteryEnabled = true; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor (address routerAddress) public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function random() private view returns (uint) { return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } function hasWonTheLottery() private view returns (bool) { if (_lotteryEnabled == false) { return false; } return random() % 100 < 25; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setMaxTxAmount(uint256 amount) external onlyOwner() { _maxTxAmount = amount.mul(10**9); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setLotteryEnabled(bool enabled) public onlyOwner { _lotteryEnabled = enabled; } //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**3 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**3 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // 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)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || hasWonTheLottery()){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function initiateSwapAndLiquify(uint256 totalTokensToSwapAndLiquify) public onlyOwner { uint256 contractBalance = balanceOf(address(this)); require(totalTokensToSwapAndLiquify <= contractBalance, "Cannot swap more tokens than the contract has"); require(inSwapAndLiquify == false, "Currently in a swap and liquify cycle"); require(swapAndLiquifyEnabled, "Swap and liquify is currently not enabled"); swapAndLiquify(totalTokensToSwapAndLiquify); } 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,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lotteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalTokensToSwapAndLiquify","type":"uint256"}],"name":"initiateSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","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":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052686c6b935b8bbd400000600955600954600019816200001f57fe5b0660001903600a556040518060400160405280600781526020017f5245414b544f5200000000000000000000000000000000000000000000000000815250600c90805190602001906200007492919062000639565b506040518060400160405280600381526020017f524b520000000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c292919062000639565b506009600e60006101000a81548160ff021916908360ff1602179055506019600f55600f5460105560196011556011546012556001601360016101000a81548160ff0219169083151502179055506802b5e3af16b1880000601455674563918244f400006015556001601660006101000a81548160ff0219169083151502179055503480156200015157600080fd5b5060405162005b5238038062005b52833981810160405260208110156200017757600080fd5b810190808051906020019092919050505060006200019a6200060860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600360006200024f6200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d957600080fd5b505afa158015620002ee573d6000803e3d6000fd5b505050506040513d60208110156200030557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037957600080fd5b505afa1580156200038e573d6000803e3d6000fd5b505050506040513d6020811015620003a557600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200042057600080fd5b505af115801562000435573d6000803e3d6000fd5b505050506040513d60208110156200044c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004e06200061060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005996200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a35050620006df565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200067c57805160ff1916838001178555620006ad565b82800160010185558215620006ad579182015b82811115620006ac5782518255916020019190600101906200068f565b5b509050620006bc9190620006c0565b5090565b5b80821115620006db576000816000905550600101620006c1565b5090565b60805160601c60a05160601c61542b6200072760003980611a275280613496525080610ff252806141d252806142be52806142e552806143f05280614417525061542b6000f3fe60806040526004361061024a5760003560e01c80636869f0e711610139578063a457c2d7116100b6578063d543dbeb1161007a578063d543dbeb14610c7c578063dd46706414610cb7578063dd62ed3e14610cf2578063ea2f0b3714610d77578063ec28438a14610dc8578063f2fde38b14610e0357610251565b8063a457c2d714610b1b578063a69df4b514610b8c578063a9059cbb14610ba3578063b6c5232414610c14578063c49b9a8014610c3f57610251565b806385a3d766116100fd57806385a3d7661461096d57806388f82020146109a85780638da5cb5b14610a0f5780638ee88c5314610a5057806395d89b4114610a8b57610251565b80636869f0e71461086e5780636bc87c3a1461089b57806370a08231146108c6578063715018a61461092b5780637d1db4a51461094257610251565b80633685d419116101c75780634549b0391161018b5780634549b039146106ed57806349bd5a5e146107485780634a74bb021461078957806352390c02146107b65780635342acb41461080757610251565b80633685d4191461057457806339509351146105c55780633b124fe7146106365780633bd5d17314610661578063437823ec1461069c57610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632583de65146104ba5780632d838119146104f7578063313ce5671461054657610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b31461032157806313114a9d146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610e54565b005b34801561029d57600080fd5b506102a6610f26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc8565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a7610fe6565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2610ff0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b50610413611014565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061101e565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f5600480360360208110156104dd57600080fd5b810190808035151590602001909291905050506110f7565b005b34801561050357600080fd5b506105306004803603602081101561051a57600080fd5b81019080803590602001909291905050506111dc565b6040518082815260200191505060405180910390f35b34801561055257600080fd5b5061055b611260565b604051808260ff16815260200191505060405180910390f35b34801561058057600080fd5b506105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611277565b005b3480156105d157600080fd5b5061061e600480360360408110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611601565b60405180821515815260200191505060405180910390f35b34801561064257600080fd5b5061064b6116b4565b6040518082815260200191505060405180910390f35b34801561066d57600080fd5b5061069a6004803603602081101561068457600080fd5b81019080803590602001909291905050506116ba565b005b3480156106a857600080fd5b506106eb600480360360208110156106bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184b565b005b3480156106f957600080fd5b506107326004803603604081101561071057600080fd5b810190808035906020019092919080351515906020019092919050505061196e565b6040518082815260200191505060405180910390f35b34801561075457600080fd5b5061075d611a25565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079557600080fd5b5061079e611a49565b60405180821515815260200191505060405180910390f35b3480156107c257600080fd5b50610805600480360360208110156107d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a5c565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d76565b60405180821515815260200191505060405180910390f35b34801561087a57600080fd5b50610883611dcc565b60405180821515815260200191505060405180910390f35b3480156108a757600080fd5b506108b0611ddf565b6040518082815260200191505060405180910390f35b3480156108d257600080fd5b50610915600480360360208110156108e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de5565b6040518082815260200191505060405180910390f35b34801561093757600080fd5b50610940611ed0565b005b34801561094e57600080fd5b50610957612056565b6040518082815260200191505060405180910390f35b34801561097957600080fd5b506109a66004803603602081101561099057600080fd5b810190808035906020019092919050505061205c565b005b3480156109b457600080fd5b506109f7600480360360208110156109cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612268565b60405180821515815260200191505060405180910390f35b348015610a1b57600080fd5b50610a246122be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5c57600080fd5b50610a8960048036036020811015610a7357600080fd5b81019080803590602001909291905050506122e7565b005b348015610a9757600080fd5b50610aa06123b9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae0578082015181840152602081019050610ac5565b50505050905090810190601f168015610b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b2757600080fd5b50610b7460048036036040811015610b3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061245b565b60405180821515815260200191505060405180910390f35b348015610b9857600080fd5b50610ba1612528565b005b348015610baf57600080fd5b50610bfc60048036036040811015610bc657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612745565b60405180821515815260200191505060405180910390f35b348015610c2057600080fd5b50610c29612763565b6040518082815260200191505060405180910390f35b348015610c4b57600080fd5b50610c7a60048036036020811015610c6257600080fd5b8101908080351515906020019092919050505061276d565b005b348015610c8857600080fd5b50610cb560048036036020811015610c9f57600080fd5b810190808035906020019092919050505061288b565b005b348015610cc357600080fd5b50610cf060048036036020811015610cda57600080fd5b8101908080359060200190929190505050612984565b005b348015610cfe57600080fd5b50610d6160048036036040811015610d1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b75565b6040518082815260200191505060405180910390f35b348015610d8357600080fd5b50610dc660048036036020811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfc565b005b348015610dd457600080fd5b50610e0160048036036020811015610deb57600080fd5b8101908080359060200190929190505050612d1f565b005b348015610e0f57600080fd5b50610e5260048036036020811015610e2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e07565b005b610e5c613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fbe5780601f10610f9357610100808354040283529160200191610fbe565b820191906000526020600020905b815481529060010190602001808311610fa157829003601f168201915b5050505050905090565b6000610fdc610fd5613012565b848461301a565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b600061102b848484613211565b6110ec84611037613012565b6110e78560405180606001604052806028815260200161529660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061109d613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e59092919063ffffffff16565b61301a565b600190509392505050565b6110ff613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000600a54821115611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151db602a913960400191505060405180910390fd5b60006112436136a5565b905061125881846136d090919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61127f613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156115fd578173ffffffffffffffffffffffffffffffffffffffff166008828154811061143257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115f05760086001600880549050038154811061148e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114c657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115b657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115fd565b8080600101915050611401565b5050565b60006116aa61160e613012565b846116a5856005600061161f613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b61301a565b6001905092915050565b600f5481565b60006116c4613012565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615382602c913960400191505060405180910390fd5b6000611774836137a2565b505050505090506117cd81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182581600a546137fe90919063ffffffff16565b600a8190555061184083600b5461371a90919063ffffffff16565b600b81905550505050565b611853613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156119e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611a085760006119f8846137a2565b5050505050905080915050611a1f565b6000611a13846137a2565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360019054906101000a900460ff1681565b611a64613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cb857611c74600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601660009054906101000a900460ff1681565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e8057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ecb565b611ec8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc565b90505b919050565b611ed8613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b612064613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061212f30611de5565b90508082111561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061530c602d913960400191505060405180910390fd5b60001515601360009054906101000a900460ff161515146121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e76025913960400191505060405180910390fd5b601360019054906101000a900460ff1661225b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151b26029913960400191505060405180910390fd5b61226482613848565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6122ef613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124515780601f1061242657610100808354040283529160200191612451565b820191906000526020600020905b81548152906001019060200180831161243457829003601f168201915b5050505050905090565b600061251e612468613012565b84612519856040518060600160405280602581526020016153d16025913960056000612492613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e59092919063ffffffff16565b61301a565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153ae6023913960400191505060405180910390fd5b6002544211612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612759612752613012565b8484613211565b6001905092915050565b6000600254905090565b612775613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612835576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612893613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61297b606461296d8360095461392a90919063ffffffff16565b6136d090919063ffffffff16565b60148190555050565b61298c613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612c04613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612d27613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612dfe633b9aca008261392a90919063ffffffff16565b60148190555050565b612e0f613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806152056026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061535e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522b6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153396025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561331d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061518f6023913960400191505060405180910390fd5b60008111613376576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152be6029913960400191505060405180910390fd5b61337e6122be565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156133ec57506133bc6122be565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5760145481111561344c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524d6028913960400191505060405180910390fd5b5b600061345830611de5565b905060145481106134695760145490505b6000601554821015905080801561348d5750601360009054906101000a900460ff16155b80156134e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134fd5750601360019054906101000a900460ff165b1561351157601554915061351082613848565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135b85750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806135c757506135c66139b0565b5b156135d157600090505b6135dd868686846139f1565b505050505050565b6000838311158290613692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561365757808201518184015260208101905061363c565b50505050905090810190601f1680156136845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006136b2613d02565b915091506136c981836136d090919063ffffffff16565b9250505090565b600061371283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f93565b905092915050565b600080828401905083811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006137b98a614059565b92509250925060008060006137d78d86866137d26136a5565b6140b3565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061384083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135e5565b905092915050565b6001601360006101000a81548160ff02191690831515021790555060006138796002836136d090919063ffffffff16565b9050600061389082846137fe90919063ffffffff16565b905060004790506138a08361413c565b60006138b582476137fe90919063ffffffff16565b90506138c183826143ea565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b60008083141561393d57600090506139aa565b600082840290508284828161394e57fe5b04146139a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152756021913960400191505060405180910390fd5b809150505b92915050565b6000801515601660009054906101000a900460ff16151514156139d657600090506139ee565b601960646139e261453b565b816139e957fe5b061090505b90565b806139ff576139fe614574565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613aa25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ab757613ab28484846145b7565b613cee565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b5a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b6f57613b6a848484614817565b613ced565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c135750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c2857613c23848484614a77565b613cec565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cca5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cdf57613cda848484614c42565b613ceb565b613cea848484614a77565b5b5b5b5b80613cfc57613cfb614f37565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613f5657826003600060088481548110613d3557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e1c5750816004600060088481548110613db457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e3357600a5460095494509450505050613f8f565b613ebc6003600060088481548110613e4757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137fe90919063ffffffff16565b9250613f476004600060088481548110613ed257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137fe90919063ffffffff16565b91508080600101915050613d16565b50613f6e600954600a546136d090919063ffffffff16565b821015613f8657600a54600954935093505050613f8f565b81819350935050505b9091565b6000808311829061403f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614004578082015181840152602081019050613fe9565b50505050905090810190601f1680156140315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404b57fe5b049050809150509392505050565b60008060008061406885614f4b565b9050600061407586614f7d565b9050600061409e82614090858a6137fe90919063ffffffff16565b6137fe90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806140cc858961392a90919063ffffffff16565b905060006140e3868961392a90919063ffffffff16565b905060006140fa878961392a90919063ffffffff16565b905060006141238261411585876137fe90919063ffffffff16565b6137fe90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561415657600080fd5b506040519080825280602002602001820160405280156141855781602001602082028036833780820191505090505b509050308160008151811061419657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561423657600080fd5b505afa15801561424a573d6000803e3d6000fd5b505050506040513d602081101561426057600080fd5b81019080805190602001909291905050508160018151811061427e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142e3307f00000000000000000000000000000000000000000000000000000000000000008461301a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143a557808201518184015260208101905061438a565b505050509050019650505050505050600060405180830381600087803b1580156143ce57600080fd5b505af11580156143e2573d6000803e3d6000fd5b505050505050565b614415307f00000000000000000000000000000000000000000000000000000000000000008461301a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061445f6122be565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156144e457600080fd5b505af11580156144f8573d6000803e3d6000fd5b50505050506040513d606081101561450f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000444260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c905090565b6000600f5414801561458857506000601154145b15614592576145b5565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b6000806000806000806145c9876137a2565b95509550955095509550955061462787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146bc86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479d81614faf565b6147a78483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614829876137a2565b95509550955095509550955061488786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061491c83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149b185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149fd81614faf565b614a078483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614a89876137a2565b955095509550955095509550614ae786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b7c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bc881614faf565b614bd28483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c54876137a2565b955095509550955095509550614cb287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d4786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ddc83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e7185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ebd81614faf565b614ec78483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b6000614f766103e8614f68600f548561392a90919063ffffffff16565b6136d090919063ffffffff16565b9050919050565b6000614fa86103e8614f9a6011548561392a90919063ffffffff16565b6136d090919063ffffffff16565b9050919050565b6000614fb96136a5565b90506000614fd0828461392a90919063ffffffff16565b905061502481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561514f5761510b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61516982600a546137fe90919063ffffffff16565b600a8190555061518481600b5461371a90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735377617020616e64206c6971756966792069732063757272656e746c79206e6f7420656e61626c6564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f43757272656e746c7920696e2061207377617020616e64206c697175696679206379636c6543616e6e6f742073776170206d6f726520746f6b656e73207468616e2074686520636f6e74726163742068617345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220890350b8339d4c200ce9cf87f0b27042a3cad005ccb3f08de21e486b6b93921b64736f6c634300060c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80636869f0e711610139578063a457c2d7116100b6578063d543dbeb1161007a578063d543dbeb14610c7c578063dd46706414610cb7578063dd62ed3e14610cf2578063ea2f0b3714610d77578063ec28438a14610dc8578063f2fde38b14610e0357610251565b8063a457c2d714610b1b578063a69df4b514610b8c578063a9059cbb14610ba3578063b6c5232414610c14578063c49b9a8014610c3f57610251565b806385a3d766116100fd57806385a3d7661461096d57806388f82020146109a85780638da5cb5b14610a0f5780638ee88c5314610a5057806395d89b4114610a8b57610251565b80636869f0e71461086e5780636bc87c3a1461089b57806370a08231146108c6578063715018a61461092b5780637d1db4a51461094257610251565b80633685d419116101c75780634549b0391161018b5780634549b039146106ed57806349bd5a5e146107485780634a74bb021461078957806352390c02146107b65780635342acb41461080757610251565b80633685d4191461057457806339509351146105c55780633b124fe7146106365780633bd5d17314610661578063437823ec1461069c57610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632583de65146104ba5780632d838119146104f7578063313ce5671461054657610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b31461032157806313114a9d146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610e54565b005b34801561029d57600080fd5b506102a6610f26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc8565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a7610fe6565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2610ff0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b50610413611014565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061101e565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f5600480360360208110156104dd57600080fd5b810190808035151590602001909291905050506110f7565b005b34801561050357600080fd5b506105306004803603602081101561051a57600080fd5b81019080803590602001909291905050506111dc565b6040518082815260200191505060405180910390f35b34801561055257600080fd5b5061055b611260565b604051808260ff16815260200191505060405180910390f35b34801561058057600080fd5b506105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611277565b005b3480156105d157600080fd5b5061061e600480360360408110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611601565b60405180821515815260200191505060405180910390f35b34801561064257600080fd5b5061064b6116b4565b6040518082815260200191505060405180910390f35b34801561066d57600080fd5b5061069a6004803603602081101561068457600080fd5b81019080803590602001909291905050506116ba565b005b3480156106a857600080fd5b506106eb600480360360208110156106bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184b565b005b3480156106f957600080fd5b506107326004803603604081101561071057600080fd5b810190808035906020019092919080351515906020019092919050505061196e565b6040518082815260200191505060405180910390f35b34801561075457600080fd5b5061075d611a25565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079557600080fd5b5061079e611a49565b60405180821515815260200191505060405180910390f35b3480156107c257600080fd5b50610805600480360360208110156107d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a5c565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d76565b60405180821515815260200191505060405180910390f35b34801561087a57600080fd5b50610883611dcc565b60405180821515815260200191505060405180910390f35b3480156108a757600080fd5b506108b0611ddf565b6040518082815260200191505060405180910390f35b3480156108d257600080fd5b50610915600480360360208110156108e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de5565b6040518082815260200191505060405180910390f35b34801561093757600080fd5b50610940611ed0565b005b34801561094e57600080fd5b50610957612056565b6040518082815260200191505060405180910390f35b34801561097957600080fd5b506109a66004803603602081101561099057600080fd5b810190808035906020019092919050505061205c565b005b3480156109b457600080fd5b506109f7600480360360208110156109cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612268565b60405180821515815260200191505060405180910390f35b348015610a1b57600080fd5b50610a246122be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5c57600080fd5b50610a8960048036036020811015610a7357600080fd5b81019080803590602001909291905050506122e7565b005b348015610a9757600080fd5b50610aa06123b9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae0578082015181840152602081019050610ac5565b50505050905090810190601f168015610b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b2757600080fd5b50610b7460048036036040811015610b3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061245b565b60405180821515815260200191505060405180910390f35b348015610b9857600080fd5b50610ba1612528565b005b348015610baf57600080fd5b50610bfc60048036036040811015610bc657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612745565b60405180821515815260200191505060405180910390f35b348015610c2057600080fd5b50610c29612763565b6040518082815260200191505060405180910390f35b348015610c4b57600080fd5b50610c7a60048036036020811015610c6257600080fd5b8101908080351515906020019092919050505061276d565b005b348015610c8857600080fd5b50610cb560048036036020811015610c9f57600080fd5b810190808035906020019092919050505061288b565b005b348015610cc357600080fd5b50610cf060048036036020811015610cda57600080fd5b8101908080359060200190929190505050612984565b005b348015610cfe57600080fd5b50610d6160048036036040811015610d1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b75565b6040518082815260200191505060405180910390f35b348015610d8357600080fd5b50610dc660048036036020811015610d9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfc565b005b348015610dd457600080fd5b50610e0160048036036020811015610deb57600080fd5b8101908080359060200190929190505050612d1f565b005b348015610e0f57600080fd5b50610e5260048036036020811015610e2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e07565b005b610e5c613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fbe5780601f10610f9357610100808354040283529160200191610fbe565b820191906000526020600020905b815481529060010190602001808311610fa157829003601f168201915b5050505050905090565b6000610fdc610fd5613012565b848461301a565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b600061102b848484613211565b6110ec84611037613012565b6110e78560405180606001604052806028815260200161529660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061109d613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e59092919063ffffffff16565b61301a565b600190509392505050565b6110ff613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000600a54821115611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151db602a913960400191505060405180910390fd5b60006112436136a5565b905061125881846136d090919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61127f613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156115fd578173ffffffffffffffffffffffffffffffffffffffff166008828154811061143257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115f05760086001600880549050038154811061148e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114c657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115b657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115fd565b8080600101915050611401565b5050565b60006116aa61160e613012565b846116a5856005600061161f613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b61301a565b6001905092915050565b600f5481565b60006116c4613012565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615382602c913960400191505060405180910390fd5b6000611774836137a2565b505050505090506117cd81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061182581600a546137fe90919063ffffffff16565b600a8190555061184083600b5461371a90919063ffffffff16565b600b81905550505050565b611853613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156119e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611a085760006119f8846137a2565b5050505050905080915050611a1f565b6000611a13846137a2565b50505050915050809150505b92915050565b7f000000000000000000000000b227eb108f570fc6ec9b82598c469b93e5e0a7c281565b601360019054906101000a900460ff1681565b611a64613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cb857611c74600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601660009054906101000a900460ff1681565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e8057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ecb565b611ec8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111dc565b90505b919050565b611ed8613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b612064613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061212f30611de5565b90508082111561218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061530c602d913960400191505060405180910390fd5b60001515601360009054906101000a900460ff161515146121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152e76025913960400191505060405180910390fd5b601360019054906101000a900460ff1661225b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151b26029913960400191505060405180910390fd5b61226482613848565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6122ef613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124515780601f1061242657610100808354040283529160200191612451565b820191906000526020600020905b81548152906001019060200180831161243457829003601f168201915b5050505050905090565b600061251e612468613012565b84612519856040518060600160405280602581526020016153d16025913960056000612492613012565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e59092919063ffffffff16565b61301a565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153ae6023913960400191505060405180910390fd5b6002544211612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612759612752613012565b8484613211565b6001905092915050565b6000600254905090565b612775613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612835576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612893613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61297b606461296d8360095461392a90919063ffffffff16565b6136d090919063ffffffff16565b60148190555050565b61298c613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612c04613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612d27613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612de7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612dfe633b9aca008261392a90919063ffffffff16565b60148190555050565b612e0f613012565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806152056026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061535e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061522b6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153396025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561331d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061518f6023913960400191505060405180910390fd5b60008111613376576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152be6029913960400191505060405180910390fd5b61337e6122be565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156133ec57506133bc6122be565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5760145481111561344c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524d6028913960400191505060405180910390fd5b5b600061345830611de5565b905060145481106134695760145490505b6000601554821015905080801561348d5750601360009054906101000a900460ff16155b80156134e557507f000000000000000000000000b227eb108f570fc6ec9b82598c469b93e5e0a7c273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134fd5750601360019054906101000a900460ff165b1561351157601554915061351082613848565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135b85750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806135c757506135c66139b0565b5b156135d157600090505b6135dd868686846139f1565b505050505050565b6000838311158290613692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561365757808201518184015260208101905061363c565b50505050905090810190601f1680156136845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006136b2613d02565b915091506136c981836136d090919063ffffffff16565b9250505090565b600061371283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f93565b905092915050565b600080828401905083811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006137b98a614059565b92509250925060008060006137d78d86866137d26136a5565b6140b3565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061384083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135e5565b905092915050565b6001601360006101000a81548160ff02191690831515021790555060006138796002836136d090919063ffffffff16565b9050600061389082846137fe90919063ffffffff16565b905060004790506138a08361413c565b60006138b582476137fe90919063ffffffff16565b90506138c183826143ea565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b60008083141561393d57600090506139aa565b600082840290508284828161394e57fe5b04146139a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152756021913960400191505060405180910390fd5b809150505b92915050565b6000801515601660009054906101000a900460ff16151514156139d657600090506139ee565b601960646139e261453b565b816139e957fe5b061090505b90565b806139ff576139fe614574565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613aa25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ab757613ab28484846145b7565b613cee565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b5a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b6f57613b6a848484614817565b613ced565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c135750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c2857613c23848484614a77565b613cec565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cca5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613cdf57613cda848484614c42565b613ceb565b613cea848484614a77565b5b5b5b5b80613cfc57613cfb614f37565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613f5657826003600060088481548110613d3557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e1c5750816004600060088481548110613db457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e3357600a5460095494509450505050613f8f565b613ebc6003600060088481548110613e4757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137fe90919063ffffffff16565b9250613f476004600060088481548110613ed257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137fe90919063ffffffff16565b91508080600101915050613d16565b50613f6e600954600a546136d090919063ffffffff16565b821015613f8657600a54600954935093505050613f8f565b81819350935050505b9091565b6000808311829061403f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614004578082015181840152602081019050613fe9565b50505050905090810190601f1680156140315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404b57fe5b049050809150509392505050565b60008060008061406885614f4b565b9050600061407586614f7d565b9050600061409e82614090858a6137fe90919063ffffffff16565b6137fe90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806140cc858961392a90919063ffffffff16565b905060006140e3868961392a90919063ffffffff16565b905060006140fa878961392a90919063ffffffff16565b905060006141238261411585876137fe90919063ffffffff16565b6137fe90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561415657600080fd5b506040519080825280602002602001820160405280156141855781602001602082028036833780820191505090505b509050308160008151811061419657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561423657600080fd5b505afa15801561424a573d6000803e3d6000fd5b505050506040513d602081101561426057600080fd5b81019080805190602001909291905050508160018151811061427e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461301a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143a557808201518184015260208101905061438a565b505050509050019650505050505050600060405180830381600087803b1580156143ce57600080fd5b505af11580156143e2573d6000803e3d6000fd5b505050505050565b614415307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461301a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061445f6122be565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156144e457600080fd5b505af11580156144f8573d6000803e3d6000fd5b50505050506040513d606081101561450f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000444260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c905090565b6000600f5414801561458857506000601154145b15614592576145b5565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b6000806000806000806145c9876137a2565b95509550955095509550955061462787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146bc86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061475185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061479d81614faf565b6147a78483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614829876137a2565b95509550955095509550955061488786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061491c83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149b185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149fd81614faf565b614a078483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614a89876137a2565b955095509550955095509550614ae786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b7c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bc881614faf565b614bd28483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c54876137a2565b955095509550955095509550614cb287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d4786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137fe90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ddc83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e7185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ebd81614faf565b614ec78483615154565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b6000614f766103e8614f68600f548561392a90919063ffffffff16565b6136d090919063ffffffff16565b9050919050565b6000614fa86103e8614f9a6011548561392a90919063ffffffff16565b6136d090919063ffffffff16565b9050919050565b6000614fb96136a5565b90506000614fd0828461392a90919063ffffffff16565b905061502481600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561514f5761510b83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461371a90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61516982600a546137fe90919063ffffffff16565b600a8190555061518481600b5461371a90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735377617020616e64206c6971756966792069732063757272656e746c79206e6f7420656e61626c6564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f43757272656e746c7920696e2061207377617020616e64206c697175696679206379636c6543616e6e6f742073776170206d6f726520746f6b656e73207468616e2074686520636f6e74726163742068617345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220890350b8339d4c200ce9cf87f0b27042a3cad005ccb3f08de21e486b6b93921b64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode Sourcemap
24484:17836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31669:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26698:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27546:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28607:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25386:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26951:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27703:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32320:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29759:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26868:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30425:413;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28008:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25208:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29002:351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31448:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29359:394;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25442:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25513:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30004:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35448:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25691:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25288:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27046:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15725:138;;;;;;;;;;;;;:::i;:::-;;25560:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37529:476;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28487:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15112:73;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31767:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26781:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28222:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16667:275;;;;;;;;;;;;;:::i;:::-;;27240:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16248:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32153:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31889:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16403:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27403:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31559:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32041:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16012:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31669:92;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31749:6:::1;31739:7;:16;;;;31669:92:::0;:::o;26698:77::-;26735:13;26764:5;26757:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26698:77;:::o;27546:151::-;27621:4;27634:39;27643:12;:10;:12::i;:::-;27657:7;27666:6;27634:8;:39::i;:::-;27687:4;27680:11;;27546:151;;;;:::o;28607:81::-;28649:7;28672:10;;28665:17;;28607:81;:::o;25386:51::-;;;:::o;26951:89::-;27004:7;27027;;27020:14;;26951:89;:::o;27703:299::-;27801:4;27814:36;27824:6;27832:9;27843:6;27814:9;:36::i;:::-;27857:121;27866:6;27874:12;:10;:12::i;:::-;27888:89;27926:6;27888:89;;;;;;;;;;;;;;;;;:11;:19;27900:6;27888:19;;;;;;;;;;;;;;;:33;27908:12;:10;:12::i;:::-;27888:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;27857:8;:121::i;:::-;27992:4;27985:11;;27703:299;;;;;:::o;32320:96::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32403:7:::1;32385:15;;:25;;;;;;;;;;;;;;;;;;32320:96:::0;:::o;29759:239::-;29825:7;29860;;29849;:18;;29841:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29921:19;29944:10;:8;:10::i;:::-;29921:33;;29968:24;29980:11;29968:7;:11;;:24;;;;:::i;:::-;29961:31;;;29759:239;;;:::o;26868:77::-;26909:5;26930:9;;;;;;;;;;;26923:16;;26868:77;:::o;30425:413::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30503:11:::1;:20;30515:7;30503:20;;;;;;;;;;;;;;;;;;;;;;;;;30495:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30567:9;30562:271;30586:9;:16;;;;30582:1;:20;30562:271;;;30638:7;30622:23;;:9;30632:1;30622:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30618:208;;;30673:9;30702:1;30683:9;:16;;;;:20;30673:31;;;;;;;;;;;;;;;;;;;;;;;;;30658:9;30668:1;30658:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30734:1;30715:7;:16;30723:7;30715:16;;;;;;;;;;;;;;;:20;;;;30769:5;30746:11;:20;30758:7;30746:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30785:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30811:5;;30618:208;30604:3;;;;;;;30562:271;;;;30425:413:::0;:::o;28008:208::-;28096:4;28109:83;28118:12;:10;:12::i;:::-;28132:7;28141:50;28180:10;28141:11;:25;28153:12;:10;:12::i;:::-;28141:25;;;;;;;;;;;;;;;:34;28167:7;28141:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28109:8;:83::i;:::-;28206:4;28199:11;;28008:208;;;;:::o;25208:27::-;;;;:::o;29002:351::-;29050:14;29067:12;:10;:12::i;:::-;29050:29;;29095:11;:19;29107:6;29095:19;;;;;;;;;;;;;;;;;;;;;;;;;29094:20;29086:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29171:15;29195:19;29206:7;29195:10;:19::i;:::-;29170:44;;;;;;;29239:28;29259:7;29239;:15;29247:6;29239:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29221:7;:15;29229:6;29221:15;;;;;;;;;;;;;;;:46;;;;29284:20;29296:7;29284;;:11;;:20;;;;:::i;:::-;29274:7;:30;;;;29324:23;29339:7;29324:10;;:14;;:23;;;;:::i;:::-;29311:10;:36;;;;29002:351;;;:::o;31448:105::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31543:4:::1;31513:18;:27;31532:7;31513:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31448:105:::0;:::o;29359:394::-;29449:7;29484;;29473;:18;;29465:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29539:17;29534:214;;29568:15;29592:19;29603:7;29592:10;:19::i;:::-;29567:44;;;;;;;29627:7;29620:14;;;;;29534:214;29659:23;29690:19;29701:7;29690:10;:19::i;:::-;29657:52;;;;;;;29725:15;29718:22;;;29359:394;;;;;:::o;25442:38::-;;;:::o;25513:40::-;;;;;;;;;;;;;:::o;30004:415::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30193:11:::1;:20;30205:7;30193:20;;;;;;;;;;;;;;;;;;;;;;;;;30192:21;30184:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30274:1;30255:7;:16;30263:7;30255:16;;;;;;;;;;;;;;;;:20;30252:98;;;30305:37;30325:7;:16;30333:7;30325:16;;;;;;;;;;;;;;;;30305:19;:37::i;:::-;30286:7;:16;30294:7;30286:16;;;;;;;;;;;;;;;:56;;;;30252:98;30379:4;30356:11;:20;30368:7;30356:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30390:9;30405:7;30390:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:415:::0;:::o;35448:117::-;35512:4;35532:18;:27;35551:7;35532:27;;;;;;;;;;;;;;;;;;;;;;;;;35525:34;;35448:117;;;:::o;25691:34::-;;;;;;;;;;;;;:::o;25288:33::-;;;;:::o;27046:188::-;27112:7;27132:11;:20;27144:7;27132:20;;;;;;;;;;;;;;;;;;;;;;;;;27128:49;;;27161:7;:16;27169:7;27161:16;;;;;;;;;;;;;;;;27154:23;;;;27128:49;27191:37;27211:7;:16;27219:7;27211:16;;;;;;;;;;;;;;;;27191:19;:37::i;:::-;27184:44;;27046:188;;;;:::o;15725:138::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15828:1:::1;15791:40;;15812:6;::::0;::::1;;;;;;;;15791:40;;;;;;;;;;;;15855:1;15838:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15725:138::o:0;25560:51::-;;;;:::o;37529:476::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37622:23:::1;37648:24;37666:4;37648:9;:24::i;:::-;37622:50;;37718:15;37687:27;:46;;37679:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37818:5;37798:25;;:16;;;;;;;;;;;:25;;;37790:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37880:21;;;;;;;;;;;37872:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37956:43;37971:27;37956:14;:43::i;:::-;15374:1;37529:476:::0;:::o;28487:114::-;28555:4;28575:11;:20;28587:7;28575:20;;;;;;;;;;;;;;;;;;;;;;;;;28568:27;;28487:114;;;:::o;15112:73::-;15150:7;15173:6;;;;;;;;;;;15166:13;;15112:73;:::o;31767:116::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31865:12:::1;31849:13;:28;;;;31767:116:::0;:::o;26781:81::-;26820:13;26849:7;26842:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26781:81;:::o;28222:259::-;28315:4;28328:129;28337:12;:10;:12::i;:::-;28351:7;28360:96;28399:15;28360:96;;;;;;;;;;;;;;;;;:11;:25;28372:12;:10;:12::i;:::-;28360:25;;;;;;;;;;;;;;;:34;28386:7;28360:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28328:8;:129::i;:::-;28471:4;28464:11;;28222:259;;;;:::o;16667:275::-;16733:10;16715:28;;:14;;;;;;;;;;;:28;;;16707:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16804:9;;16798:3;:15;16790:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16891:14;;;;;;;;;;;16862:44;;16883:6;;;;;;;;;;16862:44;;;;;;;;;;;;16922:14;;;;;;;;;;;16913:6;;:23;;;;;;;;;;;;;;;;;;16667:275::o;27240:157::-;27318:4;27331:42;27341:12;:10;:12::i;:::-;27355:9;27366:6;27331:9;:42::i;:::-;27387:4;27380:11;;27240:157;;;;:::o;16248:83::-;16293:7;16316:9;;16309:16;;16248:83;:::o;32153:161::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32250:8:::1;32226:21;;:32;;;;;;;;;;;;;;;;;;32270:38;32299:8;32270:38;;;;;;;;;;;;;;;;;;;;32153:161:::0;:::o;31889:146::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31979:50:::1;32017:5;31979:25;31991:12;31979:7;;:11;;:25;;;;:::i;:::-;:29;;:50;;;;:::i;:::-;31964:12;:65;;;;31889:146:::0;:::o;16403:196::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16480:6:::1;::::0;::::1;;;;;;;;16463:14;;:23;;;;;;;;;;;;;;;;;;16510:1;16493:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16537:4;16531:3;:10;16519:9;:22;;;;16590:1;16553:40;;16574:6;::::0;::::1;;;;;;;;16553:40;;;;;;;;;;;;16403:196:::0;:::o;27403:137::-;27484:7;27507:11;:18;27519:5;27507:18;;;;;;;;;;;;;;;:27;27526:7;27507:27;;;;;;;;;;;;;;;;27500:34;;27403:137;;;;:::o;31559:104::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31652:5:::1;31622:18;:27;31641:7;31622:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31559:104:::0;:::o;32041:106::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32124:17:::1;32135:5;32124:6;:10;;:17;;;;:::i;:::-;32109:12;:32;;;;32041:106:::0;:::o;16012:230::-;15318:12;:10;:12::i;:::-;15308:22;;:6;;;;;;;;;;:22;;;15300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16117:1:::1;16097:22;;:8;:22;;;;16089:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16203:8;16174:38;;16195:6;::::0;::::1;;;;;;;;16174:38;;;;;;;;;;;;16228:8;16219:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16012:230:::0;:::o;7804:100::-;7857:15;7888:10;7881:17;;7804:100;:::o;35571:319::-;35677:1;35660:19;;:5;:19;;;;35652:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35754:1;35735:21;;:7;:21;;;;35727:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35834:6;35804:11;:18;35816:5;35804:18;;;;;;;;;;;;;;;:27;35823:7;35804:27;;;;;;;;;;;;;;;:36;;;;35868:7;35852:32;;35861:5;35852:32;;;35877:6;35852:32;;;;;;;;;;;;;;;;;;35571:319;;;:::o;35896:1627::-;36016:1;36000:18;;:4;:18;;;;35992:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36089:1;36075:16;;:2;:16;;;;36067:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36155:1;36146:6;:10;36138:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36220:7;:5;:7::i;:::-;36212:15;;:4;:15;;;;:32;;;;;36237:7;:5;:7::i;:::-;36231:13;;:2;:13;;;;36212:32;36209:119;;;36271:12;;36261:6;:22;;36253:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36209:119;36603:28;36634:24;36652:4;36634:9;:24::i;:::-;36603:55;;36694:12;;36670:20;:36;36667:98;;36745:12;;36722:35;;36667:98;36773:24;36824:29;;36800:20;:53;;36773:80;;36872:19;:47;;;;;36903:16;;;;;;;;;;;36902:17;36872:47;:79;;;;;36938:13;36930:21;;:4;:21;;;;36872:79;:111;;;;;36962:21;;;;;;;;;;;36872:111;36860:268;;;37023:29;;37000:52;;37084:36;37099:20;37084:14;:36::i;:::-;36860:268;37193:12;37208:4;37193:19;;37304:18;:24;37323:4;37304:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37332:18;:22;37351:2;37332:22;;;;;;;;;;;;;;;;;;;;;;;;;37304:50;:72;;;;37358:18;:16;:18::i;:::-;37304:72;37301:108;;;37396:5;37386:15;;37301:108;37479:38;37494:4;37499:2;37502:6;37509:7;37479:14;:38::i;:::-;35896:1627;;;;;;:::o;4340:178::-;4426:7;4455:1;4450;:6;;4458:12;4442:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:9;4494:1;4490;:5;4478:17;;4511:1;4504:8;;;4340:178;;;;;:::o;33796:153::-;33837:7;33854:15;33871;33890:19;:17;:19::i;:::-;33853:56;;;;33923:20;33935:7;33923;:11;;:20;;;;:::i;:::-;33916:27;;;;33796:153;:::o;5672:126::-;5730:7;5753:39;5757:1;5760;5753:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5746:46;;5672:126;;;;:::o;3469:167::-;3527:7;3543:9;3559:1;3555;:5;3543:17;;3580:1;3575;:6;;3567:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3629:1;3622:8;;;3469:167;;;;:::o;32654:405::-;32713:7;32722;32731;32740;32749;32758;32775:23;32800:12;32814:18;32836:20;32848:7;32836:11;:20::i;:::-;32774:82;;;;;;32864:15;32881:23;32906:12;32922:50;32934:7;32943:4;32949:10;32961;:8;:10::i;:::-;32922:11;:50::i;:::-;32863:109;;;;;;32987:7;32996:15;33013:4;33019:15;33036:4;33042:10;32979:74;;;;;;;;;;;;;;;;;;32654:405;;;;;;;:::o;3913:130::-;3971:7;3994:43;3998:1;4001;3994:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3987:50;;3913:130;;;;:::o;38011:915::-;26017:4;25998:16;;:23;;;;;;;;;;;;;;;;;;38139:12:::1;38154:27;38179:1;38154:20;:24;;:27;;;;:::i;:::-;38139:42;;38188:17;38208:30;38233:4;38208:20;:24;;:30;;;;:::i;:::-;38188:50;;38496:22;38521:21;38496:46;;38579:22;38596:4;38579:16;:22::i;:::-;38724:18;38745:41;38771:14;38745:21;:25;;:41;;;;:::i;:::-;38724:62;;38828:35;38841:9;38852:10;38828:12;:35::i;:::-;38877:43;38892:4;38898:10;38910:9;38877:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26028:1;;;;26055:5:::0;26036:16;;:24;;;;;;;;;;;;;;;;;;38011:915;:::o;4771:431::-;4829:7;5063:1;5058;:6;5054:37;;;5082:1;5075:8;;;;5054:37;5099:9;5115:1;5111;:5;5099:17;;5140:1;5135;5131;:5;;;;;;:10;5123:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5195:1;5188:8;;;4771:431;;;;;:::o;28834:162::-;28884:4;28920:5;28901:24;;:15;;;;;;;;;;;:24;;;28897:59;;;28943:5;28936:12;;;;28897:59;28988:2;28982:3;28971:8;:6;:8::i;:::-;:14;;;;;;:19;28964:26;;28834:162;;:::o;39995:742::-;40102:7;40098:34;;40118:14;:12;:14::i;:::-;40098:34;40145:11;:19;40157:6;40145:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40169:11;:22;40181:9;40169:22;;;;;;;;;;;;;;;;;;;;;;;;;40168:23;40145:46;40141:547;;;40202:48;40224:6;40232:9;40243:6;40202:21;:48::i;:::-;40141:547;;;40269:11;:19;40281:6;40269:19;;;;;;;;;;;;;;;;;;;;;;;;;40268:20;:46;;;;;40292:11;:22;40304:9;40292:22;;;;;;;;;;;;;;;;;;;;;;;;;40268:46;40264:424;;;40325:46;40345:6;40353:9;40364:6;40325:19;:46::i;:::-;40264:424;;;40390:11;:19;40402:6;40390:19;;;;;;;;;;;;;;;;;;;;;;;;;40389:20;:47;;;;;40414:11;:22;40426:9;40414:22;;;;;;;;;;;;;;;;;;;;;;;;;40413:23;40389:47;40385:303;;;40447:44;40465:6;40473:9;40484:6;40447:17;:44::i;:::-;40385:303;;;40509:11;:19;40521:6;40509:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40532:11;:22;40544:9;40532:22;;;;;;;;;;;;;;;;;;;;;;;;;40509:45;40505:183;;;40565:48;40587:6;40595:9;40606:6;40565:21;:48::i;:::-;40505:183;;;40636:44;40654:6;40662:9;40673:6;40636:17;:44::i;:::-;40505:183;40385:303;40264:424;40141:547;40700:7;40696:35;;40716:15;:13;:15::i;:::-;40696:35;39995:742;;;;:::o;33955:511::-;34005:7;34014;34030:15;34048:7;;34030:25;;34062:15;34080:7;;34062:25;;34099:9;34094:267;34118:9;:16;;;;34114:1;:20;34094:267;;;34178:7;34154;:21;34162:9;34172:1;34162:12;;;;;;;;;;;;;;;;;;;;;;;;;34154:21;;;;;;;;;;;;;;;;:31;:66;;;;34213:7;34189;:21;34197:9;34207:1;34197:12;;;;;;;;;;;;;;;;;;;;;;;;;34189:21;;;;;;;;;;;;;;;;:31;34154:66;34150:97;;;34230:7;;34239;;34222:25;;;;;;;;;34150:97;34266:34;34278:7;:21;34286:9;34296:1;34286:12;;;;;;;;;;;;;;;;;;;;;;;;;34278:21;;;;;;;;;;;;;;;;34266:7;:11;;:34;;;;:::i;:::-;34256:44;;34319:34;34331:7;:21;34339:9;34349:1;34339:12;;;;;;;;;;;;;;;;;;;;;;;;;34331:21;;;;;;;;;;;;;;;;34319:7;:11;;:34;;;;:::i;:::-;34309:44;;34136:3;;;;;;;34094:267;;;;34381:20;34393:7;;34381;;:11;;:20;;;;:::i;:::-;34371:7;:30;34367:61;;;34411:7;;34420;;34403:25;;;;;;;;34367:61;34443:7;34452;34435:25;;;;;;33955:511;;;:::o;6288:260::-;6374:7;6402:1;6398;:5;6405:12;6390:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6425:9;6441:1;6437;:5;;;;;;6425:17;;6541:1;6534:8;;;6288:260;;;;;:::o;33065:312::-;33125:7;33134;33143;33159:12;33174:24;33190:7;33174:15;:24::i;:::-;33159:39;;33205:18;33226:30;33248:7;33226:21;:30::i;:::-;33205:51;;33263:23;33289:33;33311:10;33289:17;33301:4;33289:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33263:59;;33337:15;33354:4;33360:10;33329:42;;;;;;;;;33065:312;;;;;:::o;33383:407::-;33498:7;33507;33516;33532:15;33550:24;33562:11;33550:7;:11;;:24;;;;:::i;:::-;33532:42;;33581:12;33596:21;33605:11;33596:4;:8;;:21;;;;:::i;:::-;33581:36;;33624:18;33645:27;33660:11;33645:10;:14;;:27;;;;:::i;:::-;33624:48;;33679:23;33705:33;33727:10;33705:17;33717:4;33705:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33679:59;;33753:7;33762:15;33779:4;33745:39;;;;;;;;;;33383:407;;;;;;;;:::o;38932:525::-;39050:21;39088:1;39074:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39050:40;;39115:4;39097;39102:1;39097:7;;;;;;;;;;;;;:23;;;;;;;;;;;39137:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39127:4;39132:1;39127:7;;;;;;;;;;;;;:32;;;;;;;;;;;39168:62;39185:4;39200:15;39218:11;39168:8;:62::i;:::-;39261:15;:66;;;39336:11;39356:1;39394:4;39415;39429:15;39261:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38932:525;;:::o;39463:455::-;39603:62;39620:4;39635:15;39653:11;39603:8;:62::i;:::-;39700:15;:31;;;39739:9;39766:4;39780:11;39800:1;39837;39874:7;:5;:7::i;:::-;39890:15;39700:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39463:455;;:::o;28694:134::-;28734:4;28786:16;28804:15;28769:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28759:62;;;;;;28754:68;;28747:75;;28694:134;:::o;35109:212::-;35162:1;35151:7;;:12;:34;;;;;35184:1;35167:13;;:18;35151:34;35148:46;;;35187:7;;35148:46;35220:7;;35202:15;:25;;;;35258:13;;35234:21;:37;;;;35290:1;35280:7;:11;;;;35314:1;35298:13;:17;;;;35109:212;:::o;41776:533::-;41875:15;41892:23;41917:12;41931:23;41956:12;41970:18;41992:19;42003:7;41992:10;:19::i;:::-;41874:137;;;;;;;;;;;;42036:28;42056:7;42036;:15;42044:6;42036:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42018:7;:15;42026:6;42018:15;;;;;;;;;;;;;;;:46;;;;42089:28;42109:7;42089;:15;42097:6;42089:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42071:7;:15;42079:6;42071:15;;;;;;;;;;;;;;;:46;;;;42145:39;42168:15;42145:7;:18;42153:9;42145:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42124:7;:18;42132:9;42124:18;;;;;;;;;;;;;;;:60;;;;42191:26;42206:10;42191:14;:26::i;:::-;42224:23;42236:4;42242;42224:11;:23::i;:::-;42276:9;42259:44;;42268:6;42259:44;;;42287:15;42259:44;;;;;;;;;;;;;;;;;;41776:533;;;;;;;;;:::o;41225:545::-;41322:15;41339:23;41364:12;41378:23;41403:12;41417:18;41439:19;41450:7;41439:10;:19::i;:::-;41321:137;;;;;;;;;;;;41483:28;41503:7;41483;:15;41491:6;41483:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41465:7;:15;41473:6;41465:15;;;;;;;;;;;;;;;:46;;;;41539:39;41562:15;41539:7;:18;41547:9;41539:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41518:7;:18;41526:9;41518:18;;;;;;;;;;;;;;;:60;;;;41606:39;41629:15;41606:7;:18;41614:9;41606:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41585:7;:18;41593:9;41585:18;;;;;;;;;;;;;;;:60;;;;41652:26;41667:10;41652:14;:26::i;:::-;41685:23;41697:4;41703;41685:11;:23::i;:::-;41737:9;41720:44;;41729:6;41720:44;;;41748:15;41720:44;;;;;;;;;;;;;;;;;;41225:545;;;;;;;;;:::o;40743:476::-;40838:15;40855:23;40880:12;40894:23;40919:12;40933:18;40955:19;40966:7;40955:10;:19::i;:::-;40837:137;;;;;;;;;;;;40999:28;41019:7;40999;:15;41007:6;40999:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40981:7;:15;40989:6;40981:15;;;;;;;;;;;;;;;:46;;;;41055:39;41078:15;41055:7;:18;41063:9;41055:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41034:7;:18;41042:9;41034:18;;;;;;;;;;;;;;;:60;;;;41101:26;41116:10;41101:14;:26::i;:::-;41134:23;41146:4;41152;41134:11;:23::i;:::-;41186:9;41169:44;;41178:6;41169:44;;;41197:15;41169:44;;;;;;;;;;;;;;;;;;40743:476;;;;;;;;;:::o;30842:600::-;30941:15;30958:23;30983:12;30997:23;31022:12;31036:18;31058:19;31069:7;31058:10;:19::i;:::-;30940:137;;;;;;;;;;;;31102:28;31122:7;31102;:15;31110:6;31102:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31084:7;:15;31092:6;31084:15;;;;;;;;;;;;;;;:46;;;;31155:28;31175:7;31155;:15;31163:6;31155:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31137:7;:15;31145:6;31137:15;;;;;;;;;;;;;;;:46;;;;31211:39;31234:15;31211:7;:18;31219:9;31211:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31190:7;:18;31198:9;31190:18;;;;;;;;;;;;;;;:60;;;;31278:39;31301:15;31278:7;:18;31286:9;31278:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31257:7;:18;31265:9;31257:18;;;;;;;;;;;;;;;:60;;;;31324:26;31339:10;31324:14;:26::i;:::-;31357:23;31369:4;31375;31357:11;:23::i;:::-;31409:9;31392:44;;31401:6;31392:44;;;31420:15;31392:44;;;;;;;;;;;;;;;;;;30842:600;;;;;;;;;:::o;35327:115::-;35377:15;;35367:7;:25;;;;35415:21;;35399:13;:37;;;;35327:115::o;34809:138::-;34873:7;34896:45;34929:5;34896:20;34908:7;;34896;:11;;:20;;;;:::i;:::-;:24;;:45;;;;:::i;:::-;34889:52;;34809:138;;;:::o;34953:150::-;35023:7;35046:51;35085:5;35046:26;35058:13;;35046:7;:11;;:26;;;;:::i;:::-;:30;;:51;;;;:::i;:::-;35039:58;;34953:150;;;:::o;34472:331::-;34531:19;34554:10;:8;:10::i;:::-;34531:33;;34571:18;34592:27;34607:11;34592:10;:14;;:27;;;;:::i;:::-;34571:48;;34651:38;34678:10;34651:7;:22;34667:4;34651:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34626:7;:22;34642:4;34626:22;;;;;;;;;;;;;;;:63;;;;34699:11;:26;34719:4;34699:26;;;;;;;;;;;;;;;;;;;;;;;;;34696:101;;;34759:38;34786:10;34759:7;:22;34775:4;34759:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34734:7;:22;34750:4;34734:22;;;;;;;;;;;;;;;:63;;;;34696:101;34472:331;;;:::o;32511:137::-;32585:17;32597:4;32585:7;;:11;;:17;;;;:::i;:::-;32575:7;:27;;;;32622:20;32637:4;32622:10;;:14;;:20;;;;:::i;:::-;32609:10;:33;;;;32511:137;;:::o
Swarm Source
ipfs://890350b8339d4c200ce9cf87f0b27042a3cad005ccb3f08de21e486b6b93921b
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.