ERC-20
Charity
Overview
Max Total Supply
1,000,000,000,000,000 NYXT
Holders
713 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
10,224,540.116070221 NYXTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NyxToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-17 */ /* _______ ___________ __ \ \ ___.__.___ ___ \__ ___/___ | | __ ____ ____ / | < | |\ \/ / | | / _ \| |/ // __ \ / \ / | \___ | > < | |( <_> ) <\ ___/| | \ \____|__ / ____|/__/\_ \ |____| \____/|__|_ \\___ >___| / \/\/ \/ \/ \/ \/ */ pragma solidity 0.8.7; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity 0.8.7; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity 0.8.7; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity 0.8.7; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: token.sol pragma solidity 0.8.7; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract NyxToken is Context, IERC20, Ownable { using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; // Liquidity Pairs mapping(address => bool) public _isPair; // Banned contracts mapping(address => bool) public _isBanned; uint256 private constant MAX = ~uint256(0); uint256 public constant _tTotal = 1e15 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "Nyx Token"; string private constant _symbol = "NYXT"; uint8 private constant _decimals = 9; // Wallets address public _marketingWalletAddress; address public _msWalletAddress; // Multiple Sclerosis wallet address public _vetWalletAddress; // Veterans wallet address public constant _deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public _taxFee = 20; // also is fee for ms & vet funds uint256 public _marketingFee = 10; uint256 public _burnFee = 10; bool public _contractFeesEnabled = true; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool public swapEnabled = true; uint256 public _maxTxAmount = _tTotal; event SetContractFeesEnabled(bool _bool); event SetIsPair(address _address, bool _bool); event SetIsBanned(address _address, bool _bool); event SetSwapEnabled(bool enabled); event SetMarketingWalletAddress(address _address); event WithdrawalETH(uint256 _amount, address to); event WithdrawalToken(address _tokenAddr, uint256 _amount, address to); event ExcludeFromReward(address _address); event IncludeInReward(address _address); event ExcludeFromFee(address _address); event IncludeInFee(address _address); event SetMaxTxPercent(uint256 _amount); event SetMSWalletAddress(address _address); event SetVetWalletAddress(address _address); /* * mainnet params * uniswap router - 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D * dev wallet - 0x18ACa07DB9807c173B11eFF42f9e7f1c2B676c53 * veterans wallet - 0xc11b9a1e6119f6ae93b3eec1d8178e149bf57bad * ms wallet - 0xd93d81650dE684532d6F76F618Bb66621Be17E8c */ constructor( address router, address marketingWallet, address msWallet, address vetWallet ) { _rOwned[owner()] = _rTotal; _setRouter(router); _marketingWalletAddress = marketingWallet; _msWalletAddress = msWallet; _vetWalletAddress = vetWallet; // Exclude owner, dev wallet, liq wallet, and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[_marketingWalletAddress] = true; _isExcludedFromFee[_msWalletAddress] = true; _isExcludedFromFee[_vetWalletAddress] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure 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) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()] - amount ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue ); return true; } function isExcludedFromReward(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external 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 / (currentRate); } function excludeFromReward(address account) external onlyOwner { require(!_isExcluded[account], "Account is not excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); emit ExcludeFromReward(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is already included"); 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; } } emit IncludeInReward(account); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - (tAmount); _rOwned[sender] = _rOwned[sender] - (rAmount); _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount); _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount); _takeMS(tFee); _takeVet(tFee); _takeMarketing(tMarketing); _takeBurn(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit IncludeInFee(account); } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner { _maxTxAmount = (_tTotal * (maxTxPercent)) / (10**2); emit SetMaxTxPercent(maxTxPercent); } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SetSwapEnabled(_enabled); } function setMarketingWalletAddress(address _address) external onlyOwner { require( _address != address(0), "Error: devWallet address cannot be zero address" ); _marketingWalletAddress = _address; emit SetMarketingWalletAddress(_address); } function setMSWalletAddress(address _address) external onlyOwner { require( _address != address(0), "Error: msWallet address cannot be zero address" ); _msWalletAddress = _address; emit SetMSWalletAddress(_address); } function setVetWalletAddress(address _address) external onlyOwner { require( _address != address(0), "Error: vetWallet address cannot be zero address" ); _vetWalletAddress = _address; emit SetVetWalletAddress(_address); } function setContractFeesEnabled(bool _bool) external onlyOwner { _contractFeesEnabled = _bool; emit SetContractFeesEnabled(_bool); } function _setRouter(address _router) private { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair( address(this), _uniswapV2Router.WETH() ); if (uniswapV2Pair == address(0)) uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; setIsPair(uniswapV2Pair, true); } // to receive ETH from uniswapV2Router when swapping receive() external payable {} // static reflection function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal - (rFee); _tFeeTotal = _tFeeTotal + (tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tMarketing, tBurn, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing, tBurn ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateReflectFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount - (3 * tFee) - tMarketing - tBurn; return (tTransferAmount, tFee, tMarketing, tBurn); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount * (currentRate); uint256 rFee = tFee * (currentRate); uint256 rMarketing = tMarketing * (currentRate); uint256 rBurn = tBurn * (currentRate); uint256 rTransferAmount = rAmount - (3 * rFee) - rMarketing - rBurn; return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / (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 - (_rOwned[_excluded[i]]); tSupply = tSupply - (_tOwned[_excluded[i]]); } if (rSupply < _rTotal / (_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing * (currentRate); _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress] + (rMarketing); if (_isExcluded[_marketingWalletAddress]) _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress] + (tMarketing); } function _takeBurn(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn * (currentRate); _rOwned[_deadAddress] = _rOwned[_deadAddress] + (rBurn); if (_isExcluded[_deadAddress]) _tOwned[_deadAddress] = _tOwned[_deadAddress] + (tBurn); } // addition - take MS cut // 2% function _takeMS(uint256 tMS) private { uint256 currentRate = _getRate(); uint256 rMS = tMS * (currentRate); _rOwned[_msWalletAddress] = _rOwned[_msWalletAddress] + (rMS); if (_isExcluded[_msWalletAddress]) _tOwned[_msWalletAddress] = _tOwned[_msWalletAddress] + (tMS); } // addition - take vet cut // 2% function _takeVet(uint256 tVet) private { uint256 currentRate = _getRate(); uint256 rVet = tVet * (currentRate); _rOwned[_vetWalletAddress] = _rOwned[_vetWalletAddress] + (rVet); if (_isExcluded[_vetWalletAddress]) _tOwned[_vetWalletAddress] = _tOwned[_vetWalletAddress] + (tVet); } function calculateReflectFee(uint256 _amount) private view returns (uint256) { return (_amount * (_taxFee)) / (10**3); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return (_amount * (_marketingFee)) / (10**3); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return (_amount * (_burnFee)) / (10**3); } function removeAllFee() private { _taxFee = 0; _burnFee = 0; _marketingFee = 0; } function addAllFee() private { _taxFee = 20; _burnFee = 10; _marketingFee = 10; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); if (!swapEnabled && (_isPair[to] || _isPair[from])) revert("Buying and selling is disabled"); if (_isBanned[from] || _isBanned[to]) { revert("Address is banned"); } // Indicates if fee should be deducted from transfer bool takeFee = true; // Remove fees except for buying and selling if (!_isPair[from] && !_isPair[to]) { takeFee = false; } // Enable fees if contract fees are enabled and to or from is a contract if (_contractFeesEnabled && (from.isContract() || to.isContract())) { takeFee = true; } // If any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee) addAllFee(); // Transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - (rAmount); _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount); _takeMarketing(tMarketing); _takeBurn(tBurn); _takeMS(tFee); _takeVet(tFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - (rAmount); _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount); _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount); _takeMarketing(tMarketing); _takeMS(tFee); _takeBurn(tBurn); _takeVet(tFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender] - (tAmount); _rOwned[sender] = _rOwned[sender] - (rAmount); _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount); _takeMarketing(tMarketing); _takeMS(tFee); _takeBurn(tBurn); _takeVet(tFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setIsPair(address _address, bool value) public onlyOwner { _isPair[_address] = value; emit SetIsPair(_address, value); } function setIsBanned(address _address, bool value) external onlyOwner { require( _address.isContract(), "Error: Can only ban or unban contract addresses" ); _isBanned[_address] = value; emit SetIsBanned(_address, value); } function withdrawalToken( address _tokenAddr, uint256 _amount, address to ) external onlyOwner { IERC20 token = IERC20(_tokenAddr); token.transfer(to, _amount); emit WithdrawalToken(_tokenAddr, _amount, to); } function withdrawalETH(uint256 _amount, address to) external onlyOwner { require(address(this).balance >= _amount); payable(to).transfer(_amount); emit WithdrawalETH(_amount, to); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"msWallet","type":"address"},{"internalType":"address","name":"vetWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetContractFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetIsPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetMSWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetMarketingWalletAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SetMaxTxPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"SetVetWalletAddress","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_tokenAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalToken","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBanned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPair","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":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_msWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_vetWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setContractFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBanned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMSWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setVetWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"pure","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":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526200001c69d3c21bcecceda10000006000196200073b565b6200002a9060001962000715565b6009556014600e55600a600f8190556010556011805460ff191660011790556012805460ff60a01b1916600160a01b17905569d3c21bcecceda10000006013553480156200007757600080fd5b5060405162003413380380620034138339810160408190526200009a91620006b8565b620000a533620001e6565b60095460016000620000bf6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620000e48462000236565b600b80546001600160a01b038581166001600160a01b0319928316178355600c8054868316908416178155600d80548684169416939093178355600080548316815260046020526040808220805460ff19908116600190811790925596548516835281832080548816821790559254841682528082208054871684179055935483168152838120805486168317905530815292832080549094161790925554166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda1000000604051620001d491815260200190565b60405180910390a3505050506200075e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000693565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f957600080fd5b505afa1580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000334919062000693565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156200037b57600080fd5b505afa15801562000390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b6919062000693565b601280546001600160a01b0319166001600160a01b039290921691821790556200057857806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041457600080fd5b505afa15801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000693565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049857600080fd5b505afa158015620004ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d3919062000693565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200051c57600080fd5b505af115801562000531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000557919062000693565b601280546001600160a01b0319166001600160a01b03929092169190911790555b601180546001600160a01b0380841661010002610100600160a81b031990921691909117909155601254620005b091166001620005b4565b5050565b6000546001600160a01b03163314620006135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee910160405180910390a15050565b80516001600160a01b03811681146200068e57600080fd5b919050565b600060208284031215620006a657600080fd5b620006b18262000676565b9392505050565b60008060008060808587031215620006cf57600080fd5b620006da8562000676565b9350620006ea6020860162000676565b9250620006fa6040860162000676565b91506200070a6060860162000676565b905092959194509250565b6000828210156200073657634e487b7160e01b600052601160045260246000fd5b500390565b6000826200075957634e487b7160e01b600052601260045260246000fd5b500690565b612ca5806200076e6000396000f3fe6080604052600436106102975760003560e01c80634fab9edf1161015a578063a457c2d7116100c1578063c93eb8661161007a578063c93eb86614610851578063d543dbeb14610867578063dd62ed3e14610887578063e01af92c146108cd578063ea2f0b37146108ed578063f2fde38b1461090d57600080fd5b8063a457c2d71461077d578063a9059cbb1461079d578063af465a27146107bd578063c069d956146107db578063c0b0fda21461080b578063c14a42391461082157600080fd5b80637d1db4a5116101135780637d1db4a5146106a35780638331277a146106b957806388f82020146106d95780638da5cb5b1461071257806395d89b4114610730578063978e1cc81461075d57600080fd5b80634fab9edf146105d457806352390c02146105f45780635342acb4146106145780636ddd17131461064d57806370a082311461066e578063715018a61461068e57600080fd5b80632d513f36116101fe5780633b124fe7116101b75780633b124fe71461051e5780634144d9e414610534578063437823ec146105545780634549b0391461057457806349bd5a5e146105945780634cb80fd5146105b457600080fd5b80632d513f36146104685780632d83811914610482578063313ce567146104a257806335e17cb9146104be5780633685d419146104de57806339509351146104fe57600080fd5b80631694505e116102505780631694505e146103b057806318160ddd146103d557806322976e0d146103f257806323aa2abb1461040857806323b872dd146104285780632410d8871461044857600080fd5b806306fdde03146102a3578063095ea7b3146102e75780630b85cede1461031757806313114a9d1461033957806313177c2914610358578063143f05dd1461039057600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b50604080518082019091526009815268273cbc102a37b5b2b760b91b60208201525b6040516102de9190612b0a565b60405180910390f35b3480156102f357600080fd5b50610307610302366004612a09565b61092d565b60405190151581526020016102de565b34801561032357600080fd5b50610337610332366004612ac2565b610944565b005b34801561034557600080fd5b50600a545b6040519081526020016102de565b34801561036457600080fd5b50600c54610378906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561039c57600080fd5b506103376103ab366004612948565b610a01565b3480156103bc57600080fd5b506011546103789061010090046001600160a01b031681565b3480156103e157600080fd5b5069d3c21bcecceda100000061034a565b3480156103fe57600080fd5b5061034a600f5481565b34801561041457600080fd5b50600d54610378906001600160a01b031681565b34801561043457600080fd5b50610307610443366004612996565b610aed565b34801561045457600080fd5b506103376104633660046129d2565b610b3f565b34801561047457600080fd5b506011546103079060ff1681565b34801561048e57600080fd5b5061034a61049d366004612aa9565b610bc5565b3480156104ae57600080fd5b50604051600981526020016102de565b3480156104ca57600080fd5b506103376104d9366004612a33565b610c49565b3480156104ea57600080fd5b506103376104f9366004612948565b610d49565b34801561050a57600080fd5b50610307610519366004612a09565b610f37565b34801561052a57600080fd5b5061034a600e5481565b34801561054057600080fd5b50600b54610378906001600160a01b031681565b34801561056057600080fd5b5061033761056f366004612948565b610f6e565b34801561058057600080fd5b5061034a61058f366004612ae5565b610fec565b3480156105a057600080fd5b50601254610378906001600160a01b031681565b3480156105c057600080fd5b506103376105cf366004612948565b611083565b3480156105e057600080fd5b506103376105ef366004612a6f565b611169565b34801561060057600080fd5b5061033761060f366004612948565b6111d4565b34801561062057600080fd5b5061030761062f366004612948565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561065957600080fd5b5060125461030790600160a01b900460ff1681565b34801561067a57600080fd5b5061034a610689366004612948565b611357565b34801561069a57600080fd5b506103376113b6565b3480156106af57600080fd5b5061034a60135481565b3480156106c557600080fd5b506103376106d4366004612948565b6113ec565b3480156106e557600080fd5b506103076106f4366004612948565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561071e57600080fd5b506000546001600160a01b0316610378565b34801561073c57600080fd5b506040805180820190915260048152631396561560e21b60208201526102d1565b34801561076957600080fd5b506103376107783660046129d2565b6114d2565b34801561078957600080fd5b50610307610798366004612a09565b6115c7565b3480156107a957600080fd5b506103076107b8366004612a09565b6115fe565b3480156107c957600080fd5b5061034a69d3c21bcecceda100000081565b3480156107e757600080fd5b506103076107f6366004612948565b60086020526000908152604090205460ff1681565b34801561081757600080fd5b5061034a60105481565b34801561082d57600080fd5b5061030761083c366004612948565b60076020526000908152604090205460ff1681565b34801561085d57600080fd5b5061037861dead81565b34801561087357600080fd5b50610337610882366004612aa9565b61160b565b34801561089357600080fd5b5061034a6108a2366004612963565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108d957600080fd5b506103376108e8366004612a6f565b611688565b3480156108f957600080fd5b50610337610908366004612948565b6116ff565b34801561091957600080fd5b50610337610928366004612948565b61177a565b600061093a338484611815565b5060015b92915050565b6000546001600160a01b031633146109775760405162461bcd60e51b815260040161096e90612b5f565b60405180910390fd5b8147101561098457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156109ba573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f3d273b65e0a76c1b318521112aec8404e53797b2e145e01b7efbd805d8ac9ed491015b60405180910390a15050565b6000546001600160a01b03163314610a2b5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116610a985760405162461bcd60e51b815260206004820152602e60248201527f4572726f723a206d7357616c6c657420616464726573732063616e6e6f74206260448201526d65207a65726f206164647265737360901b606482015260840161096e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c35fb5d9a792cb069764ce99b6689fb0a9595ba56e4f9b1d47da10498b712fb906020015b60405180910390a150565b6000610afa848484611939565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610b35918691610b30908690612bed565b611815565b5060019392505050565b6000546001600160a01b03163314610b695760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91016109f5565b6000600954821115610c2c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161096e565b6000610c36611d0f565b9050610c428184612bac565b9392505050565b6000546001600160a01b03163314610c735760405162461bcd60e51b815260040161096e90612b5f565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb90604401602060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612a8c565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811660009081526005602052604090205460ff16610ddb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161096e565b60005b600654811015610efd57816001600160a01b031660068281548110610e0557610e05612c4b565b6000918252602090912001546001600160a01b03161415610eeb5760068054610e3090600190612bed565b81548110610e4057610e40612c4b565b600091825260209091200154600680546001600160a01b039092169183908110610e6c57610e6c612c4b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610ec457610ec4612c35565b600082815260209020810160001990810180546001600160a01b0319169055019055610efd565b80610ef581612c04565b915050610dde565b506040516001600160a01b03821681527fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90602001610ae2565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161093a918590610b30908690612b94565b6000546001600160a01b03163314610f985760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ae2565b600069d3c21bcecceda10000008311156110485760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161096e565b8161106857600061105884611d32565b5094965061093e95505050505050565b600061107384611d32565b5093965061093e95505050505050565b6000546001600160a01b031633146110ad5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811661111b5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2064657657616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b606482015260840161096e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa312290602001610ae2565b6000546001600160a01b031633146111935760405162461bcd60e51b815260040161096e90612b5f565b6011805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e690602001610ae2565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811660009081526005602052604090205460ff16156112675760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161096e565b6001600160a01b038116600090815260016020526040902054156112c1576001600160a01b0381166000908152600160205260409020546112a790610bc5565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556006805491820181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90920180546001600160a01b0319168417905590519182527f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99101610ae2565b6001600160a01b03811660009081526005602052604081205460ff161561139457506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461093e90610bc5565b6000546001600160a01b031633146113e05760405162461bcd60e51b815260040161096e90612b5f565b6113ea6000611d8d565b565b6000546001600160a01b031633146114165760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0381166114845760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2076657457616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b606482015260840161096e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc88a4cea0aabdb1c7bd6bccb3ad6a36c9e7e815331e800800357eb0aad7329b690602001610ae2565b6000546001600160a01b031633146114fc5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0382163b61156b5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b606482015260840161096e565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a91016109f5565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161093a918590610b30908690612bed565b600061093a338484611939565b6000546001600160a01b031633146116355760405162461bcd60e51b815260040161096e90612b5f565b606461164b8269d3c21bcecceda1000000612bce565b6116559190612bac565b6013556040518181527f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b51890602001610ae2565b6000546001600160a01b031633146116b25760405162461bcd60e51b815260040161096e90612b5f565b60128054821515600160a01b0260ff60a01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d590610ae290831515815260200190565b6000546001600160a01b031633146117295760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ae2565b6000546001600160a01b031633146117a45760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0381166118095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b61181281611d8d565b50565b6001600160a01b0383166118775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096e565b6001600160a01b0382166118d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096e565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661199d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161096e565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161096e565b60008111611a615760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161096e565b6000546001600160a01b03848116911614801590611a8d57506000546001600160a01b03838116911614155b15611af557601354811115611af55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161096e565b601254600160a01b900460ff16158015611b4957506001600160a01b03821660009081526007602052604090205460ff1680611b4957506001600160a01b03831660009081526007602052604090205460ff165b15611b965760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c65640000604482015260640161096e565b6001600160a01b03831660009081526008602052604090205460ff1680611bd557506001600160a01b03821660009081526008602052604090205460ff165b15611c165760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b604482015260640161096e565b6001600160a01b03831660009081526007602052604090205460019060ff16158015611c5b57506001600160a01b03831660009081526007602052604090205460ff16155b15611c64575060005b60115460ff168015611c9257506001600160a01b0384163b151580611c9257506001600160a01b0383163b15155b15611c9b575060015b6001600160a01b03841660009081526004602052604090205460ff1680611cda57506001600160a01b03831660009081526004602052604090205460ff165b15611ce3575060005b8015611cfd57611cfd6014600e55600a6010819055600f55565b611d0984848484611ddd565b50505050565b6000806000611d1c611ef8565b9092509050611d2b8183612bac565b9250505090565b6000806000806000806000806000806000611d4c8c612099565b93509350935093506000806000611d6d8f878787611d68611d0f565b612103565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80611df657611df66000600e8190556010819055600f55565b6001600160a01b03841660009081526005602052604090205460ff168015611e3757506001600160a01b03831660009081526005602052604090205460ff16155b15611e4c57611e47848484612180565b611d09565b6001600160a01b03841660009081526005602052604090205460ff16158015611e8d57506001600160a01b03831660009081526005602052604090205460ff165b15611e9d57611e478484846122d3565b6001600160a01b03841660009081526005602052604090205460ff168015611edd57506001600160a01b03831660009081526005602052604090205460ff165b15611eed57611e4784848461238d565b611d098484846124b4565b600954600090819069d3c21bcecceda1000000825b60065481101561205957826001600060068481548110611f2f57611f2f612c4b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f9a5750816002600060068481548110611f7357611f73612c4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611fb75750506009549369d3c21bcecceda10000009350915050565b6001600060068381548110611fce57611fce612c4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611ffd9084612bed565b9250600260006006838154811061201657612016612c4b565b60009182526020808320909101546001600160a01b031683528201929092526040019020546120459083612bed565b91508061205181612c04565b915050611f0d565b5069d3c21bcecceda10000006009546120729190612bac565b8210156120905750506009549269d3c21bcecceda100000092509050565b90939092509050565b60008060008060006120aa8661256b565b905060006120b787612588565b905060006120c48861259b565b9050600081836120d5866003612bce565b6120df908c612bed565b6120e99190612bed565b6120f39190612bed565b9993985091965094509092505050565b6000808080612112858a612bce565b90506000612120868a612bce565b9050600061212e878a612bce565b9050600061213c888a612bce565b90506000818361214d866003612bce565b6121579088612bed565b6121619190612bed565b61216b9190612bed565b949d949c50929a509298505050505050505050565b600080600080600080600061219488611d32565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546121d39190612bed565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612203908890612bed565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612233908790612b94565b6001600160a01b038a16600090815260016020526040902055612255826125ae565b61225e83612670565b61226781612731565b61227083612845565b61227a8584612906565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122bf91815260200190565b60405180910390a350505050505050505050565b60008060008060008060006122e788611d32565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546123269190612bed565b6001600160a01b03808c16600090815260016020908152604080832094909455918c1681526002909152205461235d908590612b94565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612233908790612b94565b60008060008060008060006123a188611d32565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546123e09190612bed565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612410908890612bed565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612447908590612b94565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612477908790612b94565b6001600160a01b038a1660009081526001602052604090205561249983612670565b6124a283612845565b6124ab826125ae565b61227081612731565b60008060008060008060006124c888611d32565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546125079190612bed565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612537908790612b94565b6001600160a01b038a16600090815260016020526040902055612559826125ae565b61256281612731565b61226783612670565b60006103e8600e548361257e9190612bce565b61093e9190612bac565b60006103e8600f548361257e9190612bce565b60006103e86010548361257e9190612bce565b60006125b8611d0f565b905060006125c68284612bce565b600b546001600160a01b03166000908152600160205260409020549091506125ef908290612b94565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600b546001600160a01b031660009081526002602052604090205461264f908490612b94565b600b546001600160a01b03166000908152600260205260409020555b505050565b600061267a611d0f565b905060006126888284612bce565b600c546001600160a01b03166000908152600160205260409020549091506126b1908290612b94565b600c80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600c546001600160a01b0316600090815260026020526040902054612711908490612b94565b600c546001600160a01b0316600090815260026020526040902055505050565b600061273b611d0f565b905060006127498284612bce565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150612784908290612b94565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561266b5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612813908490612b94565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc55505050565b600061284f611d0f565b9050600061285d8284612bce565b600d546001600160a01b0316600090815260016020526040902054909150612886908290612b94565b600d80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600d546001600160a01b03166000908152600260205260409020546128e6908490612b94565b600d546001600160a01b0316600090815260026020526040902055505050565b816009546129149190612bed565b600955600a54612925908290612b94565b600a555050565b80356001600160a01b038116811461294357600080fd5b919050565b60006020828403121561295a57600080fd5b610c428261292c565b6000806040838503121561297657600080fd5b61297f8361292c565b915061298d6020840161292c565b90509250929050565b6000806000606084860312156129ab57600080fd5b6129b48461292c565b92506129c26020850161292c565b9150604084013590509250925092565b600080604083850312156129e557600080fd5b6129ee8361292c565b915060208301356129fe81612c61565b809150509250929050565b60008060408385031215612a1c57600080fd5b612a258361292c565b946020939093013593505050565b600080600060608486031215612a4857600080fd5b612a518461292c565b925060208401359150612a666040850161292c565b90509250925092565b600060208284031215612a8157600080fd5b8135610c4281612c61565b600060208284031215612a9e57600080fd5b8151610c4281612c61565b600060208284031215612abb57600080fd5b5035919050565b60008060408385031215612ad557600080fd5b8235915061298d6020840161292c565b60008060408385031215612af857600080fd5b8235915060208301356129fe81612c61565b600060208083528351808285015260005b81811015612b3757858101830151858201604001528201612b1b565b81811115612b49576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612ba757612ba7612c1f565b500190565b600082612bc957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612be857612be8612c1f565b500290565b600082821015612bff57612bff612c1f565b500390565b6000600019821415612c1857612c18612c1f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b801515811461181257600080fdfea2646970667358221220cbffd23348f687e4e4411af540de5c6c8e5e0da9ed19d884603621e7cc89899a64736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000018aca07db9807c173b11eff42f9e7f1c2b676c53000000000000000000000000d93d81650de684532d6f76f618bb66621be17e8c000000000000000000000000c11b9a1e6119f6ae93b3eec1d8178e149bf57bad
Deployed Bytecode
0x6080604052600436106102975760003560e01c80634fab9edf1161015a578063a457c2d7116100c1578063c93eb8661161007a578063c93eb86614610851578063d543dbeb14610867578063dd62ed3e14610887578063e01af92c146108cd578063ea2f0b37146108ed578063f2fde38b1461090d57600080fd5b8063a457c2d71461077d578063a9059cbb1461079d578063af465a27146107bd578063c069d956146107db578063c0b0fda21461080b578063c14a42391461082157600080fd5b80637d1db4a5116101135780637d1db4a5146106a35780638331277a146106b957806388f82020146106d95780638da5cb5b1461071257806395d89b4114610730578063978e1cc81461075d57600080fd5b80634fab9edf146105d457806352390c02146105f45780635342acb4146106145780636ddd17131461064d57806370a082311461066e578063715018a61461068e57600080fd5b80632d513f36116101fe5780633b124fe7116101b75780633b124fe71461051e5780634144d9e414610534578063437823ec146105545780634549b0391461057457806349bd5a5e146105945780634cb80fd5146105b457600080fd5b80632d513f36146104685780632d83811914610482578063313ce567146104a257806335e17cb9146104be5780633685d419146104de57806339509351146104fe57600080fd5b80631694505e116102505780631694505e146103b057806318160ddd146103d557806322976e0d146103f257806323aa2abb1461040857806323b872dd146104285780632410d8871461044857600080fd5b806306fdde03146102a3578063095ea7b3146102e75780630b85cede1461031757806313114a9d1461033957806313177c2914610358578063143f05dd1461039057600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b50604080518082019091526009815268273cbc102a37b5b2b760b91b60208201525b6040516102de9190612b0a565b60405180910390f35b3480156102f357600080fd5b50610307610302366004612a09565b61092d565b60405190151581526020016102de565b34801561032357600080fd5b50610337610332366004612ac2565b610944565b005b34801561034557600080fd5b50600a545b6040519081526020016102de565b34801561036457600080fd5b50600c54610378906001600160a01b031681565b6040516001600160a01b0390911681526020016102de565b34801561039c57600080fd5b506103376103ab366004612948565b610a01565b3480156103bc57600080fd5b506011546103789061010090046001600160a01b031681565b3480156103e157600080fd5b5069d3c21bcecceda100000061034a565b3480156103fe57600080fd5b5061034a600f5481565b34801561041457600080fd5b50600d54610378906001600160a01b031681565b34801561043457600080fd5b50610307610443366004612996565b610aed565b34801561045457600080fd5b506103376104633660046129d2565b610b3f565b34801561047457600080fd5b506011546103079060ff1681565b34801561048e57600080fd5b5061034a61049d366004612aa9565b610bc5565b3480156104ae57600080fd5b50604051600981526020016102de565b3480156104ca57600080fd5b506103376104d9366004612a33565b610c49565b3480156104ea57600080fd5b506103376104f9366004612948565b610d49565b34801561050a57600080fd5b50610307610519366004612a09565b610f37565b34801561052a57600080fd5b5061034a600e5481565b34801561054057600080fd5b50600b54610378906001600160a01b031681565b34801561056057600080fd5b5061033761056f366004612948565b610f6e565b34801561058057600080fd5b5061034a61058f366004612ae5565b610fec565b3480156105a057600080fd5b50601254610378906001600160a01b031681565b3480156105c057600080fd5b506103376105cf366004612948565b611083565b3480156105e057600080fd5b506103376105ef366004612a6f565b611169565b34801561060057600080fd5b5061033761060f366004612948565b6111d4565b34801561062057600080fd5b5061030761062f366004612948565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561065957600080fd5b5060125461030790600160a01b900460ff1681565b34801561067a57600080fd5b5061034a610689366004612948565b611357565b34801561069a57600080fd5b506103376113b6565b3480156106af57600080fd5b5061034a60135481565b3480156106c557600080fd5b506103376106d4366004612948565b6113ec565b3480156106e557600080fd5b506103076106f4366004612948565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561071e57600080fd5b506000546001600160a01b0316610378565b34801561073c57600080fd5b506040805180820190915260048152631396561560e21b60208201526102d1565b34801561076957600080fd5b506103376107783660046129d2565b6114d2565b34801561078957600080fd5b50610307610798366004612a09565b6115c7565b3480156107a957600080fd5b506103076107b8366004612a09565b6115fe565b3480156107c957600080fd5b5061034a69d3c21bcecceda100000081565b3480156107e757600080fd5b506103076107f6366004612948565b60086020526000908152604090205460ff1681565b34801561081757600080fd5b5061034a60105481565b34801561082d57600080fd5b5061030761083c366004612948565b60076020526000908152604090205460ff1681565b34801561085d57600080fd5b5061037861dead81565b34801561087357600080fd5b50610337610882366004612aa9565b61160b565b34801561089357600080fd5b5061034a6108a2366004612963565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108d957600080fd5b506103376108e8366004612a6f565b611688565b3480156108f957600080fd5b50610337610908366004612948565b6116ff565b34801561091957600080fd5b50610337610928366004612948565b61177a565b600061093a338484611815565b5060015b92915050565b6000546001600160a01b031633146109775760405162461bcd60e51b815260040161096e90612b5f565b60405180910390fd5b8147101561098457600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156109ba573d6000803e3d6000fd5b50604080518381526001600160a01b03831660208201527f3d273b65e0a76c1b318521112aec8404e53797b2e145e01b7efbd805d8ac9ed491015b60405180910390a15050565b6000546001600160a01b03163314610a2b5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116610a985760405162461bcd60e51b815260206004820152602e60248201527f4572726f723a206d7357616c6c657420616464726573732063616e6e6f74206260448201526d65207a65726f206164647265737360901b606482015260840161096e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c35fb5d9a792cb069764ce99b6689fb0a9595ba56e4f9b1d47da10498b712fb906020015b60405180910390a150565b6000610afa848484611939565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610b35918691610b30908690612bed565b611815565b5060019392505050565b6000546001600160a01b03163314610b695760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f92d4086705a3958aa2cd18830ddaff7bb93db05b6818910190392a55047397ee91016109f5565b6000600954821115610c2c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161096e565b6000610c36611d0f565b9050610c428184612bac565b9392505050565b6000546001600160a01b03163314610c735760405162461bcd60e51b815260040161096e90612b5f565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284919082169063a9059cbb90604401602060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612a8c565b50604080516001600160a01b0386811682526020820186905284168183015290517f03e22ea144aa78f0a88a3bc6036c5f6d5bc2d276affbc5f88c38a9346c5b2eee9181900360600190a150505050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811660009081526005602052604090205460ff16610ddb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161096e565b60005b600654811015610efd57816001600160a01b031660068281548110610e0557610e05612c4b565b6000918252602090912001546001600160a01b03161415610eeb5760068054610e3090600190612bed565b81548110610e4057610e40612c4b565b600091825260209091200154600680546001600160a01b039092169183908110610e6c57610e6c612c4b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610ec457610ec4612c35565b600082815260209020810160001990810180546001600160a01b0319169055019055610efd565b80610ef581612c04565b915050610dde565b506040516001600160a01b03821681527fb31990b399410eeea874c2c81063feb4b5e55f66f46004a8306f10a81f031d3f90602001610ae2565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161093a918590610b30908690612b94565b6000546001600160a01b03163314610f985760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b629101610ae2565b600069d3c21bcecceda10000008311156110485760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161096e565b8161106857600061105884611d32565b5094965061093e95505050505050565b600061107384611d32565b5093965061093e95505050505050565b6000546001600160a01b031633146110ad5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811661111b5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2064657657616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b606482015260840161096e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4a1411139e23115772923254c039e2ecfed9a653a3a8db99706b25b50fa312290602001610ae2565b6000546001600160a01b031633146111935760405162461bcd60e51b815260040161096e90612b5f565b6011805460ff19168215159081179091556040519081527f75b4185b2596596b18e7ded7eec3b258b81f659c5b4097d5023706248fb123e690602001610ae2565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b03811660009081526005602052604090205460ff16156112675760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161096e565b6001600160a01b038116600090815260016020526040902054156112c1576001600160a01b0381166000908152600160205260409020546112a790610bc5565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556006805491820181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90920180546001600160a01b0319168417905590519182527f6f6f36b62c3e3a776fc3052d503097ffb886d7eb4546e768132fef82747e30b99101610ae2565b6001600160a01b03811660009081526005602052604081205460ff161561139457506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461093e90610bc5565b6000546001600160a01b031633146113e05760405162461bcd60e51b815260040161096e90612b5f565b6113ea6000611d8d565b565b6000546001600160a01b031633146114165760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0381166114845760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2076657457616c6c657420616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b606482015260840161096e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc88a4cea0aabdb1c7bd6bccb3ad6a36c9e7e815331e800800357eb0aad7329b690602001610ae2565b6000546001600160a01b031633146114fc5760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0382163b61156b5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a2043616e206f6e6c792062616e206f7220756e62616e20636f6e60448201526e74726163742061646472657373657360881b606482015260840161096e565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f80069036c5381e9b8bf3feeaddce86ce3886eaabaddb4b90926400a11ba6bd1a91016109f5565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161093a918590610b30908690612bed565b600061093a338484611939565b6000546001600160a01b031633146116355760405162461bcd60e51b815260040161096e90612b5f565b606461164b8269d3c21bcecceda1000000612bce565b6116559190612bac565b6013556040518181527f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b51890602001610ae2565b6000546001600160a01b031633146116b25760405162461bcd60e51b815260040161096e90612b5f565b60128054821515600160a01b0260ff60a01b199091161790556040517f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d590610ae290831515815260200190565b6000546001600160a01b031633146117295760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610ae2565b6000546001600160a01b031633146117a45760405162461bcd60e51b815260040161096e90612b5f565b6001600160a01b0381166118095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096e565b61181281611d8d565b50565b6001600160a01b0383166118775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096e565b6001600160a01b0382166118d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096e565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661199d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161096e565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161096e565b60008111611a615760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161096e565b6000546001600160a01b03848116911614801590611a8d57506000546001600160a01b03838116911614155b15611af557601354811115611af55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161096e565b601254600160a01b900460ff16158015611b4957506001600160a01b03821660009081526007602052604090205460ff1680611b4957506001600160a01b03831660009081526007602052604090205460ff165b15611b965760405162461bcd60e51b815260206004820152601e60248201527f427579696e6720616e642073656c6c696e672069732064697361626c65640000604482015260640161096e565b6001600160a01b03831660009081526008602052604090205460ff1680611bd557506001600160a01b03821660009081526008602052604090205460ff165b15611c165760405162461bcd60e51b81526020600482015260116024820152701059191c995cdcc81a5cc818985b9b9959607a1b604482015260640161096e565b6001600160a01b03831660009081526007602052604090205460019060ff16158015611c5b57506001600160a01b03831660009081526007602052604090205460ff16155b15611c64575060005b60115460ff168015611c9257506001600160a01b0384163b151580611c9257506001600160a01b0383163b15155b15611c9b575060015b6001600160a01b03841660009081526004602052604090205460ff1680611cda57506001600160a01b03831660009081526004602052604090205460ff165b15611ce3575060005b8015611cfd57611cfd6014600e55600a6010819055600f55565b611d0984848484611ddd565b50505050565b6000806000611d1c611ef8565b9092509050611d2b8183612bac565b9250505090565b6000806000806000806000806000806000611d4c8c612099565b93509350935093506000806000611d6d8f878787611d68611d0f565b612103565b919f509d509b509599509397509195509350505050919395979092949650565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80611df657611df66000600e8190556010819055600f55565b6001600160a01b03841660009081526005602052604090205460ff168015611e3757506001600160a01b03831660009081526005602052604090205460ff16155b15611e4c57611e47848484612180565b611d09565b6001600160a01b03841660009081526005602052604090205460ff16158015611e8d57506001600160a01b03831660009081526005602052604090205460ff165b15611e9d57611e478484846122d3565b6001600160a01b03841660009081526005602052604090205460ff168015611edd57506001600160a01b03831660009081526005602052604090205460ff165b15611eed57611e4784848461238d565b611d098484846124b4565b600954600090819069d3c21bcecceda1000000825b60065481101561205957826001600060068481548110611f2f57611f2f612c4b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f9a5750816002600060068481548110611f7357611f73612c4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611fb75750506009549369d3c21bcecceda10000009350915050565b6001600060068381548110611fce57611fce612c4b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611ffd9084612bed565b9250600260006006838154811061201657612016612c4b565b60009182526020808320909101546001600160a01b031683528201929092526040019020546120459083612bed565b91508061205181612c04565b915050611f0d565b5069d3c21bcecceda10000006009546120729190612bac565b8210156120905750506009549269d3c21bcecceda100000092509050565b90939092509050565b60008060008060006120aa8661256b565b905060006120b787612588565b905060006120c48861259b565b9050600081836120d5866003612bce565b6120df908c612bed565b6120e99190612bed565b6120f39190612bed565b9993985091965094509092505050565b6000808080612112858a612bce565b90506000612120868a612bce565b9050600061212e878a612bce565b9050600061213c888a612bce565b90506000818361214d866003612bce565b6121579088612bed565b6121619190612bed565b61216b9190612bed565b949d949c50929a509298505050505050505050565b600080600080600080600061219488611d32565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546121d39190612bed565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612203908890612bed565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612233908790612b94565b6001600160a01b038a16600090815260016020526040902055612255826125ae565b61225e83612670565b61226781612731565b61227083612845565b61227a8584612906565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122bf91815260200190565b60405180910390a350505050505050505050565b60008060008060008060006122e788611d32565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546123269190612bed565b6001600160a01b03808c16600090815260016020908152604080832094909455918c1681526002909152205461235d908590612b94565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612233908790612b94565b60008060008060008060006123a188611d32565b965096509650965096509650965087600260008c6001600160a01b03166001600160a01b03168152602001908152602001600020546123e09190612bed565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612410908890612bed565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612447908590612b94565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612477908790612b94565b6001600160a01b038a1660009081526001602052604090205561249983612670565b6124a283612845565b6124ab826125ae565b61227081612731565b60008060008060008060006124c888611d32565b965096509650965096509650965086600160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546125079190612bed565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612537908790612b94565b6001600160a01b038a16600090815260016020526040902055612559826125ae565b61256281612731565b61226783612670565b60006103e8600e548361257e9190612bce565b61093e9190612bac565b60006103e8600f548361257e9190612bce565b60006103e86010548361257e9190612bce565b60006125b8611d0f565b905060006125c68284612bce565b600b546001600160a01b03166000908152600160205260409020549091506125ef908290612b94565b600b80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600b546001600160a01b031660009081526002602052604090205461264f908490612b94565b600b546001600160a01b03166000908152600260205260409020555b505050565b600061267a611d0f565b905060006126888284612bce565b600c546001600160a01b03166000908152600160205260409020549091506126b1908290612b94565b600c80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600c546001600160a01b0316600090815260026020526040902054612711908490612b94565b600c546001600160a01b0316600090815260026020526040902055505050565b600061273b611d0f565b905060006127498284612bce565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54909150612784908290612b94565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff161561266b5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612813908490612b94565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc55505050565b600061284f611d0f565b9050600061285d8284612bce565b600d546001600160a01b0316600090815260016020526040902054909150612886908290612b94565b600d80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561266b57600d546001600160a01b03166000908152600260205260409020546128e6908490612b94565b600d546001600160a01b0316600090815260026020526040902055505050565b816009546129149190612bed565b600955600a54612925908290612b94565b600a555050565b80356001600160a01b038116811461294357600080fd5b919050565b60006020828403121561295a57600080fd5b610c428261292c565b6000806040838503121561297657600080fd5b61297f8361292c565b915061298d6020840161292c565b90509250929050565b6000806000606084860312156129ab57600080fd5b6129b48461292c565b92506129c26020850161292c565b9150604084013590509250925092565b600080604083850312156129e557600080fd5b6129ee8361292c565b915060208301356129fe81612c61565b809150509250929050565b60008060408385031215612a1c57600080fd5b612a258361292c565b946020939093013593505050565b600080600060608486031215612a4857600080fd5b612a518461292c565b925060208401359150612a666040850161292c565b90509250925092565b600060208284031215612a8157600080fd5b8135610c4281612c61565b600060208284031215612a9e57600080fd5b8151610c4281612c61565b600060208284031215612abb57600080fd5b5035919050565b60008060408385031215612ad557600080fd5b8235915061298d6020840161292c565b60008060408385031215612af857600080fd5b8235915060208301356129fe81612c61565b600060208083528351808285015260005b81811015612b3757858101830151858201604001528201612b1b565b81811115612b49576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612ba757612ba7612c1f565b500190565b600082612bc957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612be857612be8612c1f565b500290565b600082821015612bff57612bff612c1f565b500390565b6000600019821415612c1857612c18612c1f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b801515811461181257600080fdfea2646970667358221220cbffd23348f687e4e4411af540de5c6c8e5e0da9ed19d884603621e7cc89899a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000018aca07db9807c173b11eff42f9e7f1c2b676c53000000000000000000000000d93d81650de684532d6f76f618bb66621be17e8c000000000000000000000000c11b9a1e6119f6ae93b3eec1d8178e149bf57bad
-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : marketingWallet (address): 0x18ACa07DB9807c173B11eFF42f9e7f1c2B676c53
Arg [2] : msWallet (address): 0xd93d81650dE684532d6F76F618Bb66621Be17E8c
Arg [3] : vetWallet (address): 0xC11B9A1E6119F6aE93b3Eec1d8178e149bf57BaD
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000018aca07db9807c173b11eff42f9e7f1c2b676c53
Arg [2] : 000000000000000000000000d93d81650de684532d6f76f618bb66621be17e8c
Arg [3] : 000000000000000000000000c11b9a1e6119f6ae93b3eec1d8178e149bf57bad
Deployed Bytecode Sourcemap
23812:22066:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27113:85;;;;;;;;;;-1:-1:-1;27185:5:0;;;;;;;;;;;;-1:-1:-1;;;27185:5:0;;;;27113:85;;;;;;;:::i;:::-;;;;;;;;28110:195;;;;;;;;;;-1:-1:-1;28110:195:0;;;;;:::i;:::-;;:::i;:::-;;;4468:14:1;;4461:22;4443:41;;4431:2;4416:18;28110:195:0;4303:187:1;45662:213:0;;;;;;;;;;-1:-1:-1;45662:213:0;;;;;:::i;:::-;;:::i;:::-;;29459:89;;;;;;;;;;-1:-1:-1;29530:10:0;;29459:89;;;12530:25:1;;;12518:2;12503:18;29459:89:0;12384:177:1;24763:31:0;;;;;;;;;;-1:-1:-1;24763:31:0;;;;-1:-1:-1;;;;;24763:31:0;;;;;;-1:-1:-1;;;;;3311:32:1;;;3293:51;;3281:2;3266:18;24763:31:0;3147:203:1;33115:284:0;;;;;;;;;;-1:-1:-1;33115:284:0;;;;;:::i;:::-;;:::i;25180:41::-;;;;;;;;;;-1:-1:-1;25180:41:0;;;;;;;-1:-1:-1;;;;;25180:41:0;;;27396:97;;;;;;;;;;-1:-1:-1;24450:12:0;27396:97;;25055:33;;;;;;;;;;;;;;;;24830:32;;;;;;;;;;-1:-1:-1;24830:32:0;;;;-1:-1:-1;;;;;24830:32:0;;;28313:352;;;;;;;;;;-1:-1:-1;28313:352:0;;;;;:::i;:::-;;:::i;44924:152::-;;;;;;;;;;-1:-1:-1;44924:152:0;;;;;:::i;:::-;;:::i;25132:39::-;;;;;;;;;;-1:-1:-1;25132:39:0;;;;;;;;30049:321;;;;;;;;;;-1:-1:-1;30049:321:0;;;;;:::i;:::-;;:::i;27303:85::-;;;;;;;;;;-1:-1:-1;27303:85:0;;24692:1;12987:36:1;;12975:2;12960:18;27303:85:0;12845:184:1;45381:273:0;;;;;;;;;;-1:-1:-1;45381:273:0;;;;;:::i;:::-;;:::i;30758:517::-;;;;;;;;;;-1:-1:-1;30758:517:0;;;;;:::i;:::-;;:::i;28673:299::-;;;;;;;;;;-1:-1:-1;28673:299:0;;;;;:::i;:::-;;:::i;24987:27::-;;;;;;;;;;;;;;;;24718:38;;;;;;;;;;-1:-1:-1;24718:38:0;;;;-1:-1:-1;;;;;24718:38:0;;;32148:152;;;;;;;;;;-1:-1:-1;32148:152:0;;;;;:::i;:::-;;:::i;29556:485::-;;;;;;;;;;-1:-1:-1;29556:485:0;;;;;:::i;:::-;;:::i;25228:28::-;;;;;;;;;;-1:-1:-1;25228:28:0;;;;-1:-1:-1;;;;;25228:28:0;;;32801:306;;;;;;;;;;-1:-1:-1;32801:306:0;;;;;:::i;:::-;;:::i;33703:155::-;;;;;;;;;;-1:-1:-1;33703:155:0;;;;;:::i;:::-;;:::i;30378:372::-;;;;;;;;;;-1:-1:-1;30378:372:0;;;;;:::i;:::-;;:::i;39777:126::-;;;;;;;;;;-1:-1:-1;39777:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39868:27:0;39844:4;39868:27;;;:18;:27;;;;;;;;;39777:126;25265:30;;;;;;;;;;-1:-1:-1;25265:30:0;;;;-1:-1:-1;;;25265:30:0;;;;;;27501:198;;;;;;;;;;-1:-1:-1;27501:198:0;;;;;:::i;:::-;;:::i;10956:94::-;;;;;;;;;;;;;:::i;25304:37::-;;;;;;;;;;;;;;;;33407:288;;;;;;;;;;-1:-1:-1;33407:288:0;;;;;:::i;:::-;;:::i;29297:154::-;;;;;;;;;;-1:-1:-1;29297:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;29423:20:0;29394:4;29423:20;;;:11;:20;;;;;;;;;29297:154;10305:87;;;;;;;;;;-1:-1:-1;10351:7:0;10378:6;-1:-1:-1;;;;;10378:6:0;10305:87;;27206:89;;;;;;;;;;-1:-1:-1;27280:7:0;;;;;;;;;;;;-1:-1:-1;;;27280:7:0;;;;27206:89;;45084:289;;;;;;;;;;-1:-1:-1;45084:289:0;;;;;:::i;:::-;;:::i;28980:309::-;;;;;;;;;;-1:-1:-1;28980:309:0;;;;;:::i;:::-;;:::i;27707:201::-;;;;;;;;;;-1:-1:-1;27707:201:0;;;;;:::i;:::-;;:::i;24416:46::-;;;;;;;;;;;;24450:12;24416:46;;24317:41;;;;;;;;;;-1:-1:-1;24317:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25095:28;;;;;;;;;;;;;;;;24244:39;;;;;;;;;;-1:-1:-1;24244:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24888:90;;;;;;;;;;;;24936:42;24888:90;;32465:181;;;;;;;;;;-1:-1:-1;32465:181:0;;;;;:::i;:::-;;:::i;27916:186::-;;;;;;;;;;-1:-1:-1;27916:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;28067:18:0;;;28035:7;28067:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27916:186;32654:139;;;;;;;;;;-1:-1:-1;32654:139:0;;;;;:::i;:::-;;:::i;32308:149::-;;;;;;;;;;-1:-1:-1;32308:149:0;;;;;:::i;:::-;;:::i;11205:192::-;;;;;;;;;;-1:-1:-1;11205:192:0;;;;;:::i;:::-;;:::i;28110:195::-;28214:4;28236:39;9176:10;28259:7;28268:6;28236:8;:39::i;:::-;-1:-1:-1;28293:4:0;28110:195;;;;;:::o;45662:213::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;;;;;;;;;45777:7:::1;45752:21;:32;;45744:41;;;::::0;::::1;;45796:29;::::0;-1:-1:-1;;;;;45796:20:0;::::1;::::0;:29;::::1;;;::::0;45817:7;;45796:29:::1;::::0;;;45817:7;45796:20;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;45841:26:0::1;::::0;;12740:25:1;;;-1:-1:-1;;;;;12801:32:1;;12796:2;12781:18;;12774:60;45841:26:0::1;::::0;12713:18:1;45841:26:0::1;;;;;;;;45662:213:::0;;:::o;33115:284::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33213:22:0;::::1;33191:118;;;::::0;-1:-1:-1;;;33191:118:0;;7518:2:1;33191:118:0::1;::::0;::::1;7500:21:1::0;7557:2;7537:18;;;7530:30;7596:34;7576:18;;;7569:62;-1:-1:-1;;;7647:18:1;;;7640:44;7701:19;;33191:118:0::1;7316:410:1::0;33191:118:0::1;33320:16;:27:::0;;-1:-1:-1;;;;;;33320:27:0::1;-1:-1:-1::0;;;;;33320:27:0;::::1;::::0;;::::1;::::0;;;33363:28:::1;::::0;3293:51:1;;;33363:28:0::1;::::0;3281:2:1;3266:18;33363:28:0::1;;;;;;;;33115:284:::0;:::o;28313:352::-;28447:4;28464:36;28474:6;28482:9;28493:6;28464:9;:36::i;:::-;-1:-1:-1;;;;;28582:19:0;;;;;;:11;:19;;;;;;;;9176:10;28582:33;;;;;;;;;28511:124;;28534:6;;28582:42;;28618:6;;28582:42;:::i;:::-;28511:8;:124::i;:::-;-1:-1:-1;28653:4:0;28313:352;;;;;:::o;44924:152::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45001:17:0;::::1;;::::0;;;:7:::1;:17;::::0;;;;;;;;:25;;-1:-1:-1;;45001:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45042:26;;3523:51:1;;;3590:18;;;3583:50;45042:26:0::1;::::0;3496:18:1;45042:26:0::1;3355:284:1::0;30049:321:0;30143:7;30201;;30190;:18;;30168:110;;;;-1:-1:-1;;;30168:110:0;;6297:2:1;30168:110:0;;;6279:21:1;6336:2;6316:18;;;6309:30;6375:34;6355:18;;;6348:62;-1:-1:-1;;;6426:18:1;;;6419:40;6476:19;;30168:110:0;6095:406:1;30168:110:0;30289:19;30311:10;:8;:10::i;:::-;30289:32;-1:-1:-1;30339:23:0;30289:32;30339:7;:23;:::i;:::-;30332:30;30049:321;-1:-1:-1;;;30049:321:0:o;45381:273::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;45563:27:::1;::::0;-1:-1:-1;;;45563:27:0;;-1:-1:-1;;;;;3836:32:1;;;45563:27:0::1;::::0;::::1;3818:51:1::0;3885:18;;;3878:34;;;45541:10:0;;45563:14;;::::1;::::0;::::1;::::0;3791:18:1;;45563:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;45606:40:0::1;::::0;;-1:-1:-1;;;;;4181:15:1;;;4163:34;;4228:2;4213:18;;4206:34;;;4276:15;;4256:18;;;4249:43;45606:40:0;;::::1;::::0;;;;4113:2:1;45606:40:0;;::::1;45508:146;45381:273:::0;;;:::o;30758:517::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30838:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30830:60;;;::::0;-1:-1:-1;;;30830:60:0;;8631:2:1;30830:60:0::1;::::0;::::1;8613:21:1::0;8670:2;8650:18;;;8643:30;8709:29;8689:18;;;8682:57;8756:18;;30830:60:0::1;8429:351:1::0;30830:60:0::1;30906:9;30901:327;30925:9;:16:::0;30921:20;::::1;30901:327;;;30983:7;-1:-1:-1::0;;;;;30967:23:0::1;:9;30977:1;30967:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30967:12:0::1;:23;30963:254;;;31026:9;31036:16:::0;;:20:::1;::::0;31055:1:::1;::::0;31036:20:::1;:::i;:::-;31026:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;31011:9:::1;:12:::0;;-1:-1:-1;;;;;31026:31:0;;::::1;::::0;31021:1;;31011:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31011:46:0::1;-1:-1:-1::0;;;;;31011:46:0;;::::1;;::::0;;31076:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31115:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31115:28:0::1;::::0;;31162:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31162:15:0;;;;;-1:-1:-1;;;;;;31162:15:0::1;::::0;;;;;31196:5:::1;;30963:254;30943:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30901:327;;;-1:-1:-1::0;31243:24:0::1;::::0;-1:-1:-1;;;;;3311:32:1;;3293:51;;31243:24:0::1;::::0;3281:2:1;3266:18;31243:24:0::1;3147:203:1::0;28673:299:0;9176:10;28790:4;28884:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28884:34:0;;;;;;;;;;28790:4;;28812:130;;28862:7;;28884:47;;28921:10;;28884:47;:::i;32148:152::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32219:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;32219:34:0::1;32249:4;32219:34;::::0;;32269:23;;3293:51:1;;;32269:23:0::1;::::0;3266:18:1;32269:23:0::1;3147:203:1::0;29556:485:0;29676:7;24450:12;29709:7;:18;;29701:62;;;;-1:-1:-1;;;29701:62:0;;9403:2:1;29701:62:0;;;9385:21:1;9442:2;9422:18;;;9415:30;9481:33;9461:18;;;9454:61;9532:18;;29701:62:0;9201:355:1;29701:62:0;29779:17;29774:260;;29814:15;29845:19;29856:7;29845:10;:19::i;:::-;-1:-1:-1;29813:51:0;;-1:-1:-1;29879:14:0;;-1:-1:-1;;;;;;29879:14:0;29774:260;29929:23;29966:19;29977:7;29966:10;:19::i;:::-;-1:-1:-1;29926:59:0;;-1:-1:-1;30000:22:0;;-1:-1:-1;;;;;;30000:22:0;32801:306;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32906:22:0;::::1;32884:119;;;::::0;-1:-1:-1;;;32884:119:0;;11359:2:1;32884:119:0::1;::::0;::::1;11341:21:1::0;11398:2;11378:18;;;11371:30;11437:34;11417:18;;;11410:62;-1:-1:-1;;;11488:18:1;;;11481:45;11543:19;;32884:119:0::1;11157:411:1::0;32884:119:0::1;33014:23;:34:::0;;-1:-1:-1;;;;;;33014:34:0::1;-1:-1:-1::0;;;;;33014:34:0;::::1;::::0;;::::1;::::0;;;33064:35:::1;::::0;3293:51:1;;;33064:35:0::1;::::0;3281:2:1;3266:18;33064:35:0::1;3147:203:1::0;33703:155:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;33777:20:::1;:28:::0;;-1:-1:-1;;33777:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33821:29:::1;::::0;4443:41:1;;;33821:29:0::1;::::0;4431:2:1;4416:18;33821:29:0::1;4303:187:1::0;30378:372:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30461:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30460:21;30452:57;;;::::0;-1:-1:-1;;;30452:57:0;;8279:2:1;30452:57:0::1;::::0;::::1;8261:21:1::0;8318:2;8298:18;;;8291:30;8357:25;8337:18;;;8330:53;8400:18;;30452:57:0::1;8077:347:1::0;30452:57:0::1;-1:-1:-1::0;;;;;30524:16:0;::::1;30543:1;30524:16:::0;;;:7:::1;:16;::::0;;;;;:20;30520:109:::1;;-1:-1:-1::0;;;;;30600:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30580:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30561:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30520:109:::1;-1:-1:-1::0;;;;;30639:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;30639:27:0::1;30662:4;30639:27:::0;;::::1;::::0;;;30677:9:::1;:23:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30677:23:0::1;::::0;::::1;::::0;;30716:26;;3293:51:1;;;30716:26:0::1;::::0;3266:18:1;30716:26:0::1;3147:203:1::0;27501:198:0;-1:-1:-1;;;;;27591:20:0;;27567:7;27591:20;;;:11;:20;;;;;;;;27587:49;;;-1:-1:-1;;;;;;27620:16:0;;;;;:7;:16;;;;;;;27501:198::o;27587:49::-;-1:-1:-1;;;;;27674:16:0;;;;;;:7;:16;;;;;;27654:37;;:19;:37::i;10956:94::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;11021:21:::1;11039:1;11021:9;:21::i;:::-;10956:94::o:0;33407:288::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33506:22:0;::::1;33484:119;;;::::0;-1:-1:-1;;;33484:119:0;;8987:2:1;33484:119:0::1;::::0;::::1;8969:21:1::0;9026:2;9006:18;;;8999:30;9065:34;9045:18;;;9038:62;-1:-1:-1;;;9116:18:1;;;9109:45;9171:19;;33484:119:0::1;8785:411:1::0;33484:119:0::1;33614:17;:28:::0;;-1:-1:-1;;;;;;33614:28:0::1;-1:-1:-1::0;;;;;33614:28:0;::::1;::::0;;::::1;::::0;;;33658:29:::1;::::0;3293:51:1;;;33658:29:0::1;::::0;3281:2:1;3266:18;33658:29:0::1;3147:203:1::0;45084:289:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45187:19:0;::::1;1466:20:::0;45165:118:::1;;;::::0;-1:-1:-1;;;45165:118:0;;10172:2:1;45165:118:0::1;::::0;::::1;10154:21:1::0;10211:2;10191:18;;;10184:30;10250:34;10230:18;;;10223:62;-1:-1:-1;;;10301:18:1;;;10294:45;10356:19;;45165:118:0::1;9970:411:1::0;45165:118:0::1;-1:-1:-1::0;;;;;45294:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:27;;-1:-1:-1;;45294:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45337:28;;3523:51:1;;;3590:18;;;3583:50;45337:28:0::1;::::0;3496:18:1;45337:28:0::1;3355:284:1::0;28980:309:0;9176:10;29102:4;29196:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29196:34:0;;;;;;;;;;29102:4;;29124:135;;29174:7;;29196:52;;29233:15;;29196:52;:::i;27707:201::-;27814:4;27836:42;9176:10;27860:9;27871:6;27836:9;:42::i;32465:181::-;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;32587:5:::1;32558:24;32569:12:::0;24450::::1;32558:24;:::i;:::-;32557:36;;;;:::i;:::-;32542:12;:51:::0;32609:29:::1;::::0;12530:25:1;;;32609:29:0::1;::::0;12518:2:1;12503:18;32609:29:0::1;12384:177:1::0;32654:139:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;32723:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32723:22:0::1;-1:-1:-1::0;;;;32723:22:0;;::::1;;::::0;;32761:24:::1;::::0;::::1;::::0;::::1;::::0;32737:8;4468:14:1;4461:22;4443:41;;4431:2;4416:18;;4303:187;32308:149:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32377:27:0;::::1;32407:5;32377:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32377:35:0::1;::::0;;32428:21;;3293:51:1;;;32428:21:0::1;::::0;3266:18:1;32428:21:0::1;3147:203:1::0;11205:192:0;10351:7;10378:6;-1:-1:-1;;;;;10378:6:0;9176:10;10525:23;10517:68;;;;-1:-1:-1;;;10517:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11294:22:0;::::1;11286:73;;;::::0;-1:-1:-1;;;11286:73:0;;6708:2:1;11286:73:0::1;::::0;::::1;6690:21:1::0;6747:2;6727:18;;;6720:30;6786:34;6766:18;;;6759:62;-1:-1:-1;;;6837:18:1;;;6830:36;6883:19;;11286:73:0::1;6506:402:1::0;11286:73:0::1;11370:19;11380:8;11370:9;:19::i;:::-;11205:192:::0;:::o;39911:371::-;-1:-1:-1;;;;;40038:19:0;;40030:68;;;;-1:-1:-1;;;40030:68:0;;12181:2:1;40030:68:0;;;12163:21:1;12220:2;12200:18;;;12193:30;12259:34;12239:18;;;12232:62;-1:-1:-1;;;12310:18:1;;;12303:34;12354:19;;40030:68:0;11979:400:1;40030:68:0;-1:-1:-1;;;;;40117:21:0;;40109:68;;;;-1:-1:-1;;;40109:68:0;;7115:2:1;40109:68:0;;;7097:21:1;7154:2;7134:18;;;7127:30;7193:34;7173:18;;;7166:62;-1:-1:-1;;;7244:18:1;;;7237:32;7286:19;;40109:68:0;6913:398:1;40109:68:0;-1:-1:-1;;;;;40190:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40242:32;;12530:25:1;;;40242:32:0;;12503:18:1;40242:32:0;;;;;;;39911:371;;;:::o;40290:1542::-;-1:-1:-1;;;;;40412:18:0;;40404:68;;;;-1:-1:-1;;;40404:68:0;;11775:2:1;40404:68:0;;;11757:21:1;11814:2;11794:18;;;11787:30;11853:34;11833:18;;;11826:62;-1:-1:-1;;;11904:18:1;;;11897:35;11949:19;;40404:68:0;11573:401:1;40404:68:0;-1:-1:-1;;;;;40491:16:0;;40483:64;;;;-1:-1:-1;;;40483:64:0;;5534:2:1;40483:64:0;;;5516:21:1;5573:2;5553:18;;;5546:30;5612:34;5592:18;;;5585:62;-1:-1:-1;;;5663:18:1;;;5656:33;5706:19;;40483:64:0;5332:399:1;40483:64:0;40575:1;40566:6;:10;40558:64;;;;-1:-1:-1;;;40558:64:0;;10949:2:1;40558:64:0;;;10931:21:1;10988:2;10968:18;;;10961:30;11027:34;11007:18;;;11000:62;-1:-1:-1;;;11078:18:1;;;11071:39;11127:19;;40558:64:0;10747:405:1;40558:64:0;10351:7;10378:6;-1:-1:-1;;;;;40637:15:0;;;10378:6;;40637:15;;;;:32;;-1:-1:-1;10351:7:0;10378:6;-1:-1:-1;;;;;40656:13:0;;;10378:6;;40656:13;;40637:32;40633:175;;;40720:12;;40710:6;:22;;40684:124;;;;-1:-1:-1;;;40684:124:0;;9763:2:1;40684:124:0;;;9745:21:1;9802:2;9782:18;;;9775:30;9841:34;9821:18;;;9814:62;-1:-1:-1;;;9892:18:1;;;9885:38;9940:19;;40684:124:0;9561:404:1;40684:124:0;40826:11;;-1:-1:-1;;;40826:11:0;;;;40825:12;:46;;;;-1:-1:-1;;;;;;40842:11:0;;;;;;:7;:11;;;;;;;;;:28;;-1:-1:-1;;;;;;40857:13:0;;;;;;:7;:13;;;;;;;;40842:28;40821:105;;;40886:40;;-1:-1:-1;;;40886:40:0;;5938:2:1;40886:40:0;;;5920:21:1;5977:2;5957:18;;;5950:30;6016:32;5996:18;;;5989:60;6066:18;;40886:40:0;5736:354:1;40821:105:0;-1:-1:-1;;;;;40943:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;40962:13:0;;;;;;:9;:13;;;;;;;;40943:32;40939:92;;;40992:27;;-1:-1:-1;;;40992:27:0;;7933:2:1;40992:27:0;;;7915:21:1;7972:2;7952:18;;;7945:30;-1:-1:-1;;;7991:18:1;;;7984:47;8048:18;;40992:27:0;7731:341:1;40939:92:0;-1:-1:-1;;;;;41196:13:0;;41105:12;41196:13;;;:7;:13;;;;;;41120:4;;41196:13;;41195:14;:30;;;;-1:-1:-1;;;;;;41214:11:0;;;;;;:7;:11;;;;;;;;41213:12;41195:30;41191:78;;;-1:-1:-1;41252:5:0;41191:78;41367:20;;;;:62;;;;-1:-1:-1;;;;;;41392:15:0;;1466:20;1514:8;;41392:36;;;-1:-1:-1;;;;;;41413:13:0;;1466:20;1514:8;;41413:15;41363:109;;;-1:-1:-1;41456:4:0;41363:109;-1:-1:-1;;;;;41573:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;41601:22:0;;;;;;:18;:22;;;;;;;;41573:50;41569:98;;;-1:-1:-1;41650:5:0;41569:98;41683:7;41679:24;;;41692:11;39706:2;39696:7;:12;39730:2;39719:8;:13;;;39743;:18;39656:113;41692:11;41783:41;41798:4;41804:2;41808:6;41816:7;41783:14;:41::i;:::-;40393:1439;40290:1542;;;:::o;36701:163::-;36743:7;36764:15;36781;36800:19;:17;:19::i;:::-;36763:56;;-1:-1:-1;36763:56:0;-1:-1:-1;36837:19:0;36763:56;;36837:19;:::i;:::-;36830:26;;;;36701:163;:::o;34707:832::-;34807:7;34829;34851;34873;34895;34917;34939;34989:23;35027:12;35054:18;35087:13;35114:20;35126:7;35114:11;:20::i;:::-;34974:160;;;;;;;;35146:15;35163:23;35188:12;35204:133;35230:7;35252:4;35271:10;35296:5;35316:10;:8;:10::i;:::-;35204:11;:133::i;:::-;35145:192;;-1:-1:-1;35145:192:0;-1:-1:-1;35145:192:0;-1:-1:-1;35441:15:0;;-1:-1:-1;35471:4:0;;-1:-1:-1;35490:10:0;;-1:-1:-1;35515:5:0;-1:-1:-1;;;;34707:832:0;;;;;;;;;:::o;11405:173::-;11461:16;11480:6;;-1:-1:-1;;;;;11497:17:0;;;-1:-1:-1;;;;;;11497:17:0;;;;;;11530:40;;11480:6;;;;;;;11530:40;;11461:16;11530:40;11450:128;11405:173;:::o;41913:666::-;42069:7;42064:28;;42078:14;39588:1;39578:7;:11;;;39600:8;:12;;;39623:13;:17;39535:113;42078:14;-1:-1:-1;;;;;42109:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42133:22:0;;;;;;:11;:22;;;;;;;;42132:23;42109:46;42105:467;;;42172:48;42194:6;42202:9;42213:6;42172:21;:48::i;:::-;42105:467;;;-1:-1:-1;;;;;42243:19:0;;;;;;:11;:19;;;;;;;;42242:20;:46;;;;-1:-1:-1;;;;;;42266:22:0;;;;;;:11;:22;;;;;;;;42242:46;42238:334;;;42305:46;42325:6;42333:9;42344:6;42305:19;:46::i;42238:334::-;-1:-1:-1;;;;;42373:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42396:22:0;;;;;;:11;:22;;;;;;;;42373:45;42369:203;;;42435:48;42457:6;42465:9;42476:6;42435:21;:48::i;42369:203::-;42516:44;42534:6;42542:9;42553:6;42516:17;:44::i;36872:602::-;36970:7;;36923;;;;24450:12;36923:7;37024:336;37048:9;:16;37044:20;;37024:336;;;37132:7;37108;:21;37116:9;37126:1;37116:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37116:12:0;37108:21;;;;;;;;;;;;;:31;;:83;;;37184:7;37160;:21;37168:9;37178:1;37168:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37168:12:0;37160:21;;;;;;;;;;;;;:31;37108:83;37086:146;;;-1:-1:-1;;37215:7:0;;;24450:12;;-1:-1:-1;36872:602:0;-1:-1:-1;;36872:602:0:o;37086:146::-;37268:7;:21;37276:9;37286:1;37276:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37276:12:0;37268:21;;;;;;;;;;;;;37257:33;;:7;:33;:::i;:::-;37247:43;;37326:7;:21;37334:9;37344:1;37334:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37334:12:0;37326:21;;;;;;;;;;;;;37315:33;;:7;:33;:::i;:::-;37305:43;-1:-1:-1;37066:3:0;;;;:::i;:::-;;;;37024:336;;;;24450:12;37384:7;;:19;;;;:::i;:::-;37374:7;:29;37370:60;;;-1:-1:-1;;37413:7:0;;;24450:12;;-1:-1:-1;36872:602:0;-1:-1:-1;36872:602:0:o;37370:60::-;37449:7;;37458;;-1:-1:-1;36872:602:0;-1:-1:-1;36872:602:0:o;35547:505::-;35648:7;35670;35692;35714;35749:12;35764:28;35784:7;35764:19;:28::i;:::-;35749:43;;35803:18;35824:30;35846:7;35824:21;:30::i;:::-;35803:51;;35865:13;35881:25;35898:7;35881:16;:25::i;:::-;35865:41;-1:-1:-1;35917:23:0;35865:41;35966:10;35954:8;35958:4;35954:1;:8;:::i;:::-;35943:20;;:7;:20;:::i;:::-;:33;;;;:::i;:::-;:41;;;;:::i;:::-;35917:67;36020:4;;-1:-1:-1;36026:10:0;;-1:-1:-1;36026:10:0;-1:-1:-1;35547:505:0;;-1:-1:-1;;;35547:505:0:o;36060:633::-;36283:7;;;;36380:23;36391:11;36380:7;:23;:::i;:::-;36362:41;-1:-1:-1;36414:12:0;36429:20;36437:11;36429:4;:20;:::i;:::-;36414:35;-1:-1:-1;36460:18:0;36481:26;36495:11;36481:10;:26;:::i;:::-;36460:47;-1:-1:-1;36518:13:0;36534:21;36543:11;36534:5;:21;:::i;:::-;36518:37;-1:-1:-1;36568:23:0;36518:37;36617:10;36605:8;36609:4;36605:1;:8;:::i;:::-;36594:20;;:7;:20;:::i;:::-;:33;;;;:::i;:::-;:41;;;;:::i;:::-;36654:7;;;;-1:-1:-1;36680:4:0;;-1:-1:-1;36060:633:0;;-1:-1:-1;;;;;;;;;36060:633:0:o;44129:787::-;44280:15;44310:23;44348:12;44375:23;44413:12;44440:18;44473:13;44500:19;44511:7;44500:10;:19::i;:::-;44265:254;;;;;;;;;;;;;;44567:7;44548;:15;44556:6;-1:-1:-1;;;;;44548:15:0;-1:-1:-1;;;;;44548:15:0;;;;;;;;;;;;;:27;;;;:::i;:::-;-1:-1:-1;;;;;44530:15:0;;;;;;:7;:15;;;;;;;;:45;;;;44604:7;:15;;;;:27;;44623:7;;44604:27;:::i;:::-;-1:-1:-1;;;;;44586:15:0;;;;;;;:7;:15;;;;;;:45;;;;44663:18;;;;;;;:38;;44685:15;;44663:38;:::i;:::-;-1:-1:-1;;;;;44642:18:0;;;;;;:7;:18;;;;;:59;44712:26;44727:10;44712:14;:26::i;:::-;44749:13;44757:4;44749:7;:13::i;:::-;44773:16;44783:5;44773:9;:16::i;:::-;44800:14;44809:4;44800:8;:14::i;:::-;44825:23;44837:4;44843;44825:11;:23::i;:::-;44881:9;-1:-1:-1;;;;;44864:44:0;44873:6;-1:-1:-1;;;;;44864:44:0;;44892:15;44864:44;;;;12530:25:1;;12518:2;12503:18;;12384:177;44864:44:0;;;;;;;;44254:662;;;;;;;44129:787;;;:::o;43322:799::-;43471:15;43501:23;43539:12;43566:23;43604:12;43631:18;43664:13;43691:19;43702:7;43691:10;:19::i;:::-;43456:254;;;;;;;;;;;;;;43758:7;43739;:15;43747:6;-1:-1:-1;;;;;43739:15:0;-1:-1:-1;;;;;43739:15:0;;;;;;;;;;;;;:27;;;;:::i;:::-;-1:-1:-1;;;;;43721:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;43798:18;;;;;:7;:18;;;;;:38;;43820:15;;43798:38;:::i;:::-;-1:-1:-1;;;;;43777:18:0;;;;;;:7;:18;;;;;;;;:59;;;;43868:7;:18;;;;:38;;43890:15;;43868:38;:::i;31283:857::-;31434:15;31464:23;31502:12;31529:23;31567:12;31594:18;31627:13;31654:19;31665:7;31654:10;:19::i;:::-;31419:254;;;;;;;;;;;;;;31721:7;31702;:15;31710:6;-1:-1:-1;;;;;31702:15:0;-1:-1:-1;;;;;31702:15:0;;;;;;;;;;;;;:27;;;;:::i;:::-;-1:-1:-1;;;;;31684:15:0;;;;;;:7;:15;;;;;;;;:45;;;;31758:7;:15;;;;:27;;31777:7;;31758:27;:::i;:::-;-1:-1:-1;;;;;31740:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;31817:18;;;;;:7;:18;;;;;:38;;31839:15;;31817:38;:::i;:::-;-1:-1:-1;;;;;31796:18:0;;;;;;:7;:18;;;;;;;;:59;;;;31887:7;:18;;;;:38;;31909:15;;31887:38;:::i;:::-;-1:-1:-1;;;;;31866:18:0;;;;;;:7;:18;;;;;:59;31936:13;31944:4;31936:7;:13::i;:::-;31960:14;31969:4;31960:8;:14::i;:::-;31985:26;32000:10;31985:14;:26::i;:::-;32022:16;32032:5;32022:9;:16::i;42587:727::-;42734:15;42764:23;42802:12;42829:23;42867:12;42894:18;42927:13;42954:19;42965:7;42954:10;:19::i;:::-;42719:254;;;;;;;;;;;;;;43021:7;43002;:15;43010:6;-1:-1:-1;;;;;43002:15:0;-1:-1:-1;;;;;43002:15:0;;;;;;;;;;;;;:27;;;;:::i;:::-;-1:-1:-1;;;;;42984:15:0;;;;;;;:7;:15;;;;;;:45;;;;43061:18;;;;;;;:38;;43083:15;;43061:38;:::i;:::-;-1:-1:-1;;;;;43040:18:0;;;;;;:7;:18;;;;;:59;43110:26;43125:10;43110:14;:26::i;:::-;43147:16;43157:5;43147:9;:16::i;:::-;43174:13;43182:4;43174:7;:13::i;39039:166::-;39134:7;39191:5;39178:7;;39167;:19;;;;:::i;:::-;39166:31;;;;:::i;39213:174::-;39310:7;39373:5;39354:13;;39343:7;:25;;;;:::i;39395:132::-;39460:7;39513:5;39499:8;;39488:7;:20;;;;:::i;37482:462::-;37545:19;37567:10;:8;:10::i;:::-;37545:32;-1:-1:-1;37588:18:0;37609:26;37545:32;37609:10;:26;:::i;:::-;37702:23;;-1:-1:-1;;;;;37702:23:0;37694:32;;;;:7;:32;;;;;;37588:47;;-1:-1:-1;37694:60:0;;37588:47;;37694:60;:::i;:::-;37654:23;;;-1:-1:-1;;;;;37654:23:0;;;37646:32;;;;:7;:32;;;;;;;;:108;;;;37781:23;;;;;37769:36;;:11;:36;;;;;;;37765:171;;;37880:23;;-1:-1:-1;;;;;37880:23:0;37872:32;;;;:7;:32;;;;;;:64;;37925:10;;37872:64;:::i;:::-;37828:23;;-1:-1:-1;;;;;37828:23:0;37820:32;;;;:7;:32;;;;;:116;37765:171;37534:410;;37482:462;:::o;38319:325::-;38368:19;38390:10;:8;:10::i;:::-;38368:32;-1:-1:-1;38411:11:0;38425:19;38368:32;38425:3;:19;:::i;:::-;38491:16;;-1:-1:-1;;;;;38491:16:0;38483:25;;;;:7;:25;;;;;;38411:33;;-1:-1:-1;38483:33:0;;38411;;38483;:::i;:::-;38463:16;;;-1:-1:-1;;;;;38463:16:0;;;38455:25;;;;:7;:25;;;;;;;;:61;;;;38543:16;;;;;38531:29;;:11;:29;;;;;;;38527:109;;;38611:16;;-1:-1:-1;;;;;38611:16:0;38603:25;;;;:7;:25;;;;;;:33;;38632:3;;38603:33;:::i;:::-;38583:16;;-1:-1:-1;;;;;38583:16:0;38575:25;;;;:7;:25;;;;;:61;38357:287;;38319:325;:::o;37952:317::-;38005:19;38027:10;:8;:10::i;:::-;38005:32;-1:-1:-1;38048:13:0;38064:21;38005:32;38064:5;:21;:::i;:::-;24936:42;38120:21;;:7;:21;;;;38048:37;;-1:-1:-1;38120:31:0;;38048:37;;38120:31;:::i;:::-;24936:42;38096:21;;;:55;38166:11;38096:21;38166:25;;;;;38162:99;;;24936:42;38230:21;;:7;:21;;;;:31;;38255:5;;38230:31;:::i;:::-;24936:42;38206:21;;:7;:21;;;:55;37994:275;;37952:317;:::o;38695:336::-;38746:19;38768:10;:8;:10::i;:::-;38746:32;-1:-1:-1;38789:12:0;38804:20;38746:32;38804:4;:20;:::i;:::-;38872:17;;-1:-1:-1;;;;;38872:17:0;38864:26;;;;:7;:26;;;;;;38789:35;;-1:-1:-1;38864:35:0;;38789;;38864;:::i;:::-;38843:17;;;-1:-1:-1;;;;;38843:17:0;;;38835:26;;;;:7;:26;;;;;;;;:64;;;;38926:17;;;;;38914:30;;:11;:30;;;;;;;38910:113;;;38996:17;;-1:-1:-1;;;;;38996:17:0;38988:26;;;;:7;:26;;;;;;:35;;39018:4;;38988:35;:::i;:::-;38967:17;;-1:-1:-1;;;;;38967:17:0;38959:26;;;;:7;:26;;;;;:64;38735:296;;38695:336;:::o;34554:145::-;34643:4;34632:7;;:16;;;;:::i;:::-;34622:7;:26;34672:10;;:19;;34686:4;;34672:19;:::i;:::-;34659:10;:32;-1:-1:-1;;34554:145:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1146:29;1165:9;1146:29;:::i;:::-;1136:39;;1225:2;1214:9;1210:18;1197:32;1238:28;1260:5;1238:28;:::i;:::-;1285:5;1275:15;;;981:315;;;;;:::o;1301:254::-;1369:6;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;1545:2;1530:18;;;;1517:32;;-1:-1:-1;;;1301:254:1:o;1560:328::-;1637:6;1645;1653;1706:2;1694:9;1685:7;1681:23;1677:32;1674:52;;;1722:1;1719;1712:12;1674:52;1745:29;1764:9;1745:29;:::i;:::-;1735:39;;1821:2;1810:9;1806:18;1793:32;1783:42;;1844:38;1878:2;1867:9;1863:18;1844:38;:::i;:::-;1834:48;;1560:328;;;;;:::o;1893:241::-;1949:6;2002:2;1990:9;1981:7;1977:23;1973:32;1970:52;;;2018:1;2015;2008:12;1970:52;2057:9;2044:23;2076:28;2098:5;2076:28;:::i;2139:245::-;2206:6;2259:2;2247:9;2238:7;2234:23;2230:32;2227:52;;;2275:1;2272;2265:12;2227:52;2307:9;2301:16;2326:28;2348:5;2326:28;:::i;2389:180::-;2448:6;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;-1:-1:-1;2540:23:1;;2389:180;-1:-1:-1;2389:180:1:o;2574:254::-;2642:6;2650;2703:2;2691:9;2682:7;2678:23;2674:32;2671:52;;;2719:1;2716;2709:12;2671:52;2755:9;2742:23;2732:33;;2784:38;2818:2;2807:9;2803:18;2784:38;:::i;2833:309::-;2898:6;2906;2959:2;2947:9;2938:7;2934:23;2930:32;2927:52;;;2975:1;2972;2965:12;2927:52;3011:9;2998:23;2988:33;;3071:2;3060:9;3056:18;3043:32;3084:28;3106:5;3084:28;:::i;4730:597::-;4842:4;4871:2;4900;4889:9;4882:21;4932:6;4926:13;4975:6;4970:2;4959:9;4955:18;4948:34;5000:1;5010:140;5024:6;5021:1;5018:13;5010:140;;;5119:14;;;5115:23;;5109:30;5085:17;;;5104:2;5081:26;5074:66;5039:10;;5010:140;;;5168:6;5165:1;5162:13;5159:91;;;5238:1;5233:2;5224:6;5213:9;5209:22;5205:31;5198:42;5159:91;-1:-1:-1;5311:2:1;5290:15;-1:-1:-1;;5286:29:1;5271:45;;;;5318:2;5267:54;;4730:597;-1:-1:-1;;;4730:597:1:o;10386:356::-;10588:2;10570:21;;;10607:18;;;10600:30;10666:34;10661:2;10646:18;;10639:62;10733:2;10718:18;;10386:356::o;13034:128::-;13074:3;13105:1;13101:6;13098:1;13095:13;13092:39;;;13111:18;;:::i;:::-;-1:-1:-1;13147:9:1;;13034:128::o;13167:217::-;13207:1;13233;13223:132;;13277:10;13272:3;13268:20;13265:1;13258:31;13312:4;13309:1;13302:15;13340:4;13337:1;13330:15;13223:132;-1:-1:-1;13369:9:1;;13167:217::o;13389:168::-;13429:7;13495:1;13491;13487:6;13483:14;13480:1;13477:21;13472:1;13465:9;13458:17;13454:45;13451:71;;;13502:18;;:::i;:::-;-1:-1:-1;13542:9:1;;13389:168::o;13562:125::-;13602:4;13630:1;13627;13624:8;13621:34;;;13635:18;;:::i;:::-;-1:-1:-1;13672:9:1;;13562:125::o;13692:135::-;13731:3;-1:-1:-1;;13752:17:1;;13749:43;;;13772:18;;:::i;:::-;-1:-1:-1;13819:1:1;13808:13;;13692:135::o;13832:127::-;13893:10;13888:3;13884:20;13881:1;13874:31;13924:4;13921:1;13914:15;13948:4;13945:1;13938:15;13964:127;14025:10;14020:3;14016:20;14013:1;14006:31;14056:4;14053:1;14046:15;14080:4;14077:1;14070:15;14096:127;14157:10;14152:3;14148:20;14145:1;14138:31;14188:4;14185:1;14178:15;14212:4;14209:1;14202:15;14228:118;14314:5;14307:13;14300:21;14293:5;14290:32;14280:60;;14336:1;14333;14326:12
Swarm Source
ipfs://cbffd23348f687e4e4411af540de5c6c8e5e0da9ed19d884603621e7cc89899a
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.