ERC-20
Overview
Max Total Supply
5,000,000,000 TOSHINORI
Holders
933
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
496,732.526787911 TOSHINORIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ToshinoriInu
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-27 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.7; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } 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 = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } 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; } } /** * @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); } } } } // 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 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 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 ToshinoriInu 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) public _isBlacklisted; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 5000000000 * (10**9); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Toshinori Inu"; string private _symbol = "TOSHINORI"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _buybackFee = 2; uint256 private _previousBuybackFee = _buybackFee; address public immutable deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 public _marketingFee = 6; uint256 private _previousMarketingFee = _marketingFee; address payable public marketingWallet = payable(0x9329a24a4072454082db669eC09e6108298aEa0F); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public swapTokensAtAmount = 20000000 * 10**9; uint256 public _maxTxAmount = 50000000 * 10**9; uint256 public maxWalletToken = 50000000 * (10**9); uint256 public buyBackDivisor = 20; uint256 private buyBackUpperLimit = 1 * 10**17; // equal to 0.1 Ether bool public buyBackEnabled = true; event BuyBackEnabledUpdated(bool enabled); event SwapETHForTokens( uint256 amountIn, address[] path ); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // 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[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _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 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(!_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 tBuyback) = _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); _takeBuyback(tBuyback); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tBuyback) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tBuyback, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBuyback); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tBuyback = calculateBuybackFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tBuyback); return (tTransferAmount, tFee, tBuyback); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBuyback, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rBuyback = tBuyback.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rBuyback); 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 _takeBuyback(uint256 tBuyback) private { uint256 currentRate = _getRate(); uint256 rBuyback = tBuyback.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rBuyback); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tBuyback); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateBuybackFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_buybackFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _buybackFee == 0 && _marketingFee==0) return; _previousTaxFee = _taxFee; _previousBuybackFee = _buybackFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _buybackFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _buybackFee = _previousBuybackFee; _marketingFee = _previousMarketingFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address'); bool excludedAccount = _isExcludedFromFee[from] || _isExcludedFromFee[to]; if (uniswapV2Pair==from && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount." ); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap ? // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = swapTokensAtAmount; //swap tokens for buyback and marketing if(overMinTokenBalance) { swapTokens(contractTokenBalance); } uint256 balance = address(this).balance; if (buyBackEnabled && balance > uint256(buyBackUpperLimit)) { if (balance > buyBackUpperLimit) balance = buyBackUpperLimit; buyBackTokens(balance.div(buyBackDivisor)); } } //transfer amount, it will take tax, marketing, buyback fee _tokenTransfer(from,to,amount); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(contractTokenBalance); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingShare = newBalance.mul(_marketingFee).div(_marketingFee.add(_buybackFee)); //Send to Marketing address transferToAddressETH(marketingWallet, marketingShare); emit SwapAndLiquify(contractTokenBalance, newBalance); } function buyBackTokens(uint256 amount) private lockTheSwap { if (amount > 0) { swapETHForTokens(amount); } } 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 swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadWallet, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } else { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } 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(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyback) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeBuyback(tBuyback); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_marketingFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tMarketing = tAmount.div(100).mul(_marketingFee); uint256 rMarketing = tMarketing.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rMarketing); tTransferAmount = tTransferAmount.sub(tMarketing); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); emit Transfer(sender, address(this), tMarketing); return(tTransferAmount, rTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBuyback) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeBuyback(tBuyback); _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 tBuyback) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeBuyback(tBuyback); _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 blacklistAddress(address account, bool value) external onlyOwner{ _isBlacklisted[account] = value; } function buyBackUpperLimitAmount() public view returns (uint256) { return buyBackUpperLimit; } function SetBuyBackUpperLimit(uint256 newLimit) external onlyOwner { buyBackUpperLimit = newLimit; } function setMaxWalletTokend(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken * (10**9); } function setBuyBackDivisor(uint256 divisor) external onlyOwner { buyBackDivisor = divisor; } function setMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function setFeePercent(uint256 taxFee, uint256 buybackFee, uint256 marketingFee) external onlyOwner() { require(taxFee > 0 && buybackFee > 0 && marketingFee > 0); _taxFee = taxFee; _buybackFee = buybackFee; _marketingFee = marketingFee; } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() { swapTokensAtAmount = newAmount*10**9; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount > 0, "transaction amount must be greater than zero"); _maxTxAmount = maxTxAmount * 10**9; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setBuyBackEnabled(bool _enabled) public onlyOwner { buyBackEnabled = _enabled; emit BuyBackEnabledUpdated(_enabled); } function prepareForPreSale() external onlyOwner { setSwapAndLiquifyEnabled(false); _taxFee = 0; _buybackFee = 0; _marketingFee = 0; _maxTxAmount = 5000000000 * 10**9; maxWalletToken = 5000000000 * 10**9; } function afterPreSale() external onlyOwner { setSwapAndLiquifyEnabled(true); _taxFee = 1; _buybackFee = 2; _marketingFee = 6; _maxTxAmount = 50000000 * 10**9; maxWalletToken = 50000000 * 10**9; } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetBuyBackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","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":"divisor","type":"uint256"}],"name":"setBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"buybackFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletTokend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
60a0604052674563918244f40000600a8190556200002090600019620005b2565b6200002e906000196200054f565b600b5560408051808201909152600d8082526c546f7368696e6f726920496e7560981b602090920191825262000065918162000477565b5060408051808201909152600980825268544f5348494e4f524960b81b60209092019182526200009891600e9162000477565b50600f805460ff19908116600917909155600160108190556011819055600260128190556013556ddead00000000000000000000000060805260066014818155601591909155601680546001600160a01b031916739329a24a4072454082db669ec09e6108298aea0f1790556018805460ff60a81b1916600160a81b17905566470de4df82000060195566b1a2bc2ec50000601a819055601b55601c5567016345785d8a0000601d55601e80549092161790553480156200015857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b5460036000620001b46000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022b57600080fd5b505afa15801562000240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026691906200051d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002af57600080fd5b505afa158015620002c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ea91906200051d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033357600080fd5b505af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e91906200051d565b601880546001600160a01b03199081166001600160a01b039384161790915560178054909116918316919091179055600160066000620003b66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556016549091168152600690925280822080548416600190811790915530835291208054909216179055620004206000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200046891815260200190565b60405180910390a350620005d5565b828054620004859062000575565b90600052602060002090601f016020900481019282620004a95760008555620004f4565b82601f10620004c457805160ff1916838001178555620004f4565b82800160010185558215620004f4579182015b82811115620004f4578251825591602001919060010190620004d7565b506200050292915062000506565b5090565b5b8082111562000502576000815560010162000507565b6000602082840312156200053057600080fd5b81516001600160a01b03811681146200054857600080fd5b9392505050565b6000828210156200057057634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200058a57607f821691505b60208210811415620005ac57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620005d057634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c613126620005fb6000396000818161077d01526126f601526131266000f3fe6080604052600436106103395760003560e01c80636053a0e3116101ab578063a69df4b5116100f7578063dd46706411610095578063e6c75f711161006f578063e6c75f711461099c578063ea2f0b37146109b2578063ec28438a146109d2578063f2fde38b146109f257600080fd5b8063dd46706414610920578063dd62ed3e14610940578063e2f456051461098657600080fd5b8063b6c52324116100d1578063b6c52324146108b6578063bdc653ef146108cb578063c2b3e1c2146108e0578063c49b9a801461090057600080fd5b8063a69df4b514610861578063a9059cbb14610876578063afa4f3b21461089657600080fd5b806385141a77116101645780638ee108231161013e5780638ee10823146107f657806395d89b411461080c5780639f34a5b414610821578063a457c2d71461084157600080fd5b806385141a771461076b57806388f820201461079f5780638da5cb5b146107d857600080fd5b80636053a0e3146106c65780636ac3f254146106e057806370a0823114610700578063715018a61461072057806375f0a874146107355780637d1db4a51461075557600080fd5b8063313ce56711610285578063455a4396116102235780635134f6ab116101fd5780635134f6ab1461063857806352390c021461064d5780635342acb41461066d5780635d098b38146106a657600080fd5b8063455a4396146105d757806349bd5a5e146105f75780634a74bb021461061757600080fd5b80633b124fe71161025f5780633b124fe7146105615780633bd5d17314610577578063437823ec146105975780634549b039146105b757600080fd5b8063313ce567146104ff5780633685d41914610521578063395093511461054157600080fd5b806318160ddd116102f257806322976e0d116102cc57806322976e0d1461048957806323b872dd1461049f57806329370cc6146104bf5780632d838119146104df57600080fd5b806318160ddd1461042e57806319de79ab146104435780631cdd3be31461045957600080fd5b8063068dde721461034557806306fdde031461036757806307efbfdc14610392578063095ea7b3146103a757806313114a9d146103d75780631694505e146103f657600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004612d9b565b610a12565b005b34801561037357600080fd5b5061037c610a4a565b6040516103899190612e7c565b60405180910390f35b34801561039e57600080fd5b50610365610adc565b3480156103b357600080fd5b506103c76103c2366004612d54565b610b31565b6040519015158152602001610389565b3480156103e357600080fd5b50600c545b604051908152602001610389565b34801561040257600080fd5b50601754610416906001600160a01b031681565b6040516001600160a01b039091168152602001610389565b34801561043a57600080fd5b50600a546103e8565b34801561044f57600080fd5b506103e860125481565b34801561046557600080fd5b506103c7610474366004612c6b565b60076020526000908152604090205460ff1681565b34801561049557600080fd5b506103e860145481565b3480156104ab57600080fd5b506103c76104ba366004612cde565b610b48565b3480156104cb57600080fd5b506103656104da366004612d80565b610bb1565b3480156104eb57600080fd5b506103e86104fa366004612d9b565b610c23565b34801561050b57600080fd5b50600f5460405160ff9091168152602001610389565b34801561052d57600080fd5b5061036561053c366004612c6b565b610ca7565b34801561054d57600080fd5b506103c761055c366004612d54565b610e5e565b34801561056d57600080fd5b506103e860105481565b34801561058357600080fd5b50610365610592366004612d9b565b610e94565b3480156105a357600080fd5b506103656105b2366004612c6b565b610f7e565b3480156105c357600080fd5b506103e86105d2366004612db4565b610fcc565b3480156105e357600080fd5b506103656105f2366004612d1f565b611059565b34801561060357600080fd5b50601854610416906001600160a01b031681565b34801561062357600080fd5b506018546103c790600160a81b900460ff1681565b34801561064457600080fd5b506103656110ae565b34801561065957600080fd5b50610365610668366004612c6b565b611104565b34801561067957600080fd5b506103c7610688366004612c6b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b257600080fd5b506103656106c1366004612c6b565b611257565b3480156106d257600080fd5b50601e546103c79060ff1681565b3480156106ec57600080fd5b506103656106fb366004612dd7565b6112a3565b34801561070c57600080fd5b506103e861071b366004612c6b565b611300565b34801561072c57600080fd5b5061036561135f565b34801561074157600080fd5b50601654610416906001600160a01b031681565b34801561076157600080fd5b506103e8601a5481565b34801561077757600080fd5b506104167f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ab57600080fd5b506103c76107ba366004612c6b565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107e457600080fd5b506000546001600160a01b0316610416565b34801561080257600080fd5b506103e8601c5481565b34801561081857600080fd5b5061037c6113c1565b34801561082d57600080fd5b5061036561083c366004612d9b565b6113d0565b34801561084d57600080fd5b506103c761085c366004612d54565b61140e565b34801561086d57600080fd5b5061036561145d565b34801561088257600080fd5b506103c7610891366004612d54565b611563565b3480156108a257600080fd5b506103656108b1366004612d9b565b611570565b3480156108c257600080fd5b506002546103e8565b3480156108d757600080fd5b50601d546103e8565b3480156108ec57600080fd5b506103656108fb366004612d9b565b6115ae565b34801561090c57600080fd5b5061036561091b366004612d80565b6115dd565b34801561092c57600080fd5b5061036561093b366004612d9b565b611654565b34801561094c57600080fd5b506103e861095b366004612ca5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561099257600080fd5b506103e860195481565b3480156109a857600080fd5b506103e8601b5481565b3480156109be57600080fd5b506103656109cd366004612c6b565b6116d9565b3480156109de57600080fd5b506103656109ed366004612d9b565b611724565b3480156109fe57600080fd5b50610365610a0d366004612c6b565b6117c7565b6000546001600160a01b03163314610a455760405162461bcd60e51b8152600401610a3c90612ed1565b60405180910390fd5b601c55565b6060600d8054610a5990612fd3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8590612fd3565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610a3c90612ed1565b610b1060016115dd565b60016010556002601255600660145566b1a2bc2ec50000601a819055601b55565b6000610b3e33848461189f565b5060015b92915050565b6000610b558484846119c3565b610ba78433610ba285604051806060016040528060288152602001613084602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611cac565b61189f565b5060019392505050565b6000546001600160a01b03163314610bdb5760405162461bcd60e51b8152600401610a3c90612ed1565b601e805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600b54821115610c8a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a3c565b6000610c94611ce6565b9050610ca08382611d09565b9392505050565b6000546001600160a01b03163314610cd15760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03811660009081526008602052604090205460ff16610d395760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a3c565b60005b600954811015610e5a57816001600160a01b031660098281548110610d6357610d63613055565b6000918252602090912001546001600160a01b03161415610e485760098054610d8e90600190612fbc565b81548110610d9e57610d9e613055565b600091825260209091200154600980546001600160a01b039092169183908110610dca57610dca613055565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff191690556009805480610e2257610e2261303f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e528161300e565b915050610d3c565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b3e918590610ba29086611d4b565b3360008181526008602052604090205460ff1615610f095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a3c565b6000610f1483611daa565b505050506001600160a01b038416600090815260036020526040902054919250610f4091905082611df9565b6001600160a01b038316600090815260036020526040902055600b54610f669082611df9565b600b55600c54610f769084611d4b565b600c55505050565b6000546001600160a01b03163314610fa85760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a548311156110205760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a3c565b8161103f57600061103084611daa565b50939550610b42945050505050565b600061104a84611daa565b50929550610b42945050505050565b6000546001600160a01b031633146110835760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610a3c90612ed1565b6110e260006115dd565b600060108190556012819055601455674563918244f40000601a819055601b55565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03811660009081526008602052604090205460ff16156111975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a3c565b6001600160a01b038116600090815260036020526040902054156111f1576001600160a01b0381166000908152600360205260409020546111d790610c23565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610a3c90612ed1565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112cd5760405162461bcd60e51b8152600401610a3c90612ed1565b6000831180156112dd5750600082115b80156112e95750600081115b6112f257600080fd5b601092909255601255601455565b6001600160a01b03811660009081526008602052604081205460ff161561133d57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b4290610c23565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610a3c90612ed1565b600080546040516001600160a01b03909116906000805160206130ac833981519152908390a3600080546001600160a01b0319169055565b6060600e8054610a5990612fd3565b6000546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a3c90612ed1565b61140881633b9aca00612f9d565b601b5550565b6000610b3e3384610ba2856040518060600160405280602581526020016130cc602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611cac565b6001546001600160a01b031633146114c35760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a3c565b60025442116115145760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a3c565b600154600080546040516001600160a01b0393841693909116916000805160206130ac83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b3e3384846119c3565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610a3c90612ed1565b6115a881633b9aca00612f9d565b60195550565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610a3c90612ed1565b601d55565b6000546001600160a01b031633146116075760405162461bcd60e51b8152600401610a3c90612ed1565b60188054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c1890831515815260200190565b6000546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610a3c90612ed1565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556116ad8142612f63565b600255600080546040516001600160a01b03909116906000805160206130ac833981519152908390a350565b6000546001600160a01b031633146117035760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610a3c90612ed1565b600081116117b35760405162461bcd60e51b815260206004820152602c60248201527f7472616e73616374696f6e20616d6f756e74206d75737420626520677265617460448201526b6572207468616e207a65726f60a01b6064820152608401610a3c565b6117c181633b9aca00612f9d565b601a5550565b6000546001600160a01b031633146117f15760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b0381166118565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3c565b600080546040516001600160a01b03808516939216916000805160206130ac83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3c565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a275760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a3c565b60008111611a895760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a3c565b6001600160a01b03831660009081526007602052604090205460ff16158015611acb57506001600160a01b03821660009081526007602052604090205460ff16155b611b0d5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610a3c565b6001600160a01b03831660009081526006602052604081205460ff1680611b4c57506001600160a01b03831660009081526006602052604090205460ff165b6018549091506001600160a01b038581169116148015611b6a575080155b15611be6576000611b7a84611300565b601b54909150611b8a8483612f63565b1115611be45760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a3c565b505b6000611bf130611300565b60195460185491925082101590600160a01b900460ff16158015611c2357506018546001600160a01b03878116911614155b8015611c385750601854600160a81b900460ff165b15611c995760195491508015611c5157611c5182611e3b565b601e54479060ff168015611c665750601d5481115b15611c9757601d54811115611c7a5750601d545b611c97611c92601c5483611d0990919063ffffffff16565b611efb565b505b611ca4868686611f2d565b505050505050565b60008184841115611cd05760405162461bcd60e51b8152600401610a3c9190612e7c565b506000611cdd8486612fbc565b95945050505050565b6000806000611cf3612195565b9092509050611d028282611d09565b9250505090565b6000610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612317565b600080611d588385612f63565b905083811015610ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a3c565b6000806000806000806000806000611dc18a612345565b9250925092506000806000611ddf8d8686611dda611ce6565b612387565b919f909e50909c50959a5093985091965092945050505050565b6000610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cac565b6018805460ff60a01b1916600160a01b17905547611e58826123d7565b6000611e644783611df9565b90506000611e96611e82601254601454611d4b90919063ffffffff16565b601454611e90908590612538565b90611d09565b601654909150611eaf906001600160a01b0316826125b7565b60408051858152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506018805460ff60a01b191690555050565b6018805460ff60a01b1916600160a01b1790558015611f1d57611f1d816125ed565b506018805460ff60a01b19169055565b6001600160a01b03831660009081526006602052604090205460ff1680611f6c57506001600160a01b03821660009081526006602052604090205460ff165b15611f7e57611f796127af565b611fe1565b601a54811115611fe15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a3c565b6001600160a01b03831660009081526008602052604090205460ff16801561202257506001600160a01b03821660009081526008602052604090205460ff16155b15612037576120328383836127f4565b612135565b6001600160a01b03831660009081526008602052604090205460ff1615801561207857506001600160a01b03821660009081526008602052604090205460ff165b156120885761203283838361291a565b6001600160a01b03831660009081526008602052604090205460ff161580156120ca57506001600160a01b03821660009081526008602052604090205460ff16155b156120da576120328383836129c3565b6001600160a01b03831660009081526008602052604090205460ff16801561211a57506001600160a01b03821660009081526008602052604090205460ff165b1561212a57612032838383612a16565b6121358383836129c3565b6001600160a01b03831660009081526006602052604090205460ff168061217457506001600160a01b03821660009081526006602052604090205460ff165b1561219057612190601154601055601354601255601554601455565b505050565b600b54600a546000918291825b6009548110156122e7578260036000600984815481106121c4576121c4613055565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061222f575081600460006009848154811061220857612208613055565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224557600b54600a54945094505050509091565b61228b600360006009848154811061225f5761225f613055565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611df9565b92506122d360046000600984815481106122a7576122a7613055565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611df9565b9150806122df8161300e565b9150506121a2565b50600a54600b546122f791611d09565b82101561230e57600b54600a549350935050509091565b90939092509050565b600081836123385760405162461bcd60e51b8152600401610a3c9190612e7c565b506000611cdd8486612f7b565b60008060008061235485612a89565b9050600061236186612aa5565b90506000612379826123738986611df9565b90611df9565b979296509094509092505050565b60008080806123968886612538565b905060006123a48887612538565b905060006123b28888612538565b905060006123c4826123738686611df9565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061240c5761240c613055565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190612c88565b816001815181106124ab576124ab613055565b6001600160a01b0392831660209182029290920101526017546124d1913091168461189f565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061250a908590600090869030904290600401612f27565b600060405180830381600087803b15801561252457600080fd5b505af1158015611ca4573d6000803e3d6000fd5b60008261254757506000610b42565b60006125538385612f9d565b9050826125608583612f7b565b14610ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a3c565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612190573d6000803e3d6000fd5b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561265257600080fd5b505afa158015612666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268a9190612c88565b8160008151811061269d5761269d613055565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126d1576126d1613055565b6001600160a01b0392831660209182029290920101526017541663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006127214261012c611d4b565b6040518663ffffffff1660e01b81526004016127409493929190612e47565b6000604051808303818588803b15801561275957600080fd5b505af115801561276d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516127a3929190612f06565b60405180910390a15050565b6010541580156127bf5750601254155b80156127cb5750601454155b156127d257565b6010805460115560128054601355601480546015556000928390559082905555565b60008060008060008061280687611daa565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128389088611df9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128679087611df9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546128969086611d4b565b6001600160a01b0389166000908152600360205260409020556128b881612ac1565b6128c28483612b49565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161290791815260200190565b60405180910390a3505050505050505050565b60008060008060008061292c87611daa565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061295e9087611df9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546129949084611d4b565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546128969086611d4b565b6000806000806000806129d587611daa565b9550955095509550955095506129ed8984878a612b6d565b6001600160a01b038b166000908152600360205260409020549096509093506128679087611df9565b600080600080600080612a2887611daa565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a5a9088611df9565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461295e9087611df9565b6000610b426064611e906010548561253890919063ffffffff16565b6000610b426064611e906012548561253890919063ffffffff16565b6000612acb611ce6565b90506000612ad98383612538565b30600090815260036020526040902054909150612af69082611d4b565b3060009081526003602090815260408083209390935560089052205460ff16156121905730600090815260046020526040902054612b349084611d4b565b30600090815260046020526040902055505050565b600b54612b569083611df9565b600b55600c54612b669082611d4b565b600c555050565b60008060145460001415612b85575083905082612c4d565b601454600090612ba090612b9a866064611d09565b90612538565b90506000612bb6612baf611ce6565b8390612538565b9050612bc28682611df9565b9550612bce8783611df9565b30600090815260036020526040902054909750612beb9082611d4b565b30600081815260036020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c3c9086815260200190565b60405180910390a386869350935050505b94509492505050565b80358015158114612c6657600080fd5b919050565b600060208284031215612c7d57600080fd5b8135610ca08161306b565b600060208284031215612c9a57600080fd5b8151610ca08161306b565b60008060408385031215612cb857600080fd5b8235612cc38161306b565b91506020830135612cd38161306b565b809150509250929050565b600080600060608486031215612cf357600080fd5b8335612cfe8161306b565b92506020840135612d0e8161306b565b929592945050506040919091013590565b60008060408385031215612d3257600080fd5b8235612d3d8161306b565b9150612d4b60208401612c56565b90509250929050565b60008060408385031215612d6757600080fd5b8235612d728161306b565b946020939093013593505050565b600060208284031215612d9257600080fd5b610ca082612c56565b600060208284031215612dad57600080fd5b5035919050565b60008060408385031215612dc757600080fd5b82359150612d4b60208401612c56565b600080600060608486031215612dec57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015612e3c5781516001600160a01b031687529582019590820190600101612e17565b509495945050505050565b848152608060208201526000612e606080830186612e03565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612ea957858101830151858201604001528201612e8d565b81811115612ebb576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612f1f6040830184612e03565b949350505050565b85815284602082015260a060408201526000612f4660a0830186612e03565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f7657612f76613029565b500190565b600082612f9857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612fb757612fb7613029565b500290565b600082821015612fce57612fce613029565b500390565b600181811c90821680612fe757607f821691505b6020821081141561300857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561302257613022613029565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461308057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206927bfdd3219448999409b03fd564cc3bc1b177177d2c1cc9d6589fec9f848b264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103395760003560e01c80636053a0e3116101ab578063a69df4b5116100f7578063dd46706411610095578063e6c75f711161006f578063e6c75f711461099c578063ea2f0b37146109b2578063ec28438a146109d2578063f2fde38b146109f257600080fd5b8063dd46706414610920578063dd62ed3e14610940578063e2f456051461098657600080fd5b8063b6c52324116100d1578063b6c52324146108b6578063bdc653ef146108cb578063c2b3e1c2146108e0578063c49b9a801461090057600080fd5b8063a69df4b514610861578063a9059cbb14610876578063afa4f3b21461089657600080fd5b806385141a77116101645780638ee108231161013e5780638ee10823146107f657806395d89b411461080c5780639f34a5b414610821578063a457c2d71461084157600080fd5b806385141a771461076b57806388f820201461079f5780638da5cb5b146107d857600080fd5b80636053a0e3146106c65780636ac3f254146106e057806370a0823114610700578063715018a61461072057806375f0a874146107355780637d1db4a51461075557600080fd5b8063313ce56711610285578063455a4396116102235780635134f6ab116101fd5780635134f6ab1461063857806352390c021461064d5780635342acb41461066d5780635d098b38146106a657600080fd5b8063455a4396146105d757806349bd5a5e146105f75780634a74bb021461061757600080fd5b80633b124fe71161025f5780633b124fe7146105615780633bd5d17314610577578063437823ec146105975780634549b039146105b757600080fd5b8063313ce567146104ff5780633685d41914610521578063395093511461054157600080fd5b806318160ddd116102f257806322976e0d116102cc57806322976e0d1461048957806323b872dd1461049f57806329370cc6146104bf5780632d838119146104df57600080fd5b806318160ddd1461042e57806319de79ab146104435780631cdd3be31461045957600080fd5b8063068dde721461034557806306fdde031461036757806307efbfdc14610392578063095ea7b3146103a757806313114a9d146103d75780631694505e146103f657600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004612d9b565b610a12565b005b34801561037357600080fd5b5061037c610a4a565b6040516103899190612e7c565b60405180910390f35b34801561039e57600080fd5b50610365610adc565b3480156103b357600080fd5b506103c76103c2366004612d54565b610b31565b6040519015158152602001610389565b3480156103e357600080fd5b50600c545b604051908152602001610389565b34801561040257600080fd5b50601754610416906001600160a01b031681565b6040516001600160a01b039091168152602001610389565b34801561043a57600080fd5b50600a546103e8565b34801561044f57600080fd5b506103e860125481565b34801561046557600080fd5b506103c7610474366004612c6b565b60076020526000908152604090205460ff1681565b34801561049557600080fd5b506103e860145481565b3480156104ab57600080fd5b506103c76104ba366004612cde565b610b48565b3480156104cb57600080fd5b506103656104da366004612d80565b610bb1565b3480156104eb57600080fd5b506103e86104fa366004612d9b565b610c23565b34801561050b57600080fd5b50600f5460405160ff9091168152602001610389565b34801561052d57600080fd5b5061036561053c366004612c6b565b610ca7565b34801561054d57600080fd5b506103c761055c366004612d54565b610e5e565b34801561056d57600080fd5b506103e860105481565b34801561058357600080fd5b50610365610592366004612d9b565b610e94565b3480156105a357600080fd5b506103656105b2366004612c6b565b610f7e565b3480156105c357600080fd5b506103e86105d2366004612db4565b610fcc565b3480156105e357600080fd5b506103656105f2366004612d1f565b611059565b34801561060357600080fd5b50601854610416906001600160a01b031681565b34801561062357600080fd5b506018546103c790600160a81b900460ff1681565b34801561064457600080fd5b506103656110ae565b34801561065957600080fd5b50610365610668366004612c6b565b611104565b34801561067957600080fd5b506103c7610688366004612c6b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b257600080fd5b506103656106c1366004612c6b565b611257565b3480156106d257600080fd5b50601e546103c79060ff1681565b3480156106ec57600080fd5b506103656106fb366004612dd7565b6112a3565b34801561070c57600080fd5b506103e861071b366004612c6b565b611300565b34801561072c57600080fd5b5061036561135f565b34801561074157600080fd5b50601654610416906001600160a01b031681565b34801561076157600080fd5b506103e8601a5481565b34801561077757600080fd5b506104167f000000000000000000000000000000000000000000000000000000000000dead81565b3480156107ab57600080fd5b506103c76107ba366004612c6b565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107e457600080fd5b506000546001600160a01b0316610416565b34801561080257600080fd5b506103e8601c5481565b34801561081857600080fd5b5061037c6113c1565b34801561082d57600080fd5b5061036561083c366004612d9b565b6113d0565b34801561084d57600080fd5b506103c761085c366004612d54565b61140e565b34801561086d57600080fd5b5061036561145d565b34801561088257600080fd5b506103c7610891366004612d54565b611563565b3480156108a257600080fd5b506103656108b1366004612d9b565b611570565b3480156108c257600080fd5b506002546103e8565b3480156108d757600080fd5b50601d546103e8565b3480156108ec57600080fd5b506103656108fb366004612d9b565b6115ae565b34801561090c57600080fd5b5061036561091b366004612d80565b6115dd565b34801561092c57600080fd5b5061036561093b366004612d9b565b611654565b34801561094c57600080fd5b506103e861095b366004612ca5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561099257600080fd5b506103e860195481565b3480156109a857600080fd5b506103e8601b5481565b3480156109be57600080fd5b506103656109cd366004612c6b565b6116d9565b3480156109de57600080fd5b506103656109ed366004612d9b565b611724565b3480156109fe57600080fd5b50610365610a0d366004612c6b565b6117c7565b6000546001600160a01b03163314610a455760405162461bcd60e51b8152600401610a3c90612ed1565b60405180910390fd5b601c55565b6060600d8054610a5990612fd3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8590612fd3565b8015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610a3c90612ed1565b610b1060016115dd565b60016010556002601255600660145566b1a2bc2ec50000601a819055601b55565b6000610b3e33848461189f565b5060015b92915050565b6000610b558484846119c3565b610ba78433610ba285604051806060016040528060288152602001613084602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611cac565b61189f565b5060019392505050565b6000546001600160a01b03163314610bdb5760405162461bcd60e51b8152600401610a3c90612ed1565b601e805460ff19168215159081179091556040519081527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c0906020015b60405180910390a150565b6000600b54821115610c8a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a3c565b6000610c94611ce6565b9050610ca08382611d09565b9392505050565b6000546001600160a01b03163314610cd15760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03811660009081526008602052604090205460ff16610d395760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a3c565b60005b600954811015610e5a57816001600160a01b031660098281548110610d6357610d63613055565b6000918252602090912001546001600160a01b03161415610e485760098054610d8e90600190612fbc565b81548110610d9e57610d9e613055565b600091825260209091200154600980546001600160a01b039092169183908110610dca57610dca613055565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff191690556009805480610e2257610e2261303f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e528161300e565b915050610d3c565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b3e918590610ba29086611d4b565b3360008181526008602052604090205460ff1615610f095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a3c565b6000610f1483611daa565b505050506001600160a01b038416600090815260036020526040902054919250610f4091905082611df9565b6001600160a01b038316600090815260036020526040902055600b54610f669082611df9565b600b55600c54610f769084611d4b565b600c55505050565b6000546001600160a01b03163314610fa85760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a548311156110205760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a3c565b8161103f57600061103084611daa565b50939550610b42945050505050565b600061104a84611daa565b50929550610b42945050505050565b6000546001600160a01b031633146110835760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610a3c90612ed1565b6110e260006115dd565b600060108190556012819055601455674563918244f40000601a819055601b55565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03811660009081526008602052604090205460ff16156111975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a3c565b6001600160a01b038116600090815260036020526040902054156111f1576001600160a01b0381166000908152600360205260409020546111d790610c23565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610a3c90612ed1565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112cd5760405162461bcd60e51b8152600401610a3c90612ed1565b6000831180156112dd5750600082115b80156112e95750600081115b6112f257600080fd5b601092909255601255601455565b6001600160a01b03811660009081526008602052604081205460ff161561133d57506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b4290610c23565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610a3c90612ed1565b600080546040516001600160a01b03909116906000805160206130ac833981519152908390a3600080546001600160a01b0319169055565b6060600e8054610a5990612fd3565b6000546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a3c90612ed1565b61140881633b9aca00612f9d565b601b5550565b6000610b3e3384610ba2856040518060600160405280602581526020016130cc602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611cac565b6001546001600160a01b031633146114c35760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a3c565b60025442116115145760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a3c565b600154600080546040516001600160a01b0393841693909116916000805160206130ac83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b3e3384846119c3565b6000546001600160a01b0316331461159a5760405162461bcd60e51b8152600401610a3c90612ed1565b6115a881633b9aca00612f9d565b60195550565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610a3c90612ed1565b601d55565b6000546001600160a01b031633146116075760405162461bcd60e51b8152600401610a3c90612ed1565b60188054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c1890831515815260200190565b6000546001600160a01b0316331461167e5760405162461bcd60e51b8152600401610a3c90612ed1565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556116ad8142612f63565b600255600080546040516001600160a01b03909116906000805160206130ac833981519152908390a350565b6000546001600160a01b031633146117035760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610a3c90612ed1565b600081116117b35760405162461bcd60e51b815260206004820152602c60248201527f7472616e73616374696f6e20616d6f756e74206d75737420626520677265617460448201526b6572207468616e207a65726f60a01b6064820152608401610a3c565b6117c181633b9aca00612f9d565b601a5550565b6000546001600160a01b031633146117f15760405162461bcd60e51b8152600401610a3c90612ed1565b6001600160a01b0381166118565760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3c565b600080546040516001600160a01b03808516939216916000805160206130ac83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3c565b6001600160a01b0382166119625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a275760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a3c565b60008111611a895760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a3c565b6001600160a01b03831660009081526007602052604090205460ff16158015611acb57506001600160a01b03821660009081526007602052604090205460ff16155b611b0d5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610a3c565b6001600160a01b03831660009081526006602052604081205460ff1680611b4c57506001600160a01b03831660009081526006602052604090205460ff165b6018549091506001600160a01b038581169116148015611b6a575080155b15611be6576000611b7a84611300565b601b54909150611b8a8483612f63565b1115611be45760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610a3c565b505b6000611bf130611300565b60195460185491925082101590600160a01b900460ff16158015611c2357506018546001600160a01b03878116911614155b8015611c385750601854600160a81b900460ff165b15611c995760195491508015611c5157611c5182611e3b565b601e54479060ff168015611c665750601d5481115b15611c9757601d54811115611c7a5750601d545b611c97611c92601c5483611d0990919063ffffffff16565b611efb565b505b611ca4868686611f2d565b505050505050565b60008184841115611cd05760405162461bcd60e51b8152600401610a3c9190612e7c565b506000611cdd8486612fbc565b95945050505050565b6000806000611cf3612195565b9092509050611d028282611d09565b9250505090565b6000610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612317565b600080611d588385612f63565b905083811015610ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a3c565b6000806000806000806000806000611dc18a612345565b9250925092506000806000611ddf8d8686611dda611ce6565b612387565b919f909e50909c50959a5093985091965092945050505050565b6000610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cac565b6018805460ff60a01b1916600160a01b17905547611e58826123d7565b6000611e644783611df9565b90506000611e96611e82601254601454611d4b90919063ffffffff16565b601454611e90908590612538565b90611d09565b601654909150611eaf906001600160a01b0316826125b7565b60408051858152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506018805460ff60a01b191690555050565b6018805460ff60a01b1916600160a01b1790558015611f1d57611f1d816125ed565b506018805460ff60a01b19169055565b6001600160a01b03831660009081526006602052604090205460ff1680611f6c57506001600160a01b03821660009081526006602052604090205460ff165b15611f7e57611f796127af565b611fe1565b601a54811115611fe15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a3c565b6001600160a01b03831660009081526008602052604090205460ff16801561202257506001600160a01b03821660009081526008602052604090205460ff16155b15612037576120328383836127f4565b612135565b6001600160a01b03831660009081526008602052604090205460ff1615801561207857506001600160a01b03821660009081526008602052604090205460ff165b156120885761203283838361291a565b6001600160a01b03831660009081526008602052604090205460ff161580156120ca57506001600160a01b03821660009081526008602052604090205460ff16155b156120da576120328383836129c3565b6001600160a01b03831660009081526008602052604090205460ff16801561211a57506001600160a01b03821660009081526008602052604090205460ff165b1561212a57612032838383612a16565b6121358383836129c3565b6001600160a01b03831660009081526006602052604090205460ff168061217457506001600160a01b03821660009081526006602052604090205460ff165b1561219057612190601154601055601354601255601554601455565b505050565b600b54600a546000918291825b6009548110156122e7578260036000600984815481106121c4576121c4613055565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061222f575081600460006009848154811061220857612208613055565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561224557600b54600a54945094505050509091565b61228b600360006009848154811061225f5761225f613055565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611df9565b92506122d360046000600984815481106122a7576122a7613055565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611df9565b9150806122df8161300e565b9150506121a2565b50600a54600b546122f791611d09565b82101561230e57600b54600a549350935050509091565b90939092509050565b600081836123385760405162461bcd60e51b8152600401610a3c9190612e7c565b506000611cdd8486612f7b565b60008060008061235485612a89565b9050600061236186612aa5565b90506000612379826123738986611df9565b90611df9565b979296509094509092505050565b60008080806123968886612538565b905060006123a48887612538565b905060006123b28888612538565b905060006123c4826123738686611df9565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061240c5761240c613055565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190612c88565b816001815181106124ab576124ab613055565b6001600160a01b0392831660209182029290920101526017546124d1913091168461189f565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061250a908590600090869030904290600401612f27565b600060405180830381600087803b15801561252457600080fd5b505af1158015611ca4573d6000803e3d6000fd5b60008261254757506000610b42565b60006125538385612f9d565b9050826125608583612f7b565b14610ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a3c565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612190573d6000803e3d6000fd5b6040805160028082526060820183526000926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561265257600080fd5b505afa158015612666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268a9190612c88565b8160008151811061269d5761269d613055565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126d1576126d1613055565b6001600160a01b0392831660209182029290920101526017541663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6127214261012c611d4b565b6040518663ffffffff1660e01b81526004016127409493929190612e47565b6000604051808303818588803b15801561275957600080fd5b505af115801561276d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516127a3929190612f06565b60405180910390a15050565b6010541580156127bf5750601254155b80156127cb5750601454155b156127d257565b6010805460115560128054601355601480546015556000928390559082905555565b60008060008060008061280687611daa565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128389088611df9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128679087611df9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546128969086611d4b565b6001600160a01b0389166000908152600360205260409020556128b881612ac1565b6128c28483612b49565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161290791815260200190565b60405180910390a3505050505050505050565b60008060008060008061292c87611daa565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061295e9087611df9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546129949084611d4b565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546128969086611d4b565b6000806000806000806129d587611daa565b9550955095509550955095506129ed8984878a612b6d565b6001600160a01b038b166000908152600360205260409020549096509093506128679087611df9565b600080600080600080612a2887611daa565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a5a9088611df9565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461295e9087611df9565b6000610b426064611e906010548561253890919063ffffffff16565b6000610b426064611e906012548561253890919063ffffffff16565b6000612acb611ce6565b90506000612ad98383612538565b30600090815260036020526040902054909150612af69082611d4b565b3060009081526003602090815260408083209390935560089052205460ff16156121905730600090815260046020526040902054612b349084611d4b565b30600090815260046020526040902055505050565b600b54612b569083611df9565b600b55600c54612b669082611d4b565b600c555050565b60008060145460001415612b85575083905082612c4d565b601454600090612ba090612b9a866064611d09565b90612538565b90506000612bb6612baf611ce6565b8390612538565b9050612bc28682611df9565b9550612bce8783611df9565b30600090815260036020526040902054909750612beb9082611d4b565b30600081815260036020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c3c9086815260200190565b60405180910390a386869350935050505b94509492505050565b80358015158114612c6657600080fd5b919050565b600060208284031215612c7d57600080fd5b8135610ca08161306b565b600060208284031215612c9a57600080fd5b8151610ca08161306b565b60008060408385031215612cb857600080fd5b8235612cc38161306b565b91506020830135612cd38161306b565b809150509250929050565b600080600060608486031215612cf357600080fd5b8335612cfe8161306b565b92506020840135612d0e8161306b565b929592945050506040919091013590565b60008060408385031215612d3257600080fd5b8235612d3d8161306b565b9150612d4b60208401612c56565b90509250929050565b60008060408385031215612d6757600080fd5b8235612d728161306b565b946020939093013593505050565b600060208284031215612d9257600080fd5b610ca082612c56565b600060208284031215612dad57600080fd5b5035919050565b60008060408385031215612dc757600080fd5b82359150612d4b60208401612c56565b600080600060608486031215612dec57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b83811015612e3c5781516001600160a01b031687529582019590820190600101612e17565b509495945050505050565b848152608060208201526000612e606080830186612e03565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612ea957858101830151858201604001528201612e8d565b81811115612ebb576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612f1f6040830184612e03565b949350505050565b85815284602082015260a060408201526000612f4660a0830186612e03565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f7657612f76613029565b500190565b600082612f9857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612fb757612fb7613029565b500290565b600082821015612fce57612fce613029565b500390565b600181811c90821680612fe757607f821691505b6020821081141561300857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561302257613022613029565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461308057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206927bfdd3219448999409b03fd564cc3bc1b177177d2c1cc9d6589fec9f848b264736f6c63430008070033
Deployed Bytecode Sourcemap
25502:21856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45447:104;;;;;;;;;;-1:-1:-1;45447:104:0;;;;;:::i;:::-;;:::i;:::-;;28562:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46957:254;;;;;;;;;;;;;:::i;29474:161::-;;;;;;;;;;-1:-1:-1;29474:161:0;;;;;:::i;:::-;;:::i;:::-;;;4448:14:1;;4441:22;4423:41;;4411:2;4396:18;29474:161:0;4283:187:1;30595:87:0;;;;;;;;;;-1:-1:-1;30664:10:0;;30595:87;;;13002:25:1;;;12990:2;12975:18;30595:87:0;12856:177:1;26810:42:0;;;;;;;;;;-1:-1:-1;26810:42:0;;;;-1:-1:-1;;;;;26810:42:0;;;;;;-1:-1:-1;;;;;4015:32:1;;;3997:51;;3985:2;3970:18;26810:42:0;3851:203:1;28839:95:0;;;;;;;;;;-1:-1:-1;28919:7:0;;28839:95;;26418:30;;;;;;;;;;;;;;;;25865:46;;;;;;;;;;-1:-1:-1;25865:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26610:32;;;;;;;;;;;;;;;;29643:313;;;;;;;;;;-1:-1:-1;29643:313:0;;;;;:::i;:::-;;:::i;46519:150::-;;;;;;;;;;-1:-1:-1;46519:150:0;;;;;:::i;:::-;;:::i;31519:253::-;;;;;;;;;;-1:-1:-1;31519:253:0;;;;;:::i;:::-;;:::i;28748:83::-;;;;;;;;;;-1:-1:-1;28814:9:0;;28748:83;;28814:9;;;;14357:36:1;;14345:2;14330:18;28748:83:0;14215:184:1;32121:479:0;;;;;;;;;;-1:-1:-1;32121:479:0;;;;;:::i;:::-;;:::i;29964:218::-;;;;;;;;;;-1:-1:-1;29964:218:0;;;;;:::i;:::-;;:::i;26331:26::-;;;;;;;;;;;;;;;;30690:377;;;;;;;;;;-1:-1:-1;30690:377:0;;;;;:::i;:::-;;:::i;44692:111::-;;;;;;;;;;-1:-1:-1;44692:111:0;;;;;:::i;:::-;;:::i;31075:436::-;;;;;;;;;;-1:-1:-1;31075:436:0;;;;;:::i;:::-;;:::i;44937:123::-;;;;;;;;;;-1:-1:-1;44937:123:0;;;;;:::i;:::-;;:::i;26859:29::-;;;;;;;;;;-1:-1:-1;26859:29:0;;;;-1:-1:-1;;;;;26859:29:0;;;26929:40;;;;;;;;;;-1:-1:-1;26929:40:0;;;;-1:-1:-1;;;26929:40:0;;;;;;46681:264;;;;;;;;;;;;;:::i;31780:333::-;;;;;;;;;;-1:-1:-1;31780:333:0;;;;;:::i;:::-;;:::i;36656:123::-;;;;;;;;;;-1:-1:-1;36656:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36744:27:0;36720:4;36744:27;;;:18;:27;;;;;;;;;36656:123;45563:122;;;;;;;;;;-1:-1:-1;45563:122:0;;;;;:::i;:::-;;:::i;27275:33::-;;;;;;;;;;-1:-1:-1;27275:33:0;;;;;;;;45697:279;;;;;;;;;;-1:-1:-1;45697:279:0;;;;;:::i;:::-;;:::i;28942:198::-;;;;;;;;;;-1:-1:-1;28942:198:0;;;;;:::i;:::-;;:::i;2175:148::-;;;;;;;;;;;;;:::i;26709:92::-;;;;;;;;;;-1:-1:-1;26709:92:0;;;;-1:-1:-1;;;;;26709:92:0;;;27037:46;;;;;;;;;;;;;;;;26517:80;;;;;;;;;;;;;;;30467:120;;;;;;;;;;-1:-1:-1;30467:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30559:20:0;30535:4;30559:20;;;:11;:20;;;;;;;;;30467:120;1532:79;;;;;;;;;;-1:-1:-1;1570:7:0;1597:6;-1:-1:-1;;;;;1597:6:0;1532:79;;27153:34;;;;;;;;;;;;;;;;28653:87;;;;;;;;;;;;;:::i;45318:119::-;;;;;;;;;;-1:-1:-1;45318:119:0;;;;;:::i;:::-;;:::i;30190:269::-;;;;;;;;;;-1:-1:-1;30190:269:0;;;;;:::i;:::-;;:::i;3197:305::-;;;;;;;;;;;;;:::i;29148:167::-;;;;;;;;;;-1:-1:-1;29148:167:0;;;;;:::i;:::-;;:::i;45988:126::-;;;;;;;;;;-1:-1:-1;45988:126:0;;;;;:::i;:::-;;:::i;2730:89::-;;;;;;;;;;-1:-1:-1;2802:9:0;;2730:89;;45072:108;;;;;;;;;;-1:-1:-1;45155:17:0;;45072:108;;45192:114;;;;;;;;;;-1:-1:-1;45192:114:0;;;;;:::i;:::-;;:::i;46336:171::-;;;;;;;;;;-1:-1:-1;46336:171:0;;;;;:::i;:::-;;:::i;2895:226::-;;;;;;;;;;-1:-1:-1;2895:226:0;;;;;:::i;:::-;;:::i;29323:143::-;;;;;;;;;;-1:-1:-1;29323:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29431:18:0;;;29404:7;29431:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29323:143;26978:52;;;;;;;;;;;;;;;;27090:50;;;;;;;;;;;;;;;;44815:110;;;;;;;;;;-1:-1:-1;44815:110:0;;;;;:::i;:::-;;:::i;46126:202::-;;;;;;;;;;-1:-1:-1;46126:202:0;;;;;:::i;:::-;;:::i;2478:244::-;;;;;;;;;;-1:-1:-1;2478:244:0;;;;;:::i;:::-;;:::i;45447:104::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;;;;;;;;;45520:14:::1;:24:::0;45447:104::o;28562:83::-;28599:13;28632:5;28625:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28562:83;:::o;46957:254::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;47011:30:::1;47036:4;47011:24;:30::i;:::-;47062:1;47052:7;:11:::0;47088:1:::1;47074:11;:15:::0;47116:1:::1;47100:13;:17:::0;47143:16:::1;47128:12;:31:::0;;;47170:14:::1;:33:::0;46957:254::o;29474:161::-;29549:4;29566:39;197:10;29589:7;29598:6;29566:8;:39::i;:::-;-1:-1:-1;29623:4:0;29474:161;;;;;:::o;29643:313::-;29741:4;29758:36;29768:6;29776:9;29787:6;29758:9;:36::i;:::-;29805:121;29814:6;197:10;29836:89;29874:6;29836:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29836:19:0;;;;;;:11;:19;;;;;;;;197:10;29836:33;;;;;;;;;;:37;:89::i;:::-;29805:8;:121::i;:::-;-1:-1:-1;29944:4:0;29643:313;;;;;:::o;46519:150::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;46589:14:::1;:25:::0;;-1:-1:-1;;46589:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;46630:31:::1;::::0;4423:41:1;;;46630:31:0::1;::::0;4411:2:1;4396:18;46630:31:0::1;;;;;;;;46519:150:::0;:::o;31519:253::-;31585:7;31624;;31613;:18;;31605:73;;;;-1:-1:-1;;;31605:73:0;;6029:2:1;31605:73:0;;;6011:21:1;6068:2;6048:18;;;6041:30;6107:34;6087:18;;;6080:62;-1:-1:-1;;;6158:18:1;;;6151:40;6208:19;;31605:73:0;5827:406:1;31605:73:0;31689:19;31712:10;:8;:10::i;:::-;31689:33;-1:-1:-1;31740:24:0;:7;31689:33;31740:11;:24::i;:::-;31733:31;31519:253;-1:-1:-1;;;31519:253:0:o;32121:479::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32203:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32195:60;;;::::0;-1:-1:-1;;;32195:60:0;;7606:2:1;32195:60:0::1;::::0;::::1;7588:21:1::0;7645:2;7625:18;;;7618:30;7684:29;7664:18;;;7657:57;7731:18;;32195:60:0::1;7404:351:1::0;32195:60:0::1;32271:9;32266:327;32290:9;:16:::0;32286:20;::::1;32266:327;;;32348:7;-1:-1:-1::0;;;;;32332:23:0::1;:9;32342:1;32332:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32332:12:0::1;:23;32328:254;;;32391:9;32401:16:::0;;:20:::1;::::0;32420:1:::1;::::0;32401:20:::1;:::i;:::-;32391:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32376:9:::1;:12:::0;;-1:-1:-1;;;;;32391:31:0;;::::1;::::0;32386:1;;32376:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32376:46:0::1;-1:-1:-1::0;;;;;32376:46:0;;::::1;;::::0;;32441:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32480:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32480:28:0::1;::::0;;32527:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32527:15:0;;;;;-1:-1:-1;;;;;;32527:15:0::1;::::0;;;;;32266:327:::1;32121:479:::0;:::o;32328:254::-:1;32308:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32266:327;;;;32121:479:::0;:::o;29964:218::-;197:10;30052:4;30101:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30101:34:0;;;;;;;;;;30052:4;;30069:83;;30092:7;;30101:50;;30140:10;30101:38;:50::i;30690:377::-;197:10;30742:14;30791:19;;;:11;:19;;;;;;;;30790:20;30782:77;;;;-1:-1:-1;;;30782:77:0;;12241:2:1;30782:77:0;;;12223:21:1;12280:2;12260:18;;;12253:30;12319:34;12299:18;;;12292:62;-1:-1:-1;;;12370:18:1;;;12363:42;12422:19;;30782:77:0;12039:408:1;30782:77:0;30871:15;30895:19;30906:7;30895:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30943:15:0;;;;;;:7;:15;;;;;;30870:44;;-1:-1:-1;30943:28:0;;:15;-1:-1:-1;30870:44:0;30943:19;:28::i;:::-;-1:-1:-1;;;;;30925:15:0;;;;;;:7;:15;;;;;:46;30992:7;;:20;;31004:7;30992:11;:20::i;:::-;30982:7;:30;31036:10;;:23;;31051:7;31036:14;:23::i;:::-;31023:10;:36;-1:-1:-1;;;30690:377:0:o;44692:111::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44761:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;44761:34:0::1;44791:4;44761:34;::::0;;44692:111::o;31075:436::-;31165:7;31204;;31193;:18;;31185:62;;;;-1:-1:-1;;;31185:62:0;;8375:2:1;31185:62:0;;;8357:21:1;8414:2;8394:18;;;8387:30;8453:33;8433:18;;;8426:61;8504:18;;31185:62:0;8173:355:1;31185:62:0;31263:17;31258:246;;31298:15;31322:19;31333:7;31322:10;:19::i;:::-;-1:-1:-1;31297:44:0;;-1:-1:-1;31356:14:0;;-1:-1:-1;;;;;31356:14:0;31258:246;31405:23;31436:19;31447:7;31436:10;:19::i;:::-;-1:-1:-1;31403:52:0;;-1:-1:-1;31470:22:0;;-1:-1:-1;;;;;31470:22:0;44937:123;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45021:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;45021:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44937:123::o;46681:264::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;46740:31:::1;46765:5;46740:24;:31::i;:::-;46792:1;46782:7;:11:::0;;;46804::::1;:15:::0;;;46830:13:::1;:17:::0;46873:18:::1;46858:12;:33:::0;;;46902:14:::1;:35:::0;46681:264::o;31780:333::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31863:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31862:21;31854:61;;;::::0;-1:-1:-1;;;31854:61:0;;7606:2:1;31854:61:0::1;::::0;::::1;7588:21:1::0;7645:2;7625:18;;;7618:30;7684:29;7664:18;;;7657:57;7731:18;;31854:61:0::1;7404:351:1::0;31854:61:0::1;-1:-1:-1::0;;;;;31929:16:0;::::1;31948:1;31929:16:::0;;;:7:::1;:16;::::0;;;;;:20;31926:108:::1;;-1:-1:-1::0;;;;;32005:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31985:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31966:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31926:108:::1;-1:-1:-1::0;;;;;32044:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32044:27:0::1;32067:4;32044:27:::0;;::::1;::::0;;;32082:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32082:23:0::1;::::0;;::::1;::::0;;31780:333::o;45563:122::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;45650:15:::1;:27:::0;;-1:-1:-1;;;;;;45650:27:0::1;-1:-1:-1::0;;;;;45650:27:0;;;::::1;::::0;;;::::1;::::0;;45563:122::o;45697:279::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;45827:1:::1;45818:6;:10;:28;;;;;45845:1;45832:10;:14;45818:28;:48;;;;;45865:1;45850:12;:16;45818:48;45810:57;;;::::0;::::1;;45878:7;:16:::0;;;;45905:11:::1;:24:::0;45940:13:::1;:28:::0;45697:279::o;28942:198::-;-1:-1:-1;;;;;29032:20:0;;29008:7;29032:20;;;:11;:20;;;;;;;;29028:49;;;-1:-1:-1;;;;;;29061:16:0;;;;;:7;:16;;;;;;;28942:198::o;29028:49::-;-1:-1:-1;;;;;29115:16:0;;;;;;:7;:16;;;;;;29095:37;;:19;:37::i;2175:148::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;2282:1:::1;2266:6:::0;;2245:40:::1;::::0;-1:-1:-1;;;;;2266:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;2245:40:0;2282:1;;2245:40:::1;2313:1;2296:19:::0;;-1:-1:-1;;;;;;2296:19:0::1;::::0;;2175:148::o;28653:87::-;28692:13;28725:7;28718:14;;;;;:::i;45318:119::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;45411:19:::1;:9:::0;45424:5:::1;45411:19;:::i;:::-;45394:14;:36:::0;-1:-1:-1;45318:119:0:o;30190:269::-;30283:4;30300:129;197:10;30323:7;30332:96;30371:15;30332:96;;;;;;;;;;;;;;;;;197:10;30332:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30332:34:0;;;;;;;;;;;;:38;:96::i;3197:305::-;3249:14;;-1:-1:-1;;;;;3249:14:0;3267:10;3249:28;3241:76;;;;-1:-1:-1;;;3241:76:0;;12654:2:1;3241:76:0;;;12636:21:1;12693:2;12673:18;;;12666:30;12732:34;12712:18;;;12705:62;-1:-1:-1;;;12783:18:1;;;12776:33;12826:19;;3241:76:0;12452:399:1;3241:76:0;3354:9;;3336:15;:27;3328:72;;;;-1:-1:-1;;;3328:72:0;;11881:2:1;3328:72:0;;;11863:21:1;11920:2;11900:18;;;11893:30;11959:33;11939:18;;;11932:61;12010:18;;3328:72:0;11679:355:1;3328:72:0;3445:14;;;3437:6;;3416:44;;-1:-1:-1;;;;;3445:14:0;;;;3437:6;;;;-1:-1:-1;;;;;;;;;;;3416:44:0;;3480:14;;;3471:23;;-1:-1:-1;;;;;;3471:23:0;-1:-1:-1;;;;;3480:14:0;;;3471:23;;;;;;3197:305::o;29148:167::-;29226:4;29243:42;197:10;29267:9;29278:6;29243:9;:42::i;45988:126::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;46091:15:::1;:9:::0;46101:5:::1;46091:15;:::i;:::-;46070:18;:36:::0;-1:-1:-1;45988:126:0:o;45192:114::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;45270:17:::1;:28:::0;45192:114::o;46336:171::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;46413:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;46413:32:0::1;-1:-1:-1::0;;;;46413:32:0;;::::1;;::::0;;46461:38:::1;::::0;::::1;::::0;::::1;::::0;46437:8;4448:14:1;4441:22;4423:41;;4411:2;4396:18;;4283:187;2895:226:0;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;2976:6:::1;::::0;;;2959:23;;-1:-1:-1;;;;;;2959:23:0;;::::1;-1:-1:-1::0;;;;;2976:6:0;::::1;2959:23;::::0;;;2993:19:::1;::::0;;3035:22:::1;3053:4:::0;3035:15:::1;:22;:::i;:::-;3023:9;:34:::0;3110:1:::1;3094:6:::0;;3073:40:::1;::::0;-1:-1:-1;;;;;3094:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;3073:40:0;3110:1;;3073:40:::1;2895:226:::0;:::o;44815:110::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44882:27:0::1;44912:5;44882:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;44882:35:0::1;::::0;;44815:110::o;46126:202::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;46225:1:::1;46211:11;:15;46203:72;;;::::0;-1:-1:-1;;;46203:72:0;;7962:2:1;46203:72:0::1;::::0;::::1;7944:21:1::0;8001:2;7981:18;;;7974:30;8040:34;8020:18;;;8013:62;-1:-1:-1;;;8091:18:1;;;8084:42;8143:19;;46203:72:0::1;7760:408:1::0;46203:72:0::1;46301:19;:11:::0;46315:5:::1;46301:19;:::i;:::-;46286:12;:34:::0;-1:-1:-1;46126:202:0:o;2478:244::-;1744:6;;-1:-1:-1;;;;;1744:6:0;197:10;1744:22;1736:67;;;;-1:-1:-1;;;1736:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2567:22:0;::::1;2559:73;;;::::0;-1:-1:-1;;;2559:73:0;;6440:2:1;2559:73:0::1;::::0;::::1;6422:21:1::0;6479:2;6459:18;;;6452:30;6518:34;6498:18;;;6491:62;-1:-1:-1;;;6569:18:1;;;6562:36;6615:19;;2559:73:0::1;6238:402:1::0;2559:73:0::1;2669:6;::::0;;2648:38:::1;::::0;-1:-1:-1;;;;;2648:38:0;;::::1;::::0;2669:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2648:38:0;::::1;2697:6;:17:::0;;-1:-1:-1;;;;;;2697:17:0::1;-1:-1:-1::0;;;;;2697:17:0;;;::::1;::::0;;;::::1;::::0;;2478:244::o;36787:337::-;-1:-1:-1;;;;;36880:19:0;;36872:68;;;;-1:-1:-1;;;36872:68:0;;11476:2:1;36872:68:0;;;11458:21:1;11515:2;11495:18;;;11488:30;11554:34;11534:18;;;11527:62;-1:-1:-1;;;11605:18:1;;;11598:34;11649:19;;36872:68:0;11274:400:1;36872:68:0;-1:-1:-1;;;;;36959:21:0;;36951:68;;;;-1:-1:-1;;;36951:68:0;;6847:2:1;36951:68:0;;;6829:21:1;6886:2;6866:18;;;6859:30;6925:34;6905:18;;;6898:62;-1:-1:-1;;;6976:18:1;;;6969:32;7018:19;;36951:68:0;6645:398:1;36951:68:0;-1:-1:-1;;;;;37032:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37084:32;;13002:25:1;;;37084:32:0;;12975:18:1;37084:32:0;;;;;;;36787:337;;;:::o;37132:1936::-;-1:-1:-1;;;;;37254:18:0;;37246:68;;;;-1:-1:-1;;;37246:68:0;;11070:2:1;37246:68:0;;;11052:21:1;11109:2;11089:18;;;11082:30;11148:34;11128:18;;;11121:62;-1:-1:-1;;;11199:18:1;;;11192:35;11244:19;;37246:68:0;10868:401:1;37246:68:0;37342:1;37333:6;:10;37325:64;;;;-1:-1:-1;;;37325:64:0;;10660:2:1;37325:64:0;;;10642:21:1;10699:2;10679:18;;;10672:30;10738:34;10718:18;;;10711:62;-1:-1:-1;;;10789:18:1;;;10782:39;10838:19;;37325:64:0;10458:405:1;37325:64:0;-1:-1:-1;;;;;37409:20:0;;;;;;:14;:20;;;;;;;;37408:21;:44;;;;-1:-1:-1;;;;;;37434:18:0;;;;;;:14;:18;;;;;;;;37433:19;37408:44;37400:76;;;;-1:-1:-1;;;37400:76:0;;8735:2:1;37400:76:0;;;8717:21:1;8774:2;8754:18;;;8747:30;-1:-1:-1;;;8793:18:1;;;8786:49;8852:18;;37400:76:0;8533:343:1;37400:76:0;-1:-1:-1;;;;;37520:24:0;;37497:20;37520:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37548:22:0;;;;;;:18;:22;;;;;;;;37520:50;37595:13;;37497:73;;-1:-1:-1;;;;;;37595:19:0;;;:13;;:19;:39;;;;;37619:15;37618:16;37595:39;37591:266;;;37651:32;37686:13;37696:2;37686:9;:13::i;:::-;37759:14;;37651:48;;-1:-1:-1;37722:33:0;37749:6;37651:48;37722:33;:::i;:::-;:51;;37714:131;;;;-1:-1:-1;;;37714:131:0;;9492:2:1;37714:131:0;;;9474:21:1;9531:2;9511:18;;;9504:30;9570:34;9550:18;;;9543:62;-1:-1:-1;;;9621:18:1;;;9614:34;9665:19;;37714:131:0;9290:400:1;37714:131:0;37636:221;37591:266;38069:28;38100:24;38118:4;38100:9;:24::i;:::-;38194:18;;38242:16;;38069:55;;-1:-1:-1;38170:42:0;;;;-1:-1:-1;;;38242:16:0;;;;38241:17;:55;;;;-1:-1:-1;38283:13:0;;-1:-1:-1;;;;;38275:21:0;;;38283:13;;38275:21;;38241:55;:93;;;;-1:-1:-1;38313:21:0;;-1:-1:-1;;;38313:21:0;;;;38241:93;38223:718;;;38384:18;;38361:41;;38487:19;38484:91;;;38527:32;38538:20;38527:10;:32::i;:::-;38661:14;;38621:21;;38661:14;;:54;;;;;38697:17;;38679:7;:36;38661:54;38657:273;;;38768:17;;38758:7;:27;38754:81;;;-1:-1:-1;38818:17:0;;38754:81;38872:42;38886:27;38898:14;;38886:7;:11;;:27;;;;:::i;:::-;38872:13;:42::i;:::-;38346:595;38223:718;39030:30;39045:4;39050:2;39053:6;39030:14;:30::i;:::-;37235:1833;;;37132:1936;;;:::o;7826:192::-;7912:7;7948:12;7940:6;;;;7932:29;;;;-1:-1:-1;;;7932:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7972:9:0;7984:5;7988:1;7984;:5;:::i;:::-;7972:17;7826:192;-1:-1:-1;;;;;7826:192:0:o;34693:163::-;34734:7;34755:15;34772;34791:19;:17;:19::i;:::-;34754:56;;-1:-1:-1;34754:56:0;-1:-1:-1;34828:20:0;34754:56;;34828:11;:20::i;:::-;34821:27;;;;34693:163;:::o;9224:132::-;9282:7;9309:39;9313:1;9316;9309:39;;;;;;;;;;;;;;;;;:3;:39::i;6923:181::-;6981:7;;7013:5;7017:1;7013;:5;:::i;:::-;7001:17;;7042:1;7037;:6;;7029:46;;;;-1:-1:-1;;;7029:46:0;;7250:2:1;7029:46:0;;;7232:21:1;7289:2;7269:18;;;7262:30;7328:29;7308:18;;;7301:57;7375:18;;7029:46:0;7048:351:1;33513:413:0;33572:7;33581;33590;33599;33608;33617;33638:23;33663:12;33677:16;33697:20;33709:7;33697:11;:20::i;:::-;33637:80;;;;;;33729:15;33746:23;33771:12;33787:48;33799:7;33808:4;33814:8;33824:10;:8;:10::i;:::-;33787:11;:48::i;:::-;33728:107;;;;-1:-1:-1;33728:107:0;;-1:-1:-1;33886:15:0;;-1:-1:-1;33903:4:0;;-1:-1:-1;33909:8:0;;-1:-1:-1;33513:413:0;;-1:-1:-1;;;;;33513:413:0:o;7387:136::-;7445:7;7472:43;7476:1;7479;7472:43;;;;;;;;;;;;;;;;;:3;:43::i;39076:641::-;27720:16;:23;;-1:-1:-1;;;;27720:23:0;-1:-1:-1;;;27720:23:0;;;39192:21:::1;39258:38;39275:20:::0;39258:16:::1;:38::i;:::-;39357:18;39378:41;:21;39404:14:::0;39378:25:::1;:41::i;:::-;39357:62;;39440:22;39465:65;39499:30;39517:11;;39499:13;;:17;;:30;;;;:::i;:::-;39480:13;::::0;39465:29:::1;::::0;:10;;:14:::1;:29::i;:::-;:33:::0;::::1;:65::i;:::-;39603:15;::::0;39440:90;;-1:-1:-1;39582:53:0::1;::::0;-1:-1:-1;;;;;39603:15:0::1;39440:90:::0;39582:20:::1;:53::i;:::-;39661:48;::::0;;14136:25:1;;;14192:2;14177:18;;14170:34;;;39661:48:0::1;::::0;14109:18:1;39661:48:0::1;;;;;;;-1:-1:-1::0;;27766:16:0;:24;;-1:-1:-1;;;;27766:24:0;;;-1:-1:-1;;39076:641:0:o;39729:135::-;27720:16;:23;;-1:-1:-1;;;;27720:23:0;-1:-1:-1;;;27720:23:0;;;39800:10;;39796:61:::1;;39824:24;39841:6;39824:16;:24::i;:::-;-1:-1:-1::0;27766:16:0;:24;;-1:-1:-1;;;;27766:24:0;;;39729:135::o;41131:1096::-;-1:-1:-1;;;;;41234:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;41264:29:0;;;;;;:18;:29;;;;;;;;41234:59;41231:245;;;41321:14;:12;:14::i;:::-;41231:245;;;41407:12;;41397:6;:22;;41389:75;;;;-1:-1:-1;;;41389:75:0;;9083:2:1;41389:75:0;;;9065:21:1;9122:2;9102:18;;;9095:30;9161:34;9141:18;;;9134:62;-1:-1:-1;;;9212:18:1;;;9205:38;9260:19;;41389:75:0;8881:404:1;41389:75:0;-1:-1:-1;;;;;41492:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;41516:22:0;;;;;;:11;:22;;;;;;;;41515:23;41492:46;41488:597;;;41555:48;41577:6;41585:9;41596:6;41555:21;:48::i;:::-;41488:597;;;-1:-1:-1;;;;;41626:19:0;;;;;;:11;:19;;;;;;;;41625:20;:46;;;;-1:-1:-1;;;;;;41649:22:0;;;;;;:11;:22;;;;;;;;41625:46;41621:464;;;41688:46;41708:6;41716:9;41727:6;41688:19;:46::i;41621:464::-;-1:-1:-1;;;;;41757:19:0;;;;;;:11;:19;;;;;;;;41756:20;:47;;;;-1:-1:-1;;;;;;41781:22:0;;;;;;:11;:22;;;;;;;;41780:23;41756:47;41752:333;;;41820:44;41838:6;41846:9;41857:6;41820:17;:44::i;41752:333::-;-1:-1:-1;;;;;41886:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41909:22:0;;;;;;:11;:22;;;;;;;;41886:45;41882:203;;;41948:48;41970:6;41978:9;41989:6;41948:21;:48::i;41882:203::-;42029:44;42047:6;42055:9;42066:6;42029:17;:44::i;:::-;-1:-1:-1;;;;;42108:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;42138:29:0;;;;;;:18;:29;;;;;;;;42108:59;42105:115;;;42193:15;36531;;36521:7;:25;36570:19;;36556:11;:33;36615:21;;36599:13;:37;36478:166;42193:15;41131:1096;;;:::o;34864:561::-;34961:7;;34997;;34914;;;;;35021:289;35045:9;:16;35041:20;;35021:289;;;35111:7;35087;:21;35095:9;35105:1;35095:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35095:12:0;35087:21;;;;;;;;;;;;;:31;;:66;;;35146:7;35122;:21;35130:9;35140:1;35130:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35130:12:0;35122:21;;;;;;;;;;;;;:31;35087:66;35083:97;;;35163:7;;35172;;35155:25;;;;;;;34864:561;;:::o;35083:97::-;35205:34;35217:7;:21;35225:9;35235:1;35225:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35225:12:0;35217:21;;;;;;;;;;;;;35205:7;;:11;:34::i;:::-;35195:44;;35264:34;35276:7;:21;35284:9;35294:1;35284:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35284:12:0;35276:21;;;;;;;;;;;;;35264:7;;:11;:34::i;:::-;35254:44;-1:-1:-1;35063:3:0;;;;:::i;:::-;;;;35021:289;;;-1:-1:-1;35346:7:0;;35334;;:20;;:11;:20::i;:::-;35324:7;:30;35320:61;;;35364:7;;35373;;35356:25;;;;;;34864:561;;:::o;35320:61::-;35400:7;;35409;;-1:-1:-1;34864:561:0;-1:-1:-1;34864:561:0:o;9852:278::-;9938:7;9973:12;9966:5;9958:28;;;;-1:-1:-1;;;9958:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9997:9:0;10009:5;10013:1;10009;:5;:::i;33934:322::-;33994:7;34003;34012;34032:12;34047:24;34063:7;34047:15;:24::i;:::-;34032:39;;34082:16;34101:28;34121:7;34101:19;:28::i;:::-;34082:47;-1:-1:-1;34140:23:0;34166:31;34082:47;34166:17;:7;34178:4;34166:11;:17::i;:::-;:21;;:31::i;:::-;34140:57;34233:4;;-1:-1:-1;34239:8:0;;-1:-1:-1;33934:322:0;;-1:-1:-1;;;33934:322:0:o;34264:421::-;34377:7;;;;34433:24;:7;34445:11;34433;:24::i;:::-;34415:42;-1:-1:-1;34468:12:0;34483:21;:4;34492:11;34483:8;:21::i;:::-;34468:36;-1:-1:-1;34515:16:0;34534:25;:8;34547:11;34534:12;:25::i;:::-;34515:44;-1:-1:-1;34570:23:0;34596:31;34515:44;34596:17;:7;34608:4;34596:11;:17::i;:31::-;34646:7;;;;-1:-1:-1;34672:4:0;;-1:-1:-1;34264:421:0;;-1:-1:-1;;;;;;;34264:421:0:o;39872:589::-;40022:16;;;40036:1;40022:16;;;;;;;;39998:21;;40022:16;;;;;;;;;;-1:-1:-1;40022:16:0;39998:40;;40067:4;40049;40054:1;40049:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40049:23:0;;;:7;;;;;;;;;;:23;;;;40093:15;;:22;;;-1:-1:-1;;;40093:22:0;;;;:15;;;;;:20;;:22;;;;;40049:7;;40093:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40083:4;40088:1;40083:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40083:32:0;;;:7;;;;;;;;;:32;40160:15;;40128:62;;40145:4;;40160:15;40178:11;40128:8;:62::i;:::-;40229:15;;:224;;-1:-1:-1;;;40229:224:0;;-1:-1:-1;;;;;40229:15:0;;;;:66;;:224;;40310:11;;40229:15;;40380:4;;40407;;40427:15;;40229:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8277:471;8335:7;8580:6;8576:47;;-1:-1:-1;8610:1:0;8603:8;;8576:47;8635:9;8647:5;8651:1;8647;:5;:::i;:::-;8635:17;-1:-1:-1;8680:1:0;8671:5;8675:1;8635:17;8671:5;:::i;:::-;:10;8663:56;;;;-1:-1:-1;;;8663:56:0;;9897:2:1;8663:56:0;;;9879:21:1;9936:2;9916:18;;;9909:30;9975:34;9955:18;;;9948:62;-1:-1:-1;;;10026:18:1;;;10019:31;10067:19;;8663:56:0;9695:397:1;47223:126:0;47315:26;;-1:-1:-1;;;;;47315:18:0;;;:26;;;;;47334:6;;47315:26;;;;47334:6;47315:18;:26;;;;;;;;;;;;;;;;;;;40473:577;40618:16;;;40632:1;40618:16;;;;;;;;40594:21;;40618:16;;;;;;;;-1:-1:-1;;40655:15:0;;:22;;;-1:-1:-1;;;40655:22:0;;;;40594:40;;-1:-1:-1;;;;;;40655:15:0;;;;:20;;-1:-1:-1;40655:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40645:4;40650:1;40645:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40645:32:0;;;-1:-1:-1;;;;;40645:32:0;;;;;40706:4;40688;40693:1;40688:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40688:23:0;;;:7;;;;;;;;;:23;40748:15;;;:66;40822:6;40748:15;40891:4;40910:10;40951:24;:15;40971:3;40951:19;:24::i;:::-;40748:238;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41012:30;41029:6;41037:4;41012:30;;;;;;;:::i;:::-;;;;;;;;40523:527;40473:577;:::o;36128:338::-;36174:7;;:12;:32;;;;-1:-1:-1;36190:11:0;;:16;36174:32;:52;;;;-1:-1:-1;36210:13:0;;:16;36174:52;36171:64;;;36128:338::o;36171:64::-;36273:7;;;36255:15;:25;36313:11;;;36291:19;:33;36359:13;;;36335:21;:37;-1:-1:-1;36393:11:0;;;;36415:15;;;;36441:17;36128:338::o;44124:560::-;44227:15;44244:23;44269:12;44283:23;44308:12;44322:16;44342:19;44353:7;44342:10;:19::i;:::-;-1:-1:-1;;;;;44390:15:0;;;;;;:7;:15;;;;;;44226:135;;-1:-1:-1;44226:135:0;;-1:-1:-1;44226:135:0;;-1:-1:-1;44226:135:0;-1:-1:-1;44226:135:0;-1:-1:-1;44226:135:0;-1:-1:-1;44390:28:0;;44410:7;44390:19;:28::i;:::-;-1:-1:-1;;;;;44372:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44447:7;:15;;;;:28;;44467:7;44447:19;:28::i;:::-;-1:-1:-1;;;;;44429:15:0;;;;;;;:7;:15;;;;;;:46;;;;44507:18;;;;;;;:39;;44530:15;44507:22;:39::i;:::-;-1:-1:-1;;;;;44486:18:0;;;;;;:7;:18;;;;;:60;44560:22;44573:8;44560:12;:22::i;:::-;44593:23;44605:4;44611;44593:11;:23::i;:::-;44649:9;-1:-1:-1;;;;;44632:44:0;44641:6;-1:-1:-1;;;;;44632:44:0;;44660:15;44632:44;;;;13002:25:1;;12990:2;12975:18;;12856:177;44632:44:0;;;;;;;;44215:469;;;;;;44124:560;;;:::o;43536:580::-;43637:15;43654:23;43679:12;43693:23;43718:12;43732:16;43752:19;43763:7;43752:10;:19::i;:::-;-1:-1:-1;;;;;43800:15:0;;;;;;:7;:15;;;;;;43636:135;;-1:-1:-1;43636:135:0;;-1:-1:-1;43636:135:0;;-1:-1:-1;43636:135:0;-1:-1:-1;43636:135:0;-1:-1:-1;43636:135:0;-1:-1:-1;43800:28:0;;43636:135;43800:19;:28::i;:::-;-1:-1:-1;;;;;43782:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43860:18;;;;;:7;:18;;;;;:39;;43883:15;43860:22;:39::i;:::-;-1:-1:-1;;;;;43839:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43931:7;:18;;;;:39;;43954:15;43931:22;:39::i;42239:614::-;42344:15;42361:23;42386:12;42400:23;42425:12;42439:16;42459:19;42470:7;42459:10;:19::i;:::-;42343:135;;;;;;;;;;;;42526:64;42540:6;42548:15;42565;42582:7;42526:13;:64::i;:::-;-1:-1:-1;;;;;42619:15:0;;;;;;:7;:15;;;;;;42489:101;;-1:-1:-1;42489:101:0;;-1:-1:-1;42619:28:0;;42639:7;42619:19;:28::i;32608:636::-;32711:15;32728:23;32753:12;32767:23;32792:12;32806:16;32826:19;32837:7;32826:10;:19::i;:::-;-1:-1:-1;;;;;32874:15:0;;;;;;:7;:15;;;;;;32710:135;;-1:-1:-1;32710:135:0;;-1:-1:-1;32710:135:0;;-1:-1:-1;32710:135:0;-1:-1:-1;32710:135:0;-1:-1:-1;32710:135:0;-1:-1:-1;32874:28:0;;32894:7;32874:19;:28::i;:::-;-1:-1:-1;;;;;32856:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32931:7;:15;;;;:28;;32951:7;32931:19;:28::i;35792:154::-;35856:7;35883:55;35922:5;35883:20;35895:7;;35883;:11;;:20;;;;:::i;35954:162::-;36022:7;36049:59;36092:5;36049:24;36061:11;;36049:7;:11;;:24;;;;:::i;35437:343::-;35496:19;35519:10;:8;:10::i;:::-;35496:33;-1:-1:-1;35540:16:0;35559:25;:8;35496:33;35559:12;:25::i;:::-;35636:4;35620:22;;;;:7;:22;;;;;;35540:44;;-1:-1:-1;35620:36:0;;35540:44;35620:26;:36::i;:::-;35611:4;35595:22;;;;:7;:22;;;;;;;;:61;;;;35670:11;:26;;;;;;35667:105;;;35752:4;35736:22;;;;:7;:22;;;;;;:36;;35763:8;35736:26;:36::i;:::-;35727:4;35711:22;;;;:7;:22;;;;;:61;35485:295;;35437:343;:::o;33358:147::-;33436:7;;:17;;33448:4;33436:11;:17::i;:::-;33426:7;:27;33477:10;;:20;;33492:4;33477:14;:20::i;:::-;33464:10;:33;-1:-1:-1;;33358:147:0:o;42863:665::-;42991:7;43000;43028:13;;43043:1;43028:16;43025:67;;;-1:-1:-1;43056:15:0;;-1:-1:-1;43073:15:0;43049:40;;43025:67;43144:13;;43102:18;;43123:35;;:16;:7;43135:3;43123:11;:16::i;:::-;:20;;:35::i;:::-;43102:56;;43169:18;43190:26;43205:10;:8;:10::i;:::-;43190;;:14;:26::i;:::-;43169:47;-1:-1:-1;43245:31:0;:15;43169:47;43245:19;:31::i;:::-;43227:49;-1:-1:-1;43305:31:0;:15;43325:10;43305:19;:31::i;:::-;43388:4;43372:22;;;;:7;:22;;;;;;43287:49;;-1:-1:-1;43372:38:0;;43399:10;43372:26;:38::i;:::-;43363:4;43347:22;;;;:7;:22;;;;;;;:63;;;;43426:43;;-1:-1:-1;;;;;43426:43:0;;;;;;;43458:10;13002:25:1;;12990:2;12975:18;;12856:177;43426:43:0;;;;;;;;43487:15;43504;43480:40;;;;;;42863:665;;;;;;;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;947:388::-;1015:6;1023;1076:2;1064:9;1055:7;1051:23;1047:32;1044:52;;;1092:1;1089;1082:12;1044:52;1131:9;1118:23;1150:31;1175:5;1150:31;:::i;:::-;1200:5;-1:-1:-1;1257:2:1;1242:18;;1229:32;1270:33;1229:32;1270:33;:::i;:::-;1322:7;1312:17;;;947:388;;;;;:::o;1340:456::-;1417:6;1425;1433;1486:2;1474:9;1465:7;1461:23;1457:32;1454:52;;;1502:1;1499;1492:12;1454:52;1541:9;1528:23;1560:31;1585:5;1560:31;:::i;:::-;1610:5;-1:-1:-1;1667:2:1;1652:18;;1639:32;1680:33;1639:32;1680:33;:::i;:::-;1340:456;;1732:7;;-1:-1:-1;;;1786:2:1;1771:18;;;;1758:32;;1340:456::o;1801:315::-;1866:6;1874;1927:2;1915:9;1906:7;1902:23;1898:32;1895:52;;;1943:1;1940;1933:12;1895:52;1982:9;1969:23;2001:31;2026:5;2001:31;:::i;:::-;2051:5;-1:-1:-1;2075:35:1;2106:2;2091:18;;2075:35;:::i;:::-;2065:45;;1801:315;;;;;:::o;2121:::-;2189:6;2197;2250:2;2238:9;2229:7;2225:23;2221:32;2218:52;;;2266:1;2263;2256:12;2218:52;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;2426:2;2411:18;;;;2398:32;;-1:-1:-1;;;2121:315:1:o;2441:180::-;2497:6;2550:2;2538:9;2529:7;2525:23;2521:32;2518:52;;;2566:1;2563;2556:12;2518:52;2589:26;2605:9;2589:26;:::i;2626:180::-;2685:6;2738:2;2726:9;2717:7;2713:23;2709:32;2706:52;;;2754:1;2751;2744:12;2706:52;-1:-1:-1;2777:23:1;;2626:180;-1:-1:-1;2626:180:1:o;2811:248::-;2876:6;2884;2937:2;2925:9;2916:7;2912:23;2908:32;2905:52;;;2953:1;2950;2943:12;2905:52;2989:9;2976:23;2966:33;;3018:35;3049:2;3038:9;3034:18;3018:35;:::i;3064:316::-;3141:6;3149;3157;3210:2;3198:9;3189:7;3185:23;3181:32;3178:52;;;3226:1;3223;3216:12;3178:52;-1:-1:-1;;3249:23:1;;;3319:2;3304:18;;3291:32;;-1:-1:-1;3370:2:1;3355:18;;;3342:32;;3064:316;-1:-1:-1;3064:316:1:o;3385:461::-;3438:3;3476:5;3470:12;3503:6;3498:3;3491:19;3529:4;3558:2;3553:3;3549:12;3542:19;;3595:2;3588:5;3584:14;3616:1;3626:195;3640:6;3637:1;3634:13;3626:195;;;3705:13;;-1:-1:-1;;;;;3701:39:1;3689:52;;3761:12;;;;3796:15;;;;3737:1;3655:9;3626:195;;;-1:-1:-1;3837:3:1;;3385:461;-1:-1:-1;;;;;3385:461:1:o;4710:510::-;4981:6;4970:9;4963:25;5024:3;5019:2;5008:9;5004:18;4997:31;4944:4;5045:57;5097:3;5086:9;5082:19;5074:6;5045:57;:::i;:::-;-1:-1:-1;;;;;5138:32:1;;;;5133:2;5118:18;;5111:60;-1:-1:-1;5202:2:1;5187:18;5180:34;5037:65;4710:510;-1:-1:-1;;4710:510:1:o;5225:597::-;5337:4;5366:2;5395;5384:9;5377:21;5427:6;5421:13;5470:6;5465:2;5454:9;5450:18;5443:34;5495:1;5505:140;5519:6;5516:1;5513:13;5505:140;;;5614:14;;;5610:23;;5604:30;5580:17;;;5599:2;5576:26;5569:66;5534:10;;5505:140;;;5663:6;5660:1;5657:13;5654:91;;;5733:1;5728:2;5719:6;5708:9;5704:22;5700:31;5693:42;5654:91;-1:-1:-1;5806:2:1;5785:15;-1:-1:-1;;5781:29:1;5766:45;;;;5813:2;5762:54;;5225:597;-1:-1:-1;;;5225:597:1:o;10097:356::-;10299:2;10281:21;;;10318:18;;;10311:30;10377:34;10372:2;10357:18;;10350:62;10444:2;10429:18;;10097:356::o;13038:332::-;13245:6;13234:9;13227:25;13288:2;13283;13272:9;13268:18;13261:30;13208:4;13308:56;13360:2;13349:9;13345:18;13337:6;13308:56;:::i;:::-;13300:64;13038:332;-1:-1:-1;;;;13038:332:1:o;13375:582::-;13674:6;13663:9;13656:25;13717:6;13712:2;13701:9;13697:18;13690:34;13760:3;13755:2;13744:9;13740:18;13733:31;13637:4;13781:57;13833:3;13822:9;13818:19;13810:6;13781:57;:::i;:::-;-1:-1:-1;;;;;13874:32:1;;;;13869:2;13854:18;;13847:60;-1:-1:-1;13938:3:1;13923:19;13916:35;13773:65;13375:582;-1:-1:-1;;;13375:582:1:o;14404:128::-;14444:3;14475:1;14471:6;14468:1;14465:13;14462:39;;;14481:18;;:::i;:::-;-1:-1:-1;14517:9:1;;14404:128::o;14537:217::-;14577:1;14603;14593:132;;14647:10;14642:3;14638:20;14635:1;14628:31;14682:4;14679:1;14672:15;14710:4;14707:1;14700:15;14593:132;-1:-1:-1;14739:9:1;;14537:217::o;14759:168::-;14799:7;14865:1;14861;14857:6;14853:14;14850:1;14847:21;14842:1;14835:9;14828:17;14824:45;14821:71;;;14872:18;;:::i;:::-;-1:-1:-1;14912:9:1;;14759:168::o;14932:125::-;14972:4;15000:1;14997;14994:8;14991:34;;;15005:18;;:::i;:::-;-1:-1:-1;15042:9:1;;14932:125::o;15062:380::-;15141:1;15137:12;;;;15184;;;15205:61;;15259:4;15251:6;15247:17;15237:27;;15205:61;15312:2;15304:6;15301:14;15281:18;15278:38;15275:161;;;15358:10;15353:3;15349:20;15346:1;15339:31;15393:4;15390:1;15383:15;15421:4;15418:1;15411:15;15275:161;;15062:380;;;:::o;15447:135::-;15486:3;-1:-1:-1;;15507:17:1;;15504:43;;;15527:18;;:::i;:::-;-1:-1:-1;15574:1:1;15563:13;;15447:135::o;15587:127::-;15648:10;15643:3;15639:20;15636:1;15629:31;15679:4;15676:1;15669:15;15703:4;15700:1;15693:15;15719:127;15780:10;15775:3;15771:20;15768:1;15761:31;15811:4;15808:1;15801:15;15835:4;15832:1;15825:15;15851:127;15912:10;15907:3;15903:20;15900:1;15893:31;15943:4;15940:1;15933:15;15967:4;15964:1;15957:15;16115:131;-1:-1:-1;;;;;16190:31:1;;16180:42;;16170:70;;16236:1;16233;16226:12;16170:70;16115:131;:::o
Swarm Source
ipfs://6927bfdd3219448999409b03fd564cc3bc1b177177d2c1cc9d6589fec9f848b2
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.