Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 wAIge
Holders
36
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
wAIge
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-26 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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://consensys.net/diligence/blog/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 functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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 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 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 wAIge is Context, IERC20, Ownable { using Address for address; //Definition of Wallets for Marketing or team. address payable public devOpsWallet = payable(0xC6aC0b2A94A92C12A7129E93319707ff9122E565); address payable public stakingWallet = payable(0xdfB2270f178f5C614806A60722BdCd1Ac6072C0f); //Dead Wallet for SAFU Contract address public constant deadWallet = 0x000000000000000000000000000000000000dEaD; //Mapping section for better tracking. mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFees; //Loging and Event Information for better troubleshooting. event Log(string, uint256); event AuditLog(string, address); event ExcludeStatus(address, bool); event UpdateDevOpsWallet(address); event UpdateStakingWallet(address); event UpdateTokensToSwap(uint256); event UpdateBuyFee(uint256); event UpdateSellFee(uint256); event TransferStatus(bool); event UpdateDistribution(uint256, uint256); event RecoveredETH(uint256); event RecoveredTokens(uint256); event TradingStarted(bool); event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapTokensForETH(uint256 amountIn, address[] path); //Supply Definition. uint256 private _tTotal = 1_000_000_000 ether; //Token Definition. string public constant name = "wAIge"; string public constant symbol = "wAIge"; uint8 public constant decimals = 18; //Taxes Definition. uint public buyFee = 2; uint public buyReflectionFee = 3; uint256 public sellFee = 3; uint public sellReflectionFee = 4; uint public totalReflectionsCollected; uint public reflectionCollected; uint256 public devOpsTokensCollected = 0; uint256 public totalDevOpsTokensCollected = 0; uint256 public minimumTokensBeforeSwap = 10_000 ether; //Trading Controls added for SAFU Requirements bool public tradingEnabled; //Oracle Price Update, Manual Process. uint256 public swapOutput = 0; //Router and Pair Configuration. IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address private immutable WETH; //Tracking of Automatic Swap vs Manual Swap. bool public inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _tOwned[_msgSender()] = _tTotal; address currentRouter; //Adding Variables for all the routers for easier deployment for our customers. if (block.chainid == 56) { currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router } else if (block.chainid == 97) { currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet } else if (block.chainid == 43114) { currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet } else if (block.chainid == 137) { currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten } else if (block.chainid == 6066) { currentRouter = 0x4169Db906fcBFB8b12DbD20d98850Aee05B7D889; //Tres Leches Chain } else if (block.chainid == 250) { currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM } else if (block.chainid == 42161) { currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi } else if ( block.chainid == 1 || block.chainid == 4 || block.chainid == 5 ) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet } else { revert("You're not Blade"); } //End of Router Variables. //Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter); WETH = _uniswapV2Router.WETH(); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), WETH); uniswapV2Router = _uniswapV2Router; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } //Readable Functions. function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } //ERC 20 Standard Transfer Functions function transfer( address recipient, uint256 amount ) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } //ERC 20 Standard Allowance Function function allowance( address _owner, address spender ) public view override returns (uint256) { return _allowances[_owner][spender]; } //ERC 20 Standard Approve Function function approve( address spender, uint256 amount ) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } //ERC 20 Standard Transfer From function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { uint currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), currentAllowance - amount); return true; } //ERC 20 Standard increase Allowance function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } //ERC 20 Standard decrease Allowance function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue ); return true; } //Approve Function 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); } //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer. 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"); require( _tOwned[from] >= amount, "ERC20: transfer amount exceeds balance" ); //only done for SAFU Contracts. require( tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!" ); //Adding logic for automatic swap. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; uint fee = 0; uint reflectionFee = 0; //if any account belongs to _isExcludedFromFees account then remove the fee if ( !inSwapAndLiquify && from != uniswapV2Pair && overMinimumTokenBalance && swapAndLiquifyEnabled ) { swapAndLiquify(); } if (to == uniswapV2Pair && !_isExcludedFromFees[from]) { fee = (sellFee * amount) / 100; reflectionFee = (fee * sellReflectionFee) / sellFee; } if (from == uniswapV2Pair && !_isExcludedFromFees[to]) { fee = (buyFee * amount) / 100; reflectionFee = (fee * buyReflectionFee) / buyFee; } amount -= fee; if (fee > 0) { _tokenTransfer(from, address(this), fee); devOpsTokensCollected += fee; totalDevOpsTokensCollected += fee; if (reflectionFee > 0) { totalReflectionsCollected += reflectionFee; reflectionCollected += reflectionFee; } } _tokenTransfer(from, to, amount); } //Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual. //Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred. function swapAndLiquify() public lockTheSwap { uint256 totalTokens = balanceOf(address(this)); // sendTokens to Staking Wallet if (reflectionCollected > 0 && totalTokens >= reflectionCollected) { totalTokens -= reflectionCollected; _tokenTransfer(address(this), stakingWallet, reflectionCollected); reflectionCollected = 0; } if (totalTokens == 0) return; // send ETH to devops wallet swapTokensForEth(totalTokens); uint ethBalance = address(this).balance; transferToAddressETH(devOpsWallet, ethBalance); devOpsTokensCollected = 0; } //swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose. function _tokenTransfer( address sender, address recipient, uint256 amount ) private { _tOwned[sender] -= amount; _tOwned[recipient] += amount; emit Transfer(sender, recipient, amount); } function isExcludedFromFees(address account) external view returns (bool) { return _isExcludedFromFees[account]; } //exclude wallets from fees, this is needed for launch or other contracts. function excludeFromFees(address account) external onlyOwner { _isExcludedFromFees[account] = true; emit ExcludeStatus(account, true); } //include wallet back in fees. function includeInFees(address account) external onlyOwner { _isExcludedFromFees[account] = false; emit ExcludeStatus(account, false); } //Automatic Swap Configuration. function setTokensToSwap( uint256 _minimumTokensBeforeSwap ) external onlyOwner { require( _minimumTokensBeforeSwap >= 100 ether, "You need to enter more than 100 tokens." ); minimumTokensBeforeSwap = _minimumTokensBeforeSwap; emit UpdateTokensToSwap(_minimumTokensBeforeSwap); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { require(swapAndLiquifyEnabled != _enabled, "Value already set"); swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //set a new marketing wallet. function setDevOpsWallet(address _devOpsWallet) external onlyOwner { require(_devOpsWallet != address(0), "setdevOpsWallet: ZERO"); devOpsWallet = payable(_devOpsWallet); emit UpdateDevOpsWallet(_devOpsWallet); } //set a new team wallet. function setStakingWallet(address _stakingWallet) external onlyOwner { require(_stakingWallet != address(0), "setstakingWallet: ZERO"); stakingWallet = payable(_stakingWallet); emit UpdateStakingWallet(_stakingWallet); } function setBuyFee( uint256 _buyFee, uint _reflectionAmount ) external onlyOwner { require(_buyFee <= 10, "Buy Fee cannot be more than 10%"); require(_reflectionAmount <= _buyFee, "Reflection too high"); buyFee = _buyFee; buyReflectionFee = _reflectionAmount; emit UpdateBuyFee(_buyFee); } function setSellFee( uint256 _sellFee, uint _reflectionAmount ) external onlyOwner { require(_sellFee <= 10, "Sell Fee cannot be more than 10%"); require(_reflectionAmount <= _sellFee, "Reflection too high"); sellFee = _sellFee; sellReflectionFee = _reflectionAmount; emit UpdateSellFee(_sellFee); } function transferToAddressETH( address payable recipient, uint256 amount ) private { if (amount == 0) return; (bool succ, ) = recipient.call{value: amount}(""); emit TransferStatus(succ); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} /////---fallback--//// //This cannot be removed as is a fallback to the swapAndLiquify event SwapETHForTokens(uint256 amountIn, address[] path); function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = WETH; path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }( swapOutput, // accept any amount of Tokens path, deadWallet, // Burn address block.timestamp + 300 ); emit SwapETHForTokens(amount, path); } // Withdraw ETH that's potentially stuck in the Contract function recoverETHfromContract() external onlyOwner { uint ethBalance = address(this).balance; (bool succ, ) = payable(devOpsWallet).call{value: ethBalance}(""); emit TransferStatus(succ); emit RecoveredETH(ethBalance); } // Withdraw ERC20 tokens that are potentially stuck in Contract function recoverTokensFromContract( address _tokenAddress, uint256 _amount ) external onlyOwner { require( _tokenAddress != address(this), "Owner can't claim contract's balance of its own tokens" ); bool succ = IERC20(_tokenAddress).transfer(devOpsWallet, _amount); emit TransferStatus(succ); emit RecoveredTokens(_amount); } //Trading Controls for SAFU Contract function enableTrading() external onlyOwner { require(!tradingEnabled, "Trading already enabled."); tradingEnabled = true; swapAndLiquifyEnabled = true; emit TradingStarted(true); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"ExcludeStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RecoveredETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RecoveredTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"TradingStarted","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":"bool","name":"","type":"bool"}],"name":"TransferStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"UpdateBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"UpdateDevOpsWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"UpdateDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"UpdateSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"UpdateStakingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"UpdateTokensToSwap","type":"event"},{"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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devOpsTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devOpsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionAmount","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devOpsWallet","type":"address"}],"name":"setDevOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionAmount","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingWallet","type":"address"}],"name":"setStakingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDevOpsTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionsCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600180546001600160a01b031990811673c6ac0b2a94a92c12a7129e93319707ff9122e565179091556002805490911673dfb2270f178f5c614806a60722bdcd1ac6072c0f1781556b033b2e3c9fd0803ce8000000600655600755600360088190556009556004600a556000600d819055600e81905569021e19e0c9bab2400000600f556011556012805461ff0019169055348015620000a357600080fd5b50620000af3362000474565b6006543360009081526003602052604081209190915546603803620000ea57507310ed43c718714eb63d5aa57b78b54704e256024e62000248565b466061036200010f575073d99d1c33f9fc3444f8101754abc46c52416550d162000248565b4661a86a036200013557507360ae616a2155ee3d9a68541ba4544862310933d462000248565b466089036200015a575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff62000248565b466117b203620001805750734169db906fcbfb8b12dbd20d98850aee05b7d88962000248565b4660fa03620001a5575073f491e7b69e4244ad4002bc14e878a34207e38c2962000248565b4661a4b103620001cb5750731b02da8cb0d097eb8d57a175b88c7d8b4799750662000248565b4660011480620001db5750466004145b80620001e75750466005145b15620002095750737a250d5630b4cf539739df2c5dacb4c659f2488d62000248565b60405162461bcd60e51b815260206004820152601060248201526f596f75277265206e6f7420426c61646560801b604482015260640160405180910390fd5b6000819050806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b29190620004c4565b6001600160a01b031660c0816001600160a01b031681525050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003309190620004c4565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000382573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a89190620004c4565b6001600160a01b0390811660a0528116608052600160056000620003d46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200041c3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200046491815260200190565b60405180910390a35050620004f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620004d757600080fd5b81516001600160a01b0381168114620004ef57600080fd5b9392505050565b60805160a05160c051611ed5620005496000396000611a010152600081816104d101528181611691015281816116f1015261178a01526000818161036301528181611a590152611a950152611ed56000f3fe6080604052600436106102765760003560e01c80636ac9a8701161014f578063a9059cbb116100c1578063e122cd551161007a578063e122cd5514610781578063e57f14e114610797578063e6be4a72146107b7578063ecd2cc01146107d7578063f2fde38b146107ed578063fb0ecfa41461080d57600080fd5b8063a9059cbb146106bb578063b29ad50a146106db578063c49b9a80146106f0578063ce831ed514610710578063d2d7ad8314610725578063dd62ed3e1461073b57600080fd5b80638a8c523c116101135780638a8c523c146106285780638da5cb5b1461063d5780638f55833c1461065b57806395d89b41146102bf578063a457c2d71461067b578063a754d3471461069b57600080fd5b80636ac9a8701461059157806370a08231146105b1578063715018a6146105e75780637a416770146105fc57806385141a771461061257600080fd5b80632b14ca56116101e857806349bd5a5e116101ac57806349bd5a5e146104bf5780634a74bb02146104f35780634ada218b146105125780634fbee1931461052c5780635eaa8247146105655780636042f7191461057b57600080fd5b80632b14ca561461042c578063313ce567146104425780633950935114610469578063461d94761461048957806347062402146104a957600080fd5b806316a2f82a1161023a57806316a2f82a1461038557806318160ddd146103a75780631a860c3e146103bc578063220f6696146103dc57806323136371146103f657806323b872dd1461040c57600080fd5b806306ee6ad81461028257806306fdde03146102bf578063095ea7b3146102fd578063161024781461032d5780631694505e1461035157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506002546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102f060405180604001604052806005815260200164774149676560d81b81525081565b6040516102b69190611bcb565b34801561030957600080fd5b5061031d610318366004611c35565b61082d565b60405190151581526020016102b6565b34801561033957600080fd5b50610343600c5481565b6040519081526020016102b6565b34801561035d57600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561039157600080fd5b506103a56103a0366004611c5f565b610844565b005b3480156103b357600080fd5b50600654610343565b3480156103c857600080fd5b506103a56103d7366004611c5f565b6108aa565b3480156103e857600080fd5b5060125461031d9060ff1681565b34801561040257600080fd5b5061034360085481565b34801561041857600080fd5b5061031d610427366004611c81565b610954565b34801561043857600080fd5b5061034360095481565b34801561044e57600080fd5b50610457601281565b60405160ff90911681526020016102b6565b34801561047557600080fd5b5061031d610484366004611c35565b610a03565b34801561049557600080fd5b506103a56104a4366004611cbd565b610a3a565b3480156104b557600080fd5b5061034360075481565b3480156104cb57600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ff57600080fd5b5060125461031d90610100900460ff1681565b34801561051e57600080fd5b5060105461031d9060ff1681565b34801561053857600080fd5b5061031d610547366004611c5f565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057157600080fd5b5061034360115481565b34801561058757600080fd5b50610343600a5481565b34801561059d57600080fd5b506103a56105ac366004611cd6565b610ae0565b3480156105bd57600080fd5b506103436105cc366004611c5f565b6001600160a01b031660009081526003602052604090205490565b3480156105f357600080fd5b506103a5610bc1565b34801561060857600080fd5b50610343600d5481565b34801561061e57600080fd5b506102a261dead81565b34801561063457600080fd5b506103a5610bd5565b34801561064957600080fd5b506000546001600160a01b03166102a2565b34801561066757600080fd5b506103a5610676366004611c5f565b610c84565b34801561068757600080fd5b5061031d610696366004611c35565b610d28565b3480156106a757600080fd5b506001546102a2906001600160a01b031681565b3480156106c757600080fd5b5061031d6106d6366004611c35565b610d5f565b3480156106e757600080fd5b506103a5610d6c565b3480156106fc57600080fd5b506103a561070b366004611d06565b610e18565b34801561071c57600080fd5b506103a5610ebf565b34801561073157600080fd5b50610343600f5481565b34801561074757600080fd5b50610343610756366004611d23565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561078d57600080fd5b50610343600b5481565b3480156107a357600080fd5b506103a56107b2366004611c5f565b610f8c565b3480156107c357600080fd5b506103a56107d2366004611c35565b610fef565b3480156107e357600080fd5b50610343600e5481565b3480156107f957600080fd5b506103a5610808366004611c5f565b61115d565b34801561081957600080fd5b506103a5610828366004611cd6565b6111d6565b600061083a3384846112af565b5060015b92915050565b61084c6113d4565b6001600160a01b0381166000818152600560209081526040808320805460ff191690558051938452908301919091527f09cdf0cfa7a040edd81ed835da9c0da414b3b1bc89788f88ba53288ce596b5fa91015b60405180910390a150565b6108b26113d4565b6001600160a01b0381166109065760405162461bcd60e51b81526020600482015260166024820152757365747374616b696e6757616c6c65743a205a45524f60501b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fde618dbea217486c1ef5d035b59c9921bffa9e68b2fa51c3375c09adb0a0c8839060200161089f565b6001600160a01b0383166000908152600460209081526040808320338452909152812054828110156109d95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108fd565b6109e485858561142e565b6109f885336109f38685611d6c565b6112af565b506001949350505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161083a9185906109f3908690611d7f565b610a426113d4565b68056bc75e2d63100000811015610aab5760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b60648201526084016108fd565b600f8190556040518181527f17339d8f3c3323d3df3b092130f1bedb79d8e20de4d3ff176b316e89be357cbe9060200161089f565b610ae86113d4565b600a821115610b395760405162461bcd60e51b815260206004820181905260248201527f53656c6c204665652063616e6e6f74206265206d6f7265207468616e2031302560448201526064016108fd565b81811115610b7f5760405162461bcd60e51b81526020600482015260136024820152720a4caccd8cac6e8d2dedc40e8dede40d0d2ced606b1b60448201526064016108fd565b6009829055600a8190556040518281527f7d59573ec4acab62b908b5c1cde109eb12273d011506abaa850256636a42d54a906020015b60405180910390a15050565b610bc96113d4565b610bd360006118b9565b565b610bdd6113d4565b60105460ff1615610c305760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016108fd565b6010805460ff191660019081179091556012805461ff0019166101001790556040519081527ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a39060200160405180910390a1565b610c8c6113d4565b6001600160a01b038116610cda5760405162461bcd60e51b81526020600482015260156024820152747365746465764f707357616c6c65743a205a45524f60581b60448201526064016108fd565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fdce769d722b2c31674b3b84fa1555e4b669453615df3fab17d0249bbdb3b83929060200161089f565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161083a9185906109f3908690611d6c565b600061083a33848461142e565b6012805460ff191660011790553060009081526003602052604081205490506000600c54118015610d9f5750600c548110155b15610dd557600c54610db19082611d6c565b600254600c54919250610dcf9130916001600160a01b031690611909565b6000600c555b80600003610de35750610e0c565b610dec816119aa565b6001544790610e04906001600160a01b031682611b36565b50506000600d555b6012805460ff19169055565b610e206113d4565b801515601260019054906101000a900460ff16151503610e765760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b60448201526064016108fd565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061089f90831515815260200190565b610ec76113d4565b60015460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610f18576040519150601f19603f3d011682016040523d82523d6000602084013e610f1d565b606091505b505090507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e81604051610f54911515815260200190565b60405180910390a16040518281527ffc3b2917f34bc4fba1516519d275441646d5088542342f58de8eea6a7cb5c2ab90602001610bb5565b610f946113d4565b6001600160a01b038116600081815260056020908152604091829020805460ff191660019081179091558251938452908301527f09cdf0cfa7a040edd81ed835da9c0da414b3b1bc89788f88ba53288ce596b5fa910161089f565b610ff76113d4565b306001600160a01b0383160361106e5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b60648201526084016108fd565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af11580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190611d92565b90507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e8160405161111c911515815260200190565b60405180910390a16040518281527f9717b3559fe85dc5c6941748cdc56fc5ca4e06048d7b836c700c174f78369bef906020015b60405180910390a1505050565b6111656113d4565b6001600160a01b0381166111ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fd565b6111d3816118b9565b50565b6111de6113d4565b600a82111561122f5760405162461bcd60e51b815260206004820152601f60248201527f427579204665652063616e6e6f74206265206d6f7265207468616e203130250060448201526064016108fd565b818111156112755760405162461bcd60e51b81526020600482015260136024820152720a4caccd8cac6e8d2dedc40e8dede40d0d2ced606b1b60448201526064016108fd565b600782905560088190556040518281527fa480a3a15a511fbdc37ae77ae3f490e03ab3688adde11456ce779e6c1e0abaa290602001610bb5565b6001600160a01b0383166113115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fd565b6001600160a01b0382166113725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b6001600160a01b0383166114925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fd565b6001600160a01b0382166114f45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fd565b600081116115565760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fd565b6001600160a01b0383166000908152600360205260409020548111156115cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fd565b60105460ff16806115f657506001600160a01b03831660009081526005602052604090205460ff165b8061161957506001600160a01b03821660009081526005602052604090205460ff165b6116655760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016108fd565b30600090815260036020526040812054600f5460125491929083101591819060ff161580156116c657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b80156116cf5750825b80156116e25750601254610100900460ff165b156116ef576116ef610d6c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614801561174957506001600160a01b03871660009081526005602052604090205460ff16155b156117885760648560095461175e9190611daf565b6117689190611dc6565b9150600954600a548361177b9190611daf565b6117859190611dc6565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161480156117e257506001600160a01b03861660009081526005602052604090205460ff16155b15611821576064856007546117f79190611daf565b6118019190611dc6565b9150600754600854836118149190611daf565b61181e9190611dc6565b90505b61182b8286611d6c565b945081156118a55761183e873084611909565b81600d60008282546118509190611d7f565b9250508190555081600e60008282546118699190611d7f565b909155505080156118a55780600b60008282546118869190611d7f565b9250508190555080600c600082825461189f9190611d7f565b90915550505b6118b0878787611909565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831660009081526003602052604081208054839290611931908490611d6c565b90915550506001600160a01b0382166000908152600360205260408120805483929061195e908490611d7f565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113c791815260200190565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119df576119df611de8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611a3357611a33611de8565b60200260200101906001600160a01b031690816001600160a01b031681525050611a7e307f0000000000000000000000000000000000000000000000000000000000000000846112af565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611ad3908590600090869030904290600401611e42565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610bb5929190611e7e565b80600003611b42575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b8f576040519150601f19603f3d011682016040523d82523d6000602084013e611b94565b606091505b505090507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e81604051611150911515815260200190565b600060208083528351808285015260005b81811015611bf857858101830151858201604001528201611bdc565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c3057600080fd5b919050565b60008060408385031215611c4857600080fd5b611c5183611c19565b946020939093013593505050565b600060208284031215611c7157600080fd5b611c7a82611c19565b9392505050565b600080600060608486031215611c9657600080fd5b611c9f84611c19565b9250611cad60208501611c19565b9150604084013590509250925092565b600060208284031215611ccf57600080fd5b5035919050565b60008060408385031215611ce957600080fd5b50508035926020909101359150565b80151581146111d357600080fd5b600060208284031215611d1857600080fd5b8135611c7a81611cf8565b60008060408385031215611d3657600080fd5b611d3f83611c19565b9150611d4d60208401611c19565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083e5761083e611d56565b8082018082111561083e5761083e611d56565b600060208284031215611da457600080fd5b8151611c7a81611cf8565b808202811582820484141761083e5761083e611d56565b600082611de357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e375781516001600160a01b031687529582019590820190600101611e12565b509495945050505050565b85815284602082015260a060408201526000611e6160a0830186611dfe565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e976040830184611dfe565b94935050505056fea2646970667358221220f00447377a03cb56245484cb4d69754dc2bbf2286be9f7d417105ce8df9c21ac64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80636ac9a8701161014f578063a9059cbb116100c1578063e122cd551161007a578063e122cd5514610781578063e57f14e114610797578063e6be4a72146107b7578063ecd2cc01146107d7578063f2fde38b146107ed578063fb0ecfa41461080d57600080fd5b8063a9059cbb146106bb578063b29ad50a146106db578063c49b9a80146106f0578063ce831ed514610710578063d2d7ad8314610725578063dd62ed3e1461073b57600080fd5b80638a8c523c116101135780638a8c523c146106285780638da5cb5b1461063d5780638f55833c1461065b57806395d89b41146102bf578063a457c2d71461067b578063a754d3471461069b57600080fd5b80636ac9a8701461059157806370a08231146105b1578063715018a6146105e75780637a416770146105fc57806385141a771461061257600080fd5b80632b14ca56116101e857806349bd5a5e116101ac57806349bd5a5e146104bf5780634a74bb02146104f35780634ada218b146105125780634fbee1931461052c5780635eaa8247146105655780636042f7191461057b57600080fd5b80632b14ca561461042c578063313ce567146104425780633950935114610469578063461d94761461048957806347062402146104a957600080fd5b806316a2f82a1161023a57806316a2f82a1461038557806318160ddd146103a75780631a860c3e146103bc578063220f6696146103dc57806323136371146103f657806323b872dd1461040c57600080fd5b806306ee6ad81461028257806306fdde03146102bf578063095ea7b3146102fd578063161024781461032d5780631694505e1461035157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506002546102a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cb57600080fd5b506102f060405180604001604052806005815260200164774149676560d81b81525081565b6040516102b69190611bcb565b34801561030957600080fd5b5061031d610318366004611c35565b61082d565b60405190151581526020016102b6565b34801561033957600080fd5b50610343600c5481565b6040519081526020016102b6565b34801561035d57600080fd5b506102a27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561039157600080fd5b506103a56103a0366004611c5f565b610844565b005b3480156103b357600080fd5b50600654610343565b3480156103c857600080fd5b506103a56103d7366004611c5f565b6108aa565b3480156103e857600080fd5b5060125461031d9060ff1681565b34801561040257600080fd5b5061034360085481565b34801561041857600080fd5b5061031d610427366004611c81565b610954565b34801561043857600080fd5b5061034360095481565b34801561044e57600080fd5b50610457601281565b60405160ff90911681526020016102b6565b34801561047557600080fd5b5061031d610484366004611c35565b610a03565b34801561049557600080fd5b506103a56104a4366004611cbd565b610a3a565b3480156104b557600080fd5b5061034360075481565b3480156104cb57600080fd5b506102a27f0000000000000000000000000ca9cc2bd7e1c6d40f651a5d05dec015f2b89c8981565b3480156104ff57600080fd5b5060125461031d90610100900460ff1681565b34801561051e57600080fd5b5060105461031d9060ff1681565b34801561053857600080fd5b5061031d610547366004611c5f565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057157600080fd5b5061034360115481565b34801561058757600080fd5b50610343600a5481565b34801561059d57600080fd5b506103a56105ac366004611cd6565b610ae0565b3480156105bd57600080fd5b506103436105cc366004611c5f565b6001600160a01b031660009081526003602052604090205490565b3480156105f357600080fd5b506103a5610bc1565b34801561060857600080fd5b50610343600d5481565b34801561061e57600080fd5b506102a261dead81565b34801561063457600080fd5b506103a5610bd5565b34801561064957600080fd5b506000546001600160a01b03166102a2565b34801561066757600080fd5b506103a5610676366004611c5f565b610c84565b34801561068757600080fd5b5061031d610696366004611c35565b610d28565b3480156106a757600080fd5b506001546102a2906001600160a01b031681565b3480156106c757600080fd5b5061031d6106d6366004611c35565b610d5f565b3480156106e757600080fd5b506103a5610d6c565b3480156106fc57600080fd5b506103a561070b366004611d06565b610e18565b34801561071c57600080fd5b506103a5610ebf565b34801561073157600080fd5b50610343600f5481565b34801561074757600080fd5b50610343610756366004611d23565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561078d57600080fd5b50610343600b5481565b3480156107a357600080fd5b506103a56107b2366004611c5f565b610f8c565b3480156107c357600080fd5b506103a56107d2366004611c35565b610fef565b3480156107e357600080fd5b50610343600e5481565b3480156107f957600080fd5b506103a5610808366004611c5f565b61115d565b34801561081957600080fd5b506103a5610828366004611cd6565b6111d6565b600061083a3384846112af565b5060015b92915050565b61084c6113d4565b6001600160a01b0381166000818152600560209081526040808320805460ff191690558051938452908301919091527f09cdf0cfa7a040edd81ed835da9c0da414b3b1bc89788f88ba53288ce596b5fa91015b60405180910390a150565b6108b26113d4565b6001600160a01b0381166109065760405162461bcd60e51b81526020600482015260166024820152757365747374616b696e6757616c6c65743a205a45524f60501b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fde618dbea217486c1ef5d035b59c9921bffa9e68b2fa51c3375c09adb0a0c8839060200161089f565b6001600160a01b0383166000908152600460209081526040808320338452909152812054828110156109d95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108fd565b6109e485858561142e565b6109f885336109f38685611d6c565b6112af565b506001949350505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161083a9185906109f3908690611d7f565b610a426113d4565b68056bc75e2d63100000811015610aab5760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b60648201526084016108fd565b600f8190556040518181527f17339d8f3c3323d3df3b092130f1bedb79d8e20de4d3ff176b316e89be357cbe9060200161089f565b610ae86113d4565b600a821115610b395760405162461bcd60e51b815260206004820181905260248201527f53656c6c204665652063616e6e6f74206265206d6f7265207468616e2031302560448201526064016108fd565b81811115610b7f5760405162461bcd60e51b81526020600482015260136024820152720a4caccd8cac6e8d2dedc40e8dede40d0d2ced606b1b60448201526064016108fd565b6009829055600a8190556040518281527f7d59573ec4acab62b908b5c1cde109eb12273d011506abaa850256636a42d54a906020015b60405180910390a15050565b610bc96113d4565b610bd360006118b9565b565b610bdd6113d4565b60105460ff1615610c305760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016108fd565b6010805460ff191660019081179091556012805461ff0019166101001790556040519081527ff789dd0d6d54bc0d9b7a5955aac4c052f81fb39e63f533a8d4820f6e862c78a39060200160405180910390a1565b610c8c6113d4565b6001600160a01b038116610cda5760405162461bcd60e51b81526020600482015260156024820152747365746465764f707357616c6c65743a205a45524f60581b60448201526064016108fd565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fdce769d722b2c31674b3b84fa1555e4b669453615df3fab17d0249bbdb3b83929060200161089f565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161083a9185906109f3908690611d6c565b600061083a33848461142e565b6012805460ff191660011790553060009081526003602052604081205490506000600c54118015610d9f5750600c548110155b15610dd557600c54610db19082611d6c565b600254600c54919250610dcf9130916001600160a01b031690611909565b6000600c555b80600003610de35750610e0c565b610dec816119aa565b6001544790610e04906001600160a01b031682611b36565b50506000600d555b6012805460ff19169055565b610e206113d4565b801515601260019054906101000a900460ff16151503610e765760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b60448201526064016108fd565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061089f90831515815260200190565b610ec76113d4565b60015460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610f18576040519150601f19603f3d011682016040523d82523d6000602084013e610f1d565b606091505b505090507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e81604051610f54911515815260200190565b60405180910390a16040518281527ffc3b2917f34bc4fba1516519d275441646d5088542342f58de8eea6a7cb5c2ab90602001610bb5565b610f946113d4565b6001600160a01b038116600081815260056020908152604091829020805460ff191660019081179091558251938452908301527f09cdf0cfa7a040edd81ed835da9c0da414b3b1bc89788f88ba53288ce596b5fa910161089f565b610ff76113d4565b306001600160a01b0383160361106e5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b60648201526084016108fd565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af11580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190611d92565b90507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e8160405161111c911515815260200190565b60405180910390a16040518281527f9717b3559fe85dc5c6941748cdc56fc5ca4e06048d7b836c700c174f78369bef906020015b60405180910390a1505050565b6111656113d4565b6001600160a01b0381166111ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fd565b6111d3816118b9565b50565b6111de6113d4565b600a82111561122f5760405162461bcd60e51b815260206004820152601f60248201527f427579204665652063616e6e6f74206265206d6f7265207468616e203130250060448201526064016108fd565b818111156112755760405162461bcd60e51b81526020600482015260136024820152720a4caccd8cac6e8d2dedc40e8dede40d0d2ced606b1b60448201526064016108fd565b600782905560088190556040518281527fa480a3a15a511fbdc37ae77ae3f490e03ab3688adde11456ce779e6c1e0abaa290602001610bb5565b6001600160a01b0383166113115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fd565b6001600160a01b0382166113725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fd565b6001600160a01b0383166114925760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fd565b6001600160a01b0382166114f45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fd565b600081116115565760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fd565b6001600160a01b0383166000908152600360205260409020548111156115cd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fd565b60105460ff16806115f657506001600160a01b03831660009081526005602052604090205460ff165b8061161957506001600160a01b03821660009081526005602052604090205460ff165b6116655760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016108fd565b30600090815260036020526040812054600f5460125491929083101591819060ff161580156116c657507f0000000000000000000000000ca9cc2bd7e1c6d40f651a5d05dec015f2b89c896001600160a01b0316876001600160a01b031614155b80156116cf5750825b80156116e25750601254610100900460ff165b156116ef576116ef610d6c565b7f0000000000000000000000000ca9cc2bd7e1c6d40f651a5d05dec015f2b89c896001600160a01b0316866001600160a01b031614801561174957506001600160a01b03871660009081526005602052604090205460ff16155b156117885760648560095461175e9190611daf565b6117689190611dc6565b9150600954600a548361177b9190611daf565b6117859190611dc6565b90505b7f0000000000000000000000000ca9cc2bd7e1c6d40f651a5d05dec015f2b89c896001600160a01b0316876001600160a01b03161480156117e257506001600160a01b03861660009081526005602052604090205460ff16155b15611821576064856007546117f79190611daf565b6118019190611dc6565b9150600754600854836118149190611daf565b61181e9190611dc6565b90505b61182b8286611d6c565b945081156118a55761183e873084611909565b81600d60008282546118509190611d7f565b9250508190555081600e60008282546118699190611d7f565b909155505080156118a55780600b60008282546118869190611d7f565b9250508190555080600c600082825461189f9190611d7f565b90915550505b6118b0878787611909565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831660009081526003602052604081208054839290611931908490611d6c565b90915550506001600160a01b0382166000908152600360205260408120805483929061195e908490611d7f565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113c791815260200190565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119df576119df611de8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611a3357611a33611de8565b60200260200101906001600160a01b031690816001600160a01b031681525050611a7e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112af565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611ad3908590600090869030904290600401611e42565b600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610bb5929190611e7e565b80600003611b42575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b8f576040519150601f19603f3d011682016040523d82523d6000602084013e611b94565b606091505b505090507fc9946980dc929f521b40f678c5eeae1c213b0c26c005bd48d44905450951166e81604051611150911515815260200190565b600060208083528351808285015260005b81811015611bf857858101830151858201604001528201611bdc565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c3057600080fd5b919050565b60008060408385031215611c4857600080fd5b611c5183611c19565b946020939093013593505050565b600060208284031215611c7157600080fd5b611c7a82611c19565b9392505050565b600080600060608486031215611c9657600080fd5b611c9f84611c19565b9250611cad60208501611c19565b9150604084013590509250925092565b600060208284031215611ccf57600080fd5b5035919050565b60008060408385031215611ce957600080fd5b50508035926020909101359150565b80151581146111d357600080fd5b600060208284031215611d1857600080fd5b8135611c7a81611cf8565b60008060408385031215611d3657600080fd5b611d3f83611c19565b9150611d4d60208401611c19565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083e5761083e611d56565b8082018082111561083e5761083e611d56565b600060208284031215611da457600080fd5b8151611c7a81611cf8565b808202811582820484141761083e5761083e611d56565b600082611de357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e375781516001600160a01b031687529582019590820190600101611e12565b509495945050505050565b85815284602082015260a060408201526000611e6160a0830186611dfe565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e976040830184611dfe565b94935050505056fea2646970667358221220f00447377a03cb56245484cb4d69754dc2bbf2286be9f7d417105ce8df9c21ac64736f6c63430008130033
Deployed Bytecode Sourcemap
22897:16325:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23138:99;;;;;;;;;;-1:-1:-1;23138:99:0;;;;-1:-1:-1;;;;;23138:99:0;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;23138:99:0;;;;;;;;24571:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24571:37:0;;;;;;;;;;;;:::i;28463:186::-;;;;;;;;;;-1:-1:-1;28463:186:0;;;;;:::i;:::-;;:::i;:::-;;;1393:14:1;;1386:22;1368:41;;1356:2;1341:18;28463:186:0;1228:187:1;24915:31:0;;;;;;;;;;;;;;;;;;;1566:25:1;;;1554:2;1539:18;24915:31:0;1420:177:1;25319:51:0;;;;;;;;;;;;;;;34873:159;;;;;;;;;;-1:-1:-1;34873:159:0;;;;;:::i;:::-;;:::i;:::-;;27733:95;;;;;;;;;;-1:-1:-1;27813:7:0;;27733:95;;36017:252;;;;;;;;;;-1:-1:-1;36017:252:0;;;;;:::i;:::-;;:::i;25509:28::-;;;;;;;;;;-1:-1:-1;25509:28:0;;;;;;;;24757:32;;;;;;;;;;;;;;;;28694:478;;;;;;;;;;-1:-1:-1;28694:478:0;;;;;:::i;:::-;;:::i;24796:26::-;;;;;;;;;;;;;;;;24661:35;;;;;;;;;;;;24694:2;24661:35;;;;;2533:4:1;2521:17;;;2503:36;;2491:2;2476:18;24661:35:0;2361:184:1;29222:290:0;;;;;;;;;;-1:-1:-1;29222:290:0;;;;;:::i;:::-;;:::i;35077:360::-;;;;;;;;;;-1:-1:-1;35077:360:0;;;;;:::i;:::-;;:::i;24728:22::-;;;;;;;;;;;;;;;;25377:38;;;;;;;;;;;;;;;25544:41;;;;;;;;;;-1:-1:-1;25544:41:0;;;;;;;;;;;25168:26;;;;;;;;;;-1:-1:-1;25168:26:0;;;;;;;;34454:128;;;;;;;;;;-1:-1:-1;34454:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;34546:28:0;34522:4;34546:28;;;:19;:28;;;;;;;;;34454:128;25245:29;;;;;;;;;;;;;;;;24829:33;;;;;;;;;;;;;;;;36647:372;;;;;;;;;;-1:-1:-1;36647:372:0;;;;;:::i;:::-;;:::i;27836:117::-;;;;;;;;;;-1:-1:-1;27836:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;27929:16:0;27902:7;27929:16;;;:7;:16;;;;;;;27836:117;13017:103;;;;;;;;;;;;;:::i;24953:40::-;;;;;;;;;;;;;;;;23283:88;;;;;;;;;;;;23329:42;23283:88;;38997:222;;;;;;;;;;;;;:::i;12369:87::-;;;;;;;;;;-1:-1:-1;12415:7:0;12442:6;-1:-1:-1;;;;;12442:6:0;12369:87;;35735:244;;;;;;;;;;-1:-1:-1;35735:244:0;;;;;:::i;:::-;;:::i;29562:300::-;;;;;;;;;;-1:-1:-1;29562:300:0;;;;;:::i;:::-;;:::i;23033:98::-;;;;;;;;;;-1:-1:-1;23033:98:0;;;;-1:-1:-1;;;;;23033:98:0;;;28003:192;;;;;;;;;;-1:-1:-1;28003:192:0;;;;;:::i;:::-;;:::i;32622:669::-;;;;;;;;;;;;;:::i;35445:247::-;;;;;;;;;;-1:-1:-1;35445:247:0;;;;;:::i;:::-;;:::i;38183:263::-;;;;;;;;;;;;;:::i;25056:53::-;;;;;;;;;;;;;;;;28245:170;;;;;;;;;;-1:-1:-1;28245:170:0;;;;;:::i;:::-;-1:-1:-1;;;;;28379:19:0;;;28352:7;28379:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;28245:170;24871:37;;;;;;;;;;;;;;;;34670:159;;;;;;;;;;-1:-1:-1;34670:159:0;;;;;:::i;:::-;;:::i;38523:424::-;;;;;;;;;;-1:-1:-1;38523:424:0;;;;;:::i;:::-;;:::i;25002:45::-;;;;;;;;;;;;;;;;13275:238;;;;;;;;;;-1:-1:-1;13275:238:0;;;;;:::i;:::-;;:::i;36277:362::-;;;;;;;;;;-1:-1:-1;36277:362:0;;;;;:::i;:::-;;:::i;28463:186::-;28563:4;28580:39;180:10;28603:7;28612:6;28580:8;:39::i;:::-;-1:-1:-1;28637:4:0;28463:186;;;;;:::o;34873:159::-;12255:13;:11;:13::i;:::-;-1:-1:-1;;;;;34943:28:0;::::1;34974:5;34943:28:::0;;;:19:::1;:28;::::0;;;;;;;:36;;-1:-1:-1;;34943:36:0::1;::::0;;34995:29;;3998:51:1;;;4065:18;;;4058:50;;;;34995:29:0::1;::::0;3971:18:1;34995:29:0::1;;;;;;;;34873:159:::0;:::o;36017:252::-;12255:13;:11;:13::i;:::-;-1:-1:-1;;;;;36105:28:0;::::1;36097:63;;;::::0;-1:-1:-1;;;36097:63:0;;4321:2:1;36097:63:0::1;::::0;::::1;4303:21:1::0;4360:2;4340:18;;;4333:30;-1:-1:-1;;;4379:18:1;;;4372:52;4441:18;;36097:63:0::1;;;;;;;;;36171:13;:39:::0;;-1:-1:-1;;;;;;36171:39:0::1;-1:-1:-1::0;;;;;36171:39:0;::::1;::::0;;::::1;::::0;;;36226:35:::1;::::0;176:51:1;;;36226:35:0::1;::::0;164:2:1;149:18;36226:35:0::1;14:219:1::0;28694:478:0;-1:-1:-1;;;;;28867:19:0;;28826:4;28867:19;;;:11;:19;;;;;;;;180:10;28867:33;;;;;;;;28933:26;;;;28911:116;;;;-1:-1:-1;;;28911:116:0;;4672:2:1;28911:116:0;;;4654:21:1;4711:2;4691:18;;;4684:30;4750:34;4730:18;;;4723:62;-1:-1:-1;;;4801:18:1;;;4794:38;4849:19;;28911:116:0;4470:404:1;28911:116:0;29038:36;29048:6;29056:9;29067:6;29038:9;:36::i;:::-;29085:57;29094:6;180:10;29116:25;29135:6;29116:16;:25;:::i;:::-;29085:8;:57::i;:::-;-1:-1:-1;29160:4:0;;28694:478;-1:-1:-1;;;;28694:478:0:o;29222:290::-;180:10;29335:4;29424:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29424:34:0;;;;;;;;;;29335:4;;29352:130;;29402:7;;29424:47;;29461:10;;29424:47;:::i;35077:360::-;12255:13;:11;:13::i;:::-;35232:9:::1;35204:24;:37;;35182:126;;;::::0;-1:-1:-1;;;35182:126:0;;5476:2:1;35182:126:0::1;::::0;::::1;5458:21:1::0;5515:2;5495:18;;;5488:30;5554:34;5534:18;;;5527:62;-1:-1:-1;;;5605:18:1;;;5598:37;5652:19;;35182:126:0::1;5274:403:1::0;35182:126:0::1;35319:23;:50:::0;;;35385:44:::1;::::0;1566:25:1;;;35385:44:0::1;::::0;1554:2:1;1539:18;35385:44:0::1;1420:177:1::0;36647:372:0;12255:13;:11;:13::i;:::-;36784:2:::1;36772:8;:14;;36764:59;;;::::0;-1:-1:-1;;;36764:59:0;;5884:2:1;36764:59:0::1;::::0;::::1;5866:21:1::0;;;5903:18;;;5896:30;5962:34;5942:18;;;5935:62;6014:18;;36764:59:0::1;5682:356:1::0;36764:59:0::1;36863:8;36842:17;:29;;36834:61;;;::::0;-1:-1:-1;;;36834:61:0;;6245:2:1;36834:61:0::1;::::0;::::1;6227:21:1::0;6284:2;6264:18;;;6257:30;-1:-1:-1;;;6303:18:1;;;6296:49;6362:18;;36834:61:0::1;6043:343:1::0;36834:61:0::1;36906:7;:18:::0;;;36935:17:::1;:37:::0;;;36988:23:::1;::::0;1566:25:1;;;36988:23:0::1;::::0;1554:2:1;1539:18;36988:23:0::1;;;;;;;;36647:372:::0;;:::o;13017:103::-;12255:13;:11;:13::i;:::-;13082:30:::1;13109:1;13082:18;:30::i;:::-;13017:103::o:0;38997:222::-;12255:13;:11;:13::i;:::-;39061:14:::1;::::0;::::1;;39060:15;39052:52;;;::::0;-1:-1:-1;;;39052:52:0;;6593:2:1;39052:52:0::1;::::0;::::1;6575:21:1::0;6632:2;6612:18;;;6605:30;6671:26;6651:18;;;6644:54;6715:18;;39052:52:0::1;6391:348:1::0;39052:52:0::1;39115:14;:21:::0;;-1:-1:-1;;39115:21:0::1;39132:4;39115:21:::0;;::::1;::::0;;;39147::::1;:28:::0;;-1:-1:-1;;39147:28:0::1;39115:21;39147:28;::::0;;39191:20:::1;::::0;1368:41:1;;;39191:20:0::1;::::0;1356:2:1;1341:18;39191:20:0::1;;;;;;;38997:222::o:0;35735:244::-;12255:13;:11;:13::i;:::-;-1:-1:-1;;;;;35821:27:0;::::1;35813:61;;;::::0;-1:-1:-1;;;35813:61:0;;6946:2:1;35813:61:0::1;::::0;::::1;6928:21:1::0;6985:2;6965:18;;;6958:30;-1:-1:-1;;;7004:18:1;;;6997:51;7065:18;;35813:61:0::1;6744:345:1::0;35813:61:0::1;35885:12;:37:::0;;-1:-1:-1;;;;;;35885:37:0::1;-1:-1:-1::0;;;;;35885:37:0;::::1;::::0;;::::1;::::0;;;35938:33:::1;::::0;176:51:1;;;35938:33:0::1;::::0;164:2:1;149:18;35938:33:0::1;14:219:1::0;29562:300:0;180:10;29680:4;29769:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29769:34:0;;;;;;;;;;29680:4;;29697:135;;29747:7;;29769:52;;29806:15;;29769:52;:::i;28003:192::-;28106:4;28123:42;180:10;28147:9;28158:6;28123:9;:42::i;32622:669::-;25628:16;:23;;-1:-1:-1;;25628:23:0;25647:4;25628:23;;;32718:4:::1;-1:-1:-1::0;27929:16:0;;;:7;:16;;;;;;32678:46:::1;;32802:1;32780:19;;:23;:61;;;;;32822:19;;32807:11;:34;;32780:61;32776:246;;;32873:19;::::0;32858:34:::1;::::0;;::::1;:::i;:::-;32937:13;::::0;32952:19:::1;::::0;32858:34;;-1:-1:-1;32907:65:0::1;::::0;32930:4:::1;::::0;-1:-1:-1;;;;;32937:13:0::1;::::0;32907:14:::1;:65::i;:::-;33009:1;32987:19;:23:::0;32776:246:::1;33036:11;33051:1;33036:16:::0;33032:29:::1;;33054:7;;;33032:29;33109;33126:11;33109:16;:29::i;:::-;33220:12;::::0;33167:21:::1;::::0;33199:46:::1;::::0;-1:-1:-1;;;;;33220:12:0::1;33167:21:::0;33199:20:::1;:46::i;:::-;-1:-1:-1::0;;33282:1:0::1;33258:21;:25:::0;25662:1:::1;25674:16:::0;:24;;-1:-1:-1;;25674:24:0;;;32622:669::o;35445:247::-;12255:13;:11;:13::i;:::-;35557:8:::1;35532:33;;:21;;;;;;;;;;;:33;;::::0;35524:63:::1;;;::::0;-1:-1:-1;;;35524:63:0;;7296:2:1;35524:63:0::1;::::0;::::1;7278:21:1::0;7335:2;7315:18;;;7308:30;-1:-1:-1;;;7354:18:1;;;7347:47;7411:18;;35524:63:0::1;7094:341:1::0;35524:63:0::1;35598:21;:32:::0;;;::::1;;;;-1:-1:-1::0;;35598:32:0;;::::1;;::::0;;35646:38:::1;::::0;::::1;::::0;::::1;::::0;35622:8;1393:14:1;1386:22;1368:41;;1356:2;1341:18;;1228:187;38183:263:0;12255:13;:11;:13::i;:::-;38321:12:::1;::::0;38313:49:::1;::::0;38265:21:::1;::::0;38247:15:::1;::::0;-1:-1:-1;;;;;38321:12:0;;::::1;::::0;38265:21;;38247:15;38313:49;38247:15;38313:49;38265:21;38321:12;38313:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38297:65;;;38378:20;38393:4;38378:20;;;;1393:14:1::0;1386:22;1368:41;;1356:2;1341:18;;1228:187;38378:20:0::1;;;;;;;;38414:24;::::0;1566:25:1;;;38414:24:0::1;::::0;1554:2:1;1539:18;38414:24:0::1;1420:177:1::0;34670:159:0;12255:13;:11;:13::i;:::-;-1:-1:-1;;;;;34742:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;34742:35:0::1;34773:4;34742:35:::0;;::::1;::::0;;;34793:28;;3998:51:1;;;4065:18;;;4058:50;34793:28:0::1;::::0;3971:18:1;34793:28:0::1;3830:284:1::0;38523:424:0;12255:13;:11;:13::i;:::-;38700:4:::1;-1:-1:-1::0;;;;;38675:30:0;::::1;::::0;38653:134:::1;;;::::0;-1:-1:-1;;;38653:134:0;;7852:2:1;38653:134:0::1;::::0;::::1;7834:21:1::0;7891:2;7871:18;;;7864:30;7930:34;7910:18;;;7903:62;-1:-1:-1;;;7981:18:1;;;7974:52;8043:19;;38653:134:0::1;7650:418:1::0;38653:134:0::1;38841:12;::::0;38810:53:::1;::::0;-1:-1:-1;;;38810:53:0;;-1:-1:-1;;;;;38841:12:0;;::::1;38810:53;::::0;::::1;8255:51:1::0;8322:18;;;8315:34;;;38798:9:0::1;::::0;38810:30;::::1;::::0;::::1;::::0;8228:18:1;;38810:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38798:65;;38879:20;38894:4;38879:20;;;;1393:14:1::0;1386:22;1368:41;;1356:2;1341:18;;1228:187;38879:20:0::1;;;;;;;;38915:24;::::0;1566:25:1;;;38915:24:0::1;::::0;1554:2:1;1539:18;38915:24:0::1;;;;;;;;38642:305;38523:424:::0;;:::o;13275:238::-;12255:13;:11;:13::i;:::-;-1:-1:-1;;;;;13378:22:0;::::1;13356:110;;;::::0;-1:-1:-1;;;13356:110:0;;8812:2:1;13356:110:0::1;::::0;::::1;8794:21:1::0;8851:2;8831:18;;;8824:30;8890:34;8870:18;;;8863:62;-1:-1:-1;;;8941:18:1;;;8934:36;8987:19;;13356:110:0::1;8610:402:1::0;13356:110:0::1;13477:28;13496:8;13477:18;:28::i;:::-;13275:238:::0;:::o;36277:362::-;12255:13;:11;:13::i;:::-;36411:2:::1;36400:7;:13;;36392:57;;;::::0;-1:-1:-1;;;36392:57:0;;9219:2:1;36392:57:0::1;::::0;::::1;9201:21:1::0;9258:2;9238:18;;;9231:30;9297:33;9277:18;;;9270:61;9348:18;;36392:57:0::1;9017:355:1::0;36392:57:0::1;36489:7;36468:17;:28;;36460:60;;;::::0;-1:-1:-1;;;36460:60:0;;6245:2:1;36460:60:0::1;::::0;::::1;6227:21:1::0;6284:2;6264:18;;;6257:30;-1:-1:-1;;;6303:18:1;;;6296:49;6362:18;;36460:60:0::1;6043:343:1::0;36460:60:0::1;36531:6;:16:::0;;;36558::::1;:36:::0;;;36610:21:::1;::::0;1566:25:1;;;36610:21:0::1;::::0;1554:2:1;1539:18;36610:21:0::1;1420:177:1::0;29894:341:0;-1:-1:-1;;;;;29988:20:0;;29980:69;;;;-1:-1:-1;;;29980:69:0;;9579:2:1;29980:69:0;;;9561:21:1;9618:2;9598:18;;;9591:30;9657:34;9637:18;;;9630:62;-1:-1:-1;;;9708:18:1;;;9701:34;9752:19;;29980:69:0;9377:400:1;29980:69:0;-1:-1:-1;;;;;30068:21:0;;30060:68;;;;-1:-1:-1;;;30060:68:0;;9984:2:1;30060:68:0;;;9966:21:1;10023:2;10003:18;;;9996:30;10062:34;10042:18;;;10035:62;-1:-1:-1;;;10113:18:1;;;10106:32;10155:19;;30060:68:0;9782:398:1;30060:68:0;-1:-1:-1;;;;;30141:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;30194:33;;1566:25:1;;;30194:33:0;;1539:18:1;30194:33:0;;;;;;;;29894:341;;;:::o;12534:132::-;12415:7;12442:6;-1:-1:-1;;;;;12442:6:0;180:10;12598:23;12590:68;;;;-1:-1:-1;;;12590:68:0;;10387:2:1;12590:68:0;;;10369:21:1;;;10406:18;;;10399:30;10465:34;10445:18;;;10438:62;10517:18;;12590:68:0;10185:356:1;30368:2019:0;-1:-1:-1;;;;;30456:18:0;;30448:68;;;;-1:-1:-1;;;30448:68:0;;10748:2:1;30448:68:0;;;10730:21:1;10787:2;10767:18;;;10760:30;10826:34;10806:18;;;10799:62;-1:-1:-1;;;10877:18:1;;;10870:35;10922:19;;30448:68:0;10546:401:1;30448:68:0;-1:-1:-1;;;;;30535:16:0;;30527:64;;;;-1:-1:-1;;;30527:64:0;;11154:2:1;30527:64:0;;;11136:21:1;11193:2;11173:18;;;11166:30;11232:34;11212:18;;;11205:62;-1:-1:-1;;;11283:18:1;;;11276:33;11326:19;;30527:64:0;10952:399:1;30527:64:0;30619:1;30610:6;:10;30602:64;;;;-1:-1:-1;;;30602:64:0;;11558:2:1;30602:64:0;;;11540:21:1;11597:2;11577:18;;;11570:30;11636:34;11616:18;;;11609:62;-1:-1:-1;;;11687:18:1;;;11680:39;11736:19;;30602:64:0;11356:405:1;30602:64:0;-1:-1:-1;;;;;30699:13:0;;;;;;:7;:13;;;;;;:23;-1:-1:-1;30699:23:0;30677:111;;;;-1:-1:-1;;;30677:111:0;;11968:2:1;30677:111:0;;;11950:21:1;12007:2;11987:18;;;11980:30;12046:34;12026:18;;;12019:62;-1:-1:-1;;;12097:18:1;;;12090:36;12143:19;;30677:111:0;11766:402:1;30677:111:0;30862:14;;;;;:60;;-1:-1:-1;;;;;;30897:25:0;;;;;;:19;:25;;;;;;;;30862:60;:104;;;-1:-1:-1;;;;;;30943:23:0;;;;;;:19;:23;;;;;;;;30862:104;30840:178;;;;-1:-1:-1;;;30840:178:0;;12375:2:1;30840:178:0;;;12357:21:1;12414:2;12394:18;;;12387:30;12453:26;12433:18;;;12426:54;12497:18;;30840:178:0;12173:348:1;30840:178:0;31124:4;31075:28;27929:16;;;:7;:16;;;;;;31209:23;;31403:16;;27929;;31172:60;;;;;31075:28;;31403:16;;31402:17;:55;;;;;31444:13;-1:-1:-1;;;;;31436:21:0;:4;-1:-1:-1;;;;;31436:21:0;;;31402:55;:95;;;;;31474:23;31402:95;:133;;;;-1:-1:-1;31514:21:0;;;;;;;31402:133;31384:206;;;31562:16;:14;:16::i;:::-;31610:13;-1:-1:-1;;;;;31604:19:0;:2;-1:-1:-1;;;;;31604:19:0;;:49;;;;-1:-1:-1;;;;;;31628:25:0;;;;;;:19;:25;;;;;;;;31627:26;31604:49;31600:178;;;31697:3;31687:6;31677:7;;:16;;;;:::i;:::-;31676:24;;;;:::i;:::-;31670:30;;31759:7;;31738:17;;31732:3;:23;;;;:::i;:::-;31731:35;;;;:::i;:::-;31715:51;;31600:178;31800:13;-1:-1:-1;;;;;31792:21:0;:4;-1:-1:-1;;;;;31792:21:0;;:49;;;;-1:-1:-1;;;;;;31818:23:0;;;;;;:19;:23;;;;;;;;31817:24;31792:49;31788:175;;;31884:3;31874:6;31865;;:15;;;;:::i;:::-;31864:23;;;;:::i;:::-;31858:29;;31945:6;;31925:16;;31919:3;:22;;;;:::i;:::-;31918:33;;;;:::i;:::-;31902:49;;31788:175;31973:13;31983:3;31973:13;;:::i;:::-;;-1:-1:-1;32001:7:0;;31997:340;;32025:40;32040:4;32054;32061:3;32025:14;:40::i;:::-;32105:3;32080:21;;:28;;;;;;;:::i;:::-;;;;;;;;32153:3;32123:26;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;32175:17:0;;32171:155;;32242:13;32213:25;;:42;;;;;;;:::i;:::-;;;;;;;;32297:13;32274:19;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;32171:155:0;32347:32;32362:4;32368:2;32372:6;32347:14;:32::i;:::-;30437:1950;;;;30368:2019;;;:::o;13673:191::-;13747:16;13766:6;;-1:-1:-1;;;;;13783:17:0;;;-1:-1:-1;;;;;;13783:17:0;;;;;;13816:40;;13766:6;;;;;;;13816:40;;13747:16;13816:40;13736:128;13673:191;:::o;34193:253::-;-1:-1:-1;;;;;34321:15:0;;;;;;:7;:15;;;;;:25;;34340:6;;34321:15;:25;;34340:6;;34321:25;:::i;:::-;;;;-1:-1:-1;;;;;;;34357:18:0;;;;;;:7;:18;;;;;:28;;34379:6;;34357:18;:28;;34379:6;;34357:28;:::i;:::-;;;;;;;;34420:9;-1:-1:-1;;;;;34403:35:0;34412:6;-1:-1:-1;;;;;34403:35:0;;34431:6;34403:35;;;;1566:25:1;;1554:2;1539:18;;1420:177;33419:638:0;33569:16;;;33583:1;33569:16;;;;;;;;33545:21;;33569:16;;;;;;;;;;-1:-1:-1;33569:16:0;33545:40;;33614:4;33596;33601:1;33596:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33596:23:0;;;-1:-1:-1;;;;;33596:23:0;;;;;33640:4;33630;33635:1;33630:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;33630:14:0;;;-1:-1:-1;;;;;33630:14:0;;;;;33655:62;33672:4;33687:15;33705:11;33655:8;:62::i;:::-;33756:240;;-1:-1:-1;;;33756:240:0;;-1:-1:-1;;;;;33756:15:0;:66;;;;:240;;33837:11;;33863:1;;33907:4;;33934;;33970:15;;33756:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34014:35;34031:11;34044:4;34014:35;;;;;;;:::i;37027:244::-;37148:6;37158:1;37148:11;37144:24;;37027:244;;:::o;37144:24::-;37179:9;37194;-1:-1:-1;;;;;37194:14:0;37216:6;37194:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37178:49;;;37243:20;37258:4;37243:20;;;;1393:14:1;1386:22;1368:41;;1356:2;1341:18;;1228:187;238:548;350:4;379:2;408;397:9;390:21;440:6;434:13;483:6;478:2;467:9;463:18;456:34;508:1;518:140;532:6;529:1;526:13;518:140;;;627:14;;;623:23;;617:30;593:17;;;612:2;589:26;582:66;547:10;;518:140;;;522:3;707:1;702:2;693:6;682:9;678:22;674:31;667:42;777:2;770;766:7;761:2;753:6;749:15;745:29;734:9;730:45;726:54;718:62;;;;238:548;;;;:::o;791:173::-;859:20;;-1:-1:-1;;;;;908:31:1;;898:42;;888:70;;954:1;951;944:12;888:70;791:173;;;:::o;969:254::-;1037:6;1045;1098:2;1086:9;1077:7;1073:23;1069:32;1066:52;;;1114:1;1111;1104:12;1066:52;1137:29;1156:9;1137:29;:::i;:::-;1127:39;1213:2;1198:18;;;;1185:32;;-1:-1:-1;;;969:254:1:o;1837:186::-;1896:6;1949:2;1937:9;1928:7;1924:23;1920:32;1917:52;;;1965:1;1962;1955:12;1917:52;1988:29;2007:9;1988:29;:::i;:::-;1978:39;1837:186;-1:-1:-1;;;1837:186:1:o;2028:328::-;2105:6;2113;2121;2174:2;2162:9;2153:7;2149:23;2145:32;2142:52;;;2190:1;2187;2180:12;2142:52;2213:29;2232:9;2213:29;:::i;:::-;2203:39;;2261:38;2295:2;2284:9;2280:18;2261:38;:::i;:::-;2251:48;;2346:2;2335:9;2331:18;2318:32;2308:42;;2028:328;;;;;:::o;2550:180::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;-1:-1:-1;2701:23:1;;2550:180;-1:-1:-1;2550:180:1:o;2943:248::-;3011:6;3019;3072:2;3060:9;3051:7;3047:23;3043:32;3040:52;;;3088:1;3085;3078:12;3040:52;-1:-1:-1;;3111:23:1;;;3181:2;3166:18;;;3153:32;;-1:-1:-1;2943:248:1:o;3196:118::-;3282:5;3275:13;3268:21;3261:5;3258:32;3248:60;;3304:1;3301;3294:12;3319:241;3375:6;3428:2;3416:9;3407:7;3403:23;3399:32;3396:52;;;3444:1;3441;3434:12;3396:52;3483:9;3470:23;3502:28;3524:5;3502:28;:::i;3565:260::-;3633:6;3641;3694:2;3682:9;3673:7;3669:23;3665:32;3662:52;;;3710:1;3707;3700:12;3662:52;3733:29;3752:9;3733:29;:::i;:::-;3723:39;;3781:38;3815:2;3804:9;3800:18;3781:38;:::i;:::-;3771:48;;3565:260;;;;;:::o;4879:127::-;4940:10;4935:3;4931:20;4928:1;4921:31;4971:4;4968:1;4961:15;4995:4;4992:1;4985:15;5011:128;5078:9;;;5099:11;;;5096:37;;;5113:18;;:::i;5144:125::-;5209:9;;;5230:10;;;5227:36;;;5243:18;;:::i;8360:245::-;8427:6;8480:2;8468:9;8459:7;8455:23;8451:32;8448:52;;;8496:1;8493;8486:12;8448:52;8528:9;8522:16;8547:28;8569:5;8547:28;:::i;12526:168::-;12599:9;;;12630;;12647:15;;;12641:22;;12627:37;12617:71;;12668:18;;:::i;12699:217::-;12739:1;12765;12755:132;;12809:10;12804:3;12800:20;12797:1;12790:31;12844:4;12841:1;12834:15;12872:4;12869:1;12862:15;12755:132;-1:-1:-1;12901:9:1;;12699:217::o;13053:127::-;13114:10;13109:3;13105:20;13102:1;13095:31;13145:4;13142:1;13135:15;13169:4;13166:1;13159:15;13185:461;13238:3;13276:5;13270:12;13303:6;13298:3;13291:19;13329:4;13358:2;13353:3;13349:12;13342:19;;13395:2;13388:5;13384:14;13416:1;13426:195;13440:6;13437:1;13434:13;13426:195;;;13505:13;;-1:-1:-1;;;;;13501:39:1;13489:52;;13561:12;;;;13596:15;;;;13537:1;13455:9;13426:195;;;-1:-1:-1;13637:3:1;;13185:461;-1:-1:-1;;;;;13185:461:1:o;13651:582::-;13950:6;13939:9;13932:25;13993:6;13988:2;13977:9;13973:18;13966:34;14036:3;14031:2;14020:9;14016:18;14009:31;13913:4;14057:57;14109:3;14098:9;14094:19;14086:6;14057:57;:::i;:::-;-1:-1:-1;;;;;14150:32:1;;;;14145:2;14130:18;;14123:60;-1:-1:-1;14214:3:1;14199:19;14192:35;14049:65;13651:582;-1:-1:-1;;;13651:582:1:o;14238:332::-;14445:6;14434:9;14427:25;14488:2;14483;14472:9;14468:18;14461:30;14408:4;14508:56;14560:2;14549:9;14545:18;14537:6;14508:56;:::i;:::-;14500:64;14238:332;-1:-1:-1;;;;14238:332:1:o
Swarm Source
ipfs://f00447377a03cb56245484cb4d69754dc2bbf2286be9f7d417105ce8df9c21ac
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.