More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 457 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21153044 | 60 days ago | IN | 0 ETH | 0.00055571 | ||||
Approve | 20114899 | 205 days ago | IN | 0 ETH | 0.00029036 | ||||
Approve | 20109399 | 206 days ago | IN | 0 ETH | 0.00007473 | ||||
Approve | 20109386 | 206 days ago | IN | 0 ETH | 0.0001337 | ||||
Approve | 20107037 | 206 days ago | IN | 0 ETH | 0.00015503 | ||||
Approve | 20106943 | 206 days ago | IN | 0 ETH | 0.00016587 | ||||
Approve | 19912041 | 233 days ago | IN | 0 ETH | 0.00056335 | ||||
Approve | 19875632 | 238 days ago | IN | 0 ETH | 0.00043408 | ||||
Transfer | 19859118 | 240 days ago | IN | 0 ETH | 0.00024107 | ||||
Approve | 19818083 | 246 days ago | IN | 0 ETH | 0.00020857 | ||||
Set_Swap_And_Liq... | 19818077 | 246 days ago | IN | 0 ETH | 0.00023392 | ||||
Approve | 19722855 | 260 days ago | IN | 0 ETH | 0.00031572 | ||||
Approve | 19529481 | 287 days ago | IN | 0 ETH | 0.00113945 | ||||
Approve | 19424465 | 301 days ago | IN | 0 ETH | 0.00189005 | ||||
Approve | 19424458 | 301 days ago | IN | 0 ETH | 0.00191691 | ||||
Approve | 19397146 | 305 days ago | IN | 0 ETH | 0.00148947 | ||||
Approve | 19302437 | 319 days ago | IN | 0 ETH | 0.00096103 | ||||
Approve | 19231171 | 329 days ago | IN | 0 ETH | 0.0010548 | ||||
Approve | 19219349 | 330 days ago | IN | 0 ETH | 0.00062617 | ||||
Approve | 19218163 | 330 days ago | IN | 0 ETH | 0.00060505 | ||||
Approve | 19201202 | 333 days ago | IN | 0 ETH | 0.00104944 | ||||
Approve | 19134956 | 342 days ago | IN | 0 ETH | 0.00198411 | ||||
Approve | 19134841 | 342 days ago | IN | 0 ETH | 0.00135063 | ||||
Approve | 19073174 | 351 days ago | IN | 0 ETH | 0.00047938 | ||||
Approve | 19072154 | 351 days ago | IN | 0 ETH | 0.00063367 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21153046 | 60 days ago | 0.00261875 ETH | ||||
21153046 | 60 days ago | 0.00785627 ETH | ||||
21153046 | 60 days ago | 0.00000986 ETH | ||||
21153046 | 60 days ago | 0.00130937 ETH | ||||
21153046 | 60 days ago | 0.01177856 ETH | ||||
20186078 | 195 days ago | 0.00173688 ETH | ||||
20186078 | 195 days ago | 0.00521066 ETH | ||||
20186078 | 195 days ago | 0.00000584 ETH | ||||
20186078 | 195 days ago | 0.00086844 ETH | ||||
20186078 | 195 days ago | 0.00778978 ETH | ||||
20109390 | 206 days ago | 0.00439669 ETH | ||||
20109390 | 206 days ago | 0.01319008 ETH | ||||
20109390 | 206 days ago | 0.0000262 ETH | ||||
20109390 | 206 days ago | 0.00219834 ETH | ||||
20109390 | 206 days ago | 0.01976369 ETH | ||||
20106947 | 206 days ago | 0.00041566 ETH | ||||
20106947 | 206 days ago | 0.00124699 ETH | ||||
20106947 | 206 days ago | 0.00002143 ETH | ||||
20106947 | 206 days ago | 0.00020783 ETH | ||||
20106947 | 206 days ago | 0.00167401 ETH | ||||
19818086 | 246 days ago | 0.01385936 ETH | ||||
19818086 | 246 days ago | 0.04157809 ETH | ||||
19818086 | 246 days ago | 0.00019647 ETH | ||||
19818086 | 246 days ago | 0.00692968 ETH | ||||
19818086 | 246 days ago | 0.06231414 ETH |
Loading...
Loading
Contract Name:
ORB
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-19 */ // SPDX-License-Identifier: MIT /* ███╗░░░███╗░█████╗░░██████╗░██╗░█████╗░██╗░░░██╗███████╗██████╗░░██████╗███████╗ ████╗░████║██╔══██╗██╔════╝░██║██╔══██╗██║░░░██║██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔████╔██║███████║██║░░██╗░██║██║░░╚═╝╚██╗░██╔╝█████╗░░██████╔╝╚█████╗░█████╗░░ ██║╚██╔╝██║██╔══██║██║░░╚██╗██║██║░░██╗░╚████╔╝░██╔══╝░░██╔══██╗░╚═══██╗██╔══╝░░ ██║░╚═╝░██║██║░░██║╚██████╔╝██║╚█████╔╝░░╚██╔╝░░███████╗██║░░██║██████╔╝███████╗ ╚═╝░░░░░╚═╝╚═╝░░╚═╝░╚═════╝░╚═╝░╚════╝░░░░╚═╝░░░╚══════╝╚═╝░░╚═╝╚═════╝░╚══════╝ */ pragma solidity ^0.8.18; 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); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @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, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ORB is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; // Tracking status of wallets mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFee; /* WALLETS */ address payable private Developmentwallet; address payable private NFTFarm; address public MagicverseBridge; /* TOKEN DETAILS */ string private _name = "ORB Token"; string private _symbol = "ORB"; uint8 private _decimals = 18; uint256 private _tTotal; uint256 private _tFeeTotal; // Counter for liquify trigger uint8 private txCount = 0; uint8 private swapTrigger = 3; // Setting the initial fees uint256 private _TotalFee = 5; uint256 public _buyFee = 5; uint256 public _sellFee = 5; //Fees distribution uint256 public LiquidityFee = 2000; uint256 public NFTFarmFee = 6000; uint256 public DevelopmentFee = 2000; uint256 private TotalfeeforDistribution = 10000; // 'Previous fees' are used to keep track of fee settings when removing and restoring fees uint256 private _previousTotalFee = _TotalFee; uint256 private _previousBuyFee = _buyFee; uint256 private _previousSellFee = _sellFee; /* WALLET LIMITS */ // Maximum swap amount uint256 public _maxSwapAmount = 1000000000 * 10**18; /* Swap Router SET UP */ IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool public inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public TradingInitialized; event SwapAndLiquifyEnabledUpdated(bool enabled); event TradingStarted( address TokenAddress, address PairAddress, uint256 TokenAmount, uint256 EthAmount ); event SwapAndLiquify( uint256 tokensSwapped, uint256 nativeReceived ); event LiquiditySent( uint256 tokensIntoLiquidity, uint256 CROintoLiquidity ); event NFTFarmSent( address to, uint256 nativeSent ); event DevelopmentSent( address to, uint256 nativeSent ); /* MODIFIERS */ // Prevent processing while already processing! modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } // Mint and burn functions can only be called by bridge! modifier onlyBridge { require(msg.sender == MagicverseBridge); _; } /* */ constructor () { _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; } /* STANDARD ERC20 COMPLIANCE FUNCTIONS */ function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function bridgeMint(address to, uint256 amount) public onlyBridge() { _tOwned[to] = _tOwned[to].add(amount); _tTotal = _tTotal.add(amount); emit Transfer(address(0), to, amount); } function bridgeBurn(address from, uint256 amount) public onlyBridge() { _tOwned[from] = _tOwned[from].sub(amount); _tTotal = _tTotal.sub(amount); emit Transfer(from, address(0), amount); } /* END OF STANDARD ERC20 COMPLIANCE FUNCTIONS */ /* FEES */ // Set a wallet address so that it does not have to pay transaction fees function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } // Set a wallet address so that it has to pay transaction fees function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } /* SETTING FEES Initial fees are set to 5% buy 5% sell */ function _set_Fees(uint256 Buy_Fee, uint256 Sell_Fee) external onlyOwner() { _sellFee = Sell_Fee; _buyFee = Buy_Fee; } function _set_Distribution_Fees(uint256 LiquidityFeex1000, uint256 NFTFarmFeex1000,uint256 DevelopmentFeex1000) external onlyOwner() { LiquidityFee = LiquidityFeex1000; NFTFarmFee = NFTFarmFeex1000; DevelopmentFee = DevelopmentFeex1000; TotalfeeforDistribution = LiquidityFee.add(NFTFarmFee).add(DevelopmentFee); } // Update NFT Farm wallet function Wallet_Update_NFTFarm(address payable NFTFarm_Wallet) public onlyOwner() { NFTFarm = NFTFarm_Wallet; _isExcludedFromFee[NFTFarm_Wallet] = true; } // Update Development wallet function Wallet_Update_Development(address payable Development_Wallet) public onlyOwner() { Developmentwallet = Development_Wallet; _isExcludedFromFee[Development_Wallet] = true; } // Update Bridge address function Wallet_Bridge(address Bridge_Wallet) public onlyOwner() { MagicverseBridge = Bridge_Wallet; _isExcludedFromFee[Bridge_Wallet] = true; } /* PROCESSING TOKENS - SET UP */ // Toggle on and off to auto process tokens to BNB wallet function set_Swap_And_Liquify_Enabled(bool true_or_false) public onlyOwner { swapAndLiquifyEnabled = true_or_false; emit SwapAndLiquifyEnabledUpdated(true_or_false); } // This will set the number of transactions required before the 'swapAndLiquify' function triggers function set_Number_Of_Transactions_Before_Liquify_Trigger(uint8 number_of_transactions) public onlyOwner { swapTrigger = number_of_transactions; } // This function is required so that the contract can receive Native Coin receive() external payable {} /* When sending tokens to another wallet (not buying or selling) if noFeeToTransfer is true there will be no fee */ bool public noFeeToTransfer = true; // Option to set fee or no fee for transfer (just in case the no fee transfer option is exploited in future!) // True = there will be no fees when moving tokens around or giving them to friends! (There will only be a fee to buy or sell) // False = there will be a fee when buying/selling/tranfering tokens // Default is true function set_Transfers_Without_Fees(bool true_or_false) external onlyOwner { noFeeToTransfer = true_or_false; } /* WALLET LIMITS Wallets are limited in two ways. The amount of tokens that can be purchased in one transaction and the total amount of tokens a wallet can buy. Limiting a wallet prevents one wallet from holding too many tokens, which can scare away potential buyers that worry that a whale might dump! */ // Remove all fees function removeAllFee() private { if(_TotalFee == 0 && _buyFee == 0 && _sellFee == 0) return; _previousBuyFee = _buyFee; _previousSellFee = _sellFee; _previousTotalFee = _TotalFee; _buyFee = 0; _sellFee = 0; _TotalFee = 0; } // Restore all fees function restoreAllFee() private { _TotalFee = _previousTotalFee; _buyFee = _previousBuyFee; _sellFee = _previousSellFee; } // Approve a wallet to sell tokens function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0) && spender != address(0), "ERR: zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { /* PROCESSING */ // SwapAndLiquify is triggered after every X transactions - this number can be adjusted using swapTrigger if( txCount >= swapTrigger && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled ) { txCount = 0; uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > _maxSwapAmount) {contractTokenBalance = _maxSwapAmount;} if(contractTokenBalance > 0){ swapAndLiquify(contractTokenBalance); } } /* REMOVE FEES IF REQUIRED Fee removed if the to or from address is excluded from fee. Fee removed if the transfer is NOT a buy or sell. Change fee amount for buy or sell. */ bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || (noFeeToTransfer && from != uniswapV2Pair && to != uniswapV2Pair)){ takeFee = false; } else if (from == uniswapV2Pair){_TotalFee = _buyFee;} else if (to == uniswapV2Pair){_TotalFee = _sellFee;} _tokenTransfer(from,to,amount,takeFee); } /* PROCESSING FEES Fees are added to the contract as tokens, these functions exchange the tokens for Native coins and send to different wallets. */ // Send Native coin to external wallet function sendToWallet(address payable wallet, uint256 amount) private { wallet.transfer(amount); } // Processing tokens from contract function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensforlp = contractTokenBalance.mul(LiquidityFee).div(TotalfeeforDistribution).div(2); uint256 amountToSwap = contractTokenBalance.sub(tokensforlp); swapTokensForNative(amountToSwap); uint256 amountNative = address(this).balance; emit SwapAndLiquify (amountToSwap,amountNative); //calcute payout shares uint256 totalNativeFee = TotalfeeforDistribution.sub(LiquidityFee.div(2)); uint256 amountForLiquidity = amountNative.mul(LiquidityFee).div(totalNativeFee).div(2); uint256 amountForNFTFarm = amountNative.mul(NFTFarmFee).div(totalNativeFee); uint256 amountForDevelopment = amountNative.sub(amountForLiquidity).sub(amountForNFTFarm); if (amountForLiquidity > 0) { addLiquidity(tokensforlp, amountForLiquidity); emit LiquiditySent(tokensforlp, amountForLiquidity); } if (amountForNFTFarm > 0) { sendToWallet(NFTFarm,amountForNFTFarm); emit NFTFarmSent(NFTFarm, amountForNFTFarm); } if (amountForDevelopment > 0) { sendToWallet(Developmentwallet,amountForDevelopment); emit DevelopmentSent(Developmentwallet, amountForDevelopment); } } function addLiquidity(uint256 tokenAmount, uint256 nativeAmount) private returns (uint256, uint256) { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity (uint amountToken, uint amountETH, ) = uniswapV2Router.addLiquidityETH{value: nativeAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); return (uint256(amountToken), uint256(amountETH)); } // Manual Token Process Trigger - Enter the percent of the tokens that you'd like to send to process function process_Tokens_Now (uint256 percent_Of_Tokens_To_Process) public onlyOwner { // Do not trigger if already in swap require(!inSwapAndLiquify, "Currently processing, try later."); if (percent_Of_Tokens_To_Process > 100){percent_Of_Tokens_To_Process == 100;} uint256 tokensOnContract = balanceOf(address(this)); uint256 sendTokens = tokensOnContract*percent_Of_Tokens_To_Process/100; swapAndLiquify(sendTokens); } // Swapping tokens for Native coin using Chains Swap function swapTokensForNative(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of Native path, address(this), block.timestamp ); } /* PURGE RANDOM TOKENS - Add the random token address and a wallet to send them to */ // Remove random tokens from the contract and send to a wallet function remove_Random_Tokens(address random_Token_Address, address send_to_wallet, uint256 number_of_tokens) public onlyOwner returns(bool _sent){ require(random_Token_Address != address(this), "Can not remove native token"); uint256 randomBalance = IERC20(random_Token_Address).balanceOf(address(this)); if (number_of_tokens > randomBalance){number_of_tokens = randomBalance;} _sent = IERC20(random_Token_Address).transfer(send_to_wallet, number_of_tokens); } /* INITIALIZE TRADING */ // Sets Router,Pair and adds LP. Can only executed once by the owner function startTrading(address Router) public onlyOwner() { require(!TradingInitialized); TradingInitialized = true; IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(Router); uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH()); uniswapV2Router = _newuniswapV2Router; uint256 TokenForInitialLp = balanceOf(address(this)); uint256 ETHForInitialLp = address(this).balance; _approve(address(this), address(uniswapV2Router), TokenForInitialLp); uniswapV2Router.addLiquidityETH{value: ETHForInitialLp}( address(this), TokenForInitialLp, TokenForInitialLp, ETHForInitialLp, msg.sender, block.timestamp+1800 ); emit TradingStarted(address(this),uniswapV2Pair,TokenForInitialLp,ETHForInitialLp); } /* UPDATE ROUTER AND LIQUIDITY PAIRING */ // Set new router and make the new pair address function set_New_Router_and_Make_Pair(address newRouter) public onlyOwner() { IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH()); uniswapV2Router = _newuniswapV2Router; } // Set new router function set_New_Router_Address(address newRouter) public onlyOwner() { IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Router = _newuniswapV2Router; } function set_New_Pair_Address(address newPair) public onlyOwner() { uniswapV2Pair = newPair; } /* TOKEN TRANSFERS */ // Check if token transfer needs to process fees function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee){ removeAllFee(); } else { txCount++; } _transferTokens(sender, recipient, amount); if(!takeFee) restoreAllFee(); } // Redistributing tokens and adding the fee to the contract address function _transferTokens(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _tOwned[address(this)] = _tOwned[address(this)].add(tFee); emit Transfer(sender, recipient, tTransferAmount); } // Calculating the fee in tokens function _getValues(uint256 tAmount) private view returns (uint256, uint256) { uint256 tFee = tAmount*_TotalFee/100; uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } }
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":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"nativeSent","type":"uint256"}],"name":"DevelopmentSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CROintoLiquidity","type":"uint256"}],"name":"LiquiditySent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"nativeSent","type":"uint256"}],"name":"NFTFarmSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","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":"address","name":"TokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"PairAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"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"},{"inputs":[],"name":"DevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MagicverseBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTFarmFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradingInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Bridge_Wallet","type":"address"}],"name":"Wallet_Bridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Development_Wallet","type":"address"}],"name":"Wallet_Update_Development","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"NFTFarm_Wallet","type":"address"}],"name":"Wallet_Update_NFTFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"LiquidityFeex1000","type":"uint256"},{"internalType":"uint256","name":"NFTFarmFeex1000","type":"uint256"},{"internalType":"uint256","name":"DevelopmentFeex1000","type":"uint256"}],"name":"_set_Distribution_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Buy_Fee","type":"uint256"},{"internalType":"uint256","name":"Sell_Fee","type":"uint256"}],"name":"_set_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noFeeToTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_Of_Tokens_To_Process","type":"uint256"}],"name":"process_Tokens_Now","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"random_Token_Address","type":"address"},{"internalType":"address","name":"send_to_wallet","type":"address"},{"internalType":"uint256","name":"number_of_tokens","type":"uint256"}],"name":"remove_Random_Tokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"set_New_Pair_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"set_New_Router_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"set_New_Router_and_Make_Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"number_of_transactions","type":"uint8"}],"name":"set_Number_Of_Transactions_Before_Liquify_Trigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"true_or_false","type":"bool"}],"name":"set_Swap_And_Liquify_Enabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"true_or_false","type":"bool"}],"name":"set_Transfers_Without_Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Router","type":"address"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600960809081526827a921102a37b5b2b760b91b60a0526007906200002a90826200023e565b5060408051808201909152600381526227a92160e91b60208201526008906200005490826200023e565b5060098054601260ff199091168117909155600c805461ffff19166103001790556005600d819055600e819055600f8190556107d06010819055611770601155909155612710601355601481905560158190556016556b033b2e3c9fd0803ce80000006017556019805462ff00ff60a81b19166201000160a81b179055348015620000de57600080fd5b50620000ea3362000149565b600160036000620001036000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260039092529020805490911660011790556200030a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001c457607f821691505b602082108103620001e557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023957600081815260208120601f850160051c81016020861015620002145750805b601f850160051c820191505b81811015620002355782815560010162000220565b5050505b505050565b81516001600160401b038111156200025a576200025a62000199565b62000272816200026b8454620001af565b84620001eb565b602080601f831160018114620002aa5760008415620002915750858301515b600019600386901b1c1916600185901b17855562000235565b600085815260208120601f198616915b82811015620002db57888601518255948401946001909101908401620002ba565b5085821015620002fa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61228d806200031a6000396000f3fe6080604052600436106102815760003560e01c80637231d2171161014f578063a514a07d116100c1578063ddbf52661161007a578063ddbf5266146107c9578063e06bd4a5146107e9578063e8fb57fb146107ff578063ea2f0b371461081f578063f2fde38b1461083f578063f7739b5f1461085f57600080fd5b8063a514a07d146106e3578063a9059cbb14610703578063c2cb11f614610723578063c5e3869214610743578063d785d5be14610763578063dd62ed3e1461078357600080fd5b80638da5cb5b116101135780638da5cb5b14610639578063904288121461065757806394cb2e521461066d57806395d89b411461068d578063a457c2d7146106a2578063a4620d0f146106c257600080fd5b80637231d2171461058957806374f4f547146105a9578063768dc710146105c95780637caefa89146105f95780638c2a993e1461061957600080fd5b806336b1a1bc116101f357806349bd5a5e116101ac57806349bd5a5e146104c75780634a74bb02146104e7578063590f897e1461050857806367cbd84c1461051e57806370a082311461053e578063715018a61461057457600080fd5b806336b1a1bc1461042557806339509351146104455780633ad868101461046557806340b9a54b1461047b57806340db65f614610491578063437823ec146104a757600080fd5b806318160ddd1161024557806318160ddd14610363578063220f66961461038257806323b872dd146103a357806327b5e1a0146103c3578063313ce567146103e35780633343ab831461040557600080fd5b806306fdde031461028d578063095ea7b3146102b85780631282a0a0146102e857806313fad07a1461030a5780631694505e1461032b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261087f565b6040516102af9190611e1e565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004611e81565b610911565b60405190151581526020016102af565b3480156102f457600080fd5b50610308610303366004611ead565b610928565b005b34801561031657600080fd5b506019546102d890600160b81b900460ff1681565b34801561033757600080fd5b5060185461034b906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036f57600080fd5b50600a545b6040519081526020016102af565b34801561038e57600080fd5b506019546102d890600160a01b900460ff1681565b3480156103af57600080fd5b506102d86103be366004611eca565b610aab565b3480156103cf57600080fd5b506103086103de366004611ead565b610b14565b3480156103ef57600080fd5b5060095460405160ff90911681526020016102af565b34801561041157600080fd5b506102d8610420366004611eca565b610b56565b34801561043157600080fd5b50610308610440366004611ead565b610cb2565b34801561045157600080fd5b506102d8610460366004611e81565b610cdc565b34801561047157600080fd5b5061037460125481565b34801561048757600080fd5b50610374600e5481565b34801561049d57600080fd5b5061037460105481565b3480156104b357600080fd5b506103086104c2366004611ead565b610d12565b3480156104d357600080fd5b5060195461034b906001600160a01b031681565b3480156104f357600080fd5b506019546102d890600160a81b900460ff1681565b34801561051457600080fd5b50610374600f5481565b34801561052a57600080fd5b50610308610539366004611f0b565b610d3e565b34801561054a57600080fd5b50610374610559366004611ead565b6001600160a01b031660009081526001602052604090205490565b34801561058057600080fd5b50610308610d4e565b34801561059557600080fd5b506103086105a4366004611ead565b610d62565b3480156105b557600080fd5b506103086105c4366004611e81565b611010565b3480156105d557600080fd5b506102d86105e4366004611ead565b60036020526000908152604090205460ff1681565b34801561060557600080fd5b50610308610614366004611f2d565b6110b9565b34801561062557600080fd5b50610308610634366004611e81565b6110dd565b34801561064557600080fd5b506000546001600160a01b031661034b565b34801561066357600080fd5b5061037460115481565b34801561067957600080fd5b50610308610688366004611f50565b61117e565b34801561069957600080fd5b506102a26111b1565b3480156106ae57600080fd5b506102d86106bd366004611e81565b6111c0565b3480156106ce57600080fd5b506019546102d890600160b01b900460ff1681565b3480156106ef57600080fd5b506103086106fe366004611f8a565b61120f565b34801561070f57600080fd5b506102d861071e366004611e81565b611235565b34801561072f57600080fd5b5061030861073e366004611ead565b611242565b34801561074f57600080fd5b5061030861075e366004611ead565b611284565b34801561076f57600080fd5b5061030861077e366004611ead565b6112c6565b34801561078f57600080fd5b5061037461079e366004611fa7565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107d557600080fd5b506103086107e4366004611fe0565b6112f0565b3480156107f557600080fd5b5061037460175481565b34801561080b57600080fd5b5060065461034b906001600160a01b031681565b34801561082b57600080fd5b5061030861083a366004611ead565b611389565b34801561084b57600080fd5b5061030861085a366004611ead565b6113b2565b34801561086b57600080fd5b5061030861087a366004611f8a565b61142b565b60606007805461088e90611ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611ff9565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061091e33848461148b565b5060015b92915050565b61093061154c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190612033565b601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b6000610ab88484846115a6565b610b0a8433610b058560405180606001604052806028815260200161220b602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061171f565b61148b565b5060019392505050565b610b1c61154c565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000610b6061154c565b306001600160a01b03851603610bbd5760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742072656d6f7665206e617469766520746f6b656e000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c289190612050565b905080831115610c36578092505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190612069565b95945050505050565b610cba61154c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161091e918590610b05908661174b565b610d1a61154c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610d4661154c565b600f55600e55565b610d5661154c565b610d60600061175e565b565b610d6a61154c565b601954600160b01b900460ff1615610d8157600080fd5b6019805460ff60b01b1916600160b01b1790556040805163c45a015560e01b8152905182916001600160a01b0383169163c45a0155916004808201926020929091908290030181865afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e009190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612033565b601980546001600160a01b039283166001600160a01b03199182161790915560188054928416929091168217905530600081815260016020526040902054914791610f2d918461148b565b6018546001600160a01b031663f305d719823085808333610f504261070861209c565b6040518863ffffffff1660e01b8152600401610f71969594939291906120af565b60606040518083038185885af1158015610f8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb491906120ea565b5050601954604080513081526001600160a01b0390921660208301528101849052606081018390527f6059b39ae02bb6d64c653bc7dc67f2d0108e9cfa6c9f254c3af163640bc14f28915060800160405180910390a150505050565b6006546001600160a01b0316331461102757600080fd5b6001600160a01b03821660009081526001602052604090205461104a90826117ae565b6001600160a01b038316600090815260016020526040902055600a5461107090826117ae565b600a556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6110c161154c565b600c805460ff9092166101000261ff0019909216919091179055565b6006546001600160a01b031633146110f457600080fd5b6001600160a01b038216600090815260016020526040902054611117908261174b565b6001600160a01b038316600090815260016020526040902055600a5461113d908261174b565b600a556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016110ad565b61118661154c565b6010839055601182905560128190556111a9816111a3858561174b565b9061174b565b601355505050565b60606008805461088e90611ff9565b600061091e3384610b0585604051806060016040528060258152602001612233602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061171f565b61121761154c565b60198054911515600160b81b0260ff60b81b19909216919091179055565b600061091e3384846115a6565b61124a61154c565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b61128c61154c565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6112ce61154c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6112f861154c565b601954600160a01b900460ff16156113525760405162461bcd60e51b815260206004820181905260248201527f43757272656e746c792070726f63657373696e672c20747279206c617465722e6044820152606401610bb4565b3060009081526001602052604081205490606461136f8484612118565b611379919061212f565b9050611384816117ba565b505050565b61139161154c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6113ba61154c565b6001600160a01b03811661141f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b6114288161175e565b50565b61143361154c565b60198054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061148090831515815260200190565b60405180910390a150565b6001600160a01b038316158015906114ab57506001600160a01b03821615155b6114eb5760405162461bcd60e51b81526020600482015260116024820152704552523a207a65726f206164647265737360781b6044820152606401610bb4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bb4565b600c5460ff610100820481169116108015906115cc5750601954600160a01b900460ff16155b80156115e557506019546001600160a01b038381169116145b80156115fa5750601954600160a81b900460ff165b1561163957600c805460ff191690553060009081526001602052604090205460175481111561162857506017545b801561163757611637816117ba565b505b6001600160a01b03831660009081526003602052604090205460019060ff168061167b57506001600160a01b03831660009081526003602052604090205460ff165b806116c25750601954600160b81b900460ff1680156116a857506019546001600160a01b03858116911614155b80156116c257506019546001600160a01b03848116911614155b156116cf5750600061170d565b6019546001600160a01b03908116908516036116f057600e54600d5561170d565b6019546001600160a01b039081169084160361170d57600f54600d555b611719848484846119ea565b50505050565b600081848411156117435760405162461bcd60e51b8152600401610bb49190611e1e565b505050900390565b6000611757828461209c565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006117578284612151565b6019805460ff60a01b1916600160a01b1790556013546010546000916117f0916002916117ea9182908790611a50565b90611a5c565b905060006117fe83836117ae565b905061180981611a68565b604080518281524760208201819052917f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1600061186861185f6002601054611a5c90919063ffffffff16565b601354906117ae565b9050600061188a60026117ea846117ea60105488611a5090919063ffffffff16565b905060006118a7836117ea60115487611a5090919063ffffffff16565b905060006118bf826118b987866117ae565b906117ae565b9050821561190d576118d18784611bc2565b505060408051888152602081018590527f6e500010cf745ca08b8ba2c0086153fc3f608a44464334aaa6528b28b720c546910160405180910390a15b811561197057600554611929906001600160a01b031683611c7f565b600554604080516001600160a01b039092168252602082018490527f4d8231c76dd338af8b275ae59e1591f03f77c39feb78606f6ca7a6099e589597910160405180910390a15b80156119d35760045461198c906001600160a01b031682611c7f565b600454604080516001600160a01b039092168252602082018390527f19bb39aae0d5db58582d17592eb53aa5301ac156a83b2edd05b74403e3b693a8910160405180910390a15b50506019805460ff60a01b19169055505050505050565b806119fc576119f7611cb5565b611a29565b600c805460ff16906000611a0f83612164565b91906101000a81548160ff021916908360ff160217905550505b611a34848484611cfa565b8061171957611719601454600d55601554600e55601654600f55565b60006117578284612118565b6000611757828461212f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9d57611a9d612183565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190612033565b81600181518110611b2d57611b2d612183565b6001600160a01b039283166020918202929092010152601854611b53913091168461148b565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8c908590600090869030904290600401612199565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050505050565b6018546000908190611bdf9030906001600160a01b03168661148b565b60185460009081906001600160a01b031663f305d7198630898580611c0c6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c2e969594939291906120af565b60606040518083038185885af1158015611c4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7191906120ea565b509097909650945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611384573d6000803e3d6000fd5b600d54158015611cc55750600e54155b8015611cd15750600f54155b15611cd857565b600e8054601555600f8054601655600d80546014556000928390559082905555565b600080611d0683611de6565b6001600160a01b0387166000908152600160205260409020549193509150611d2e90846117ae565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611d5d908361174b565b6001600160a01b038516600090815260016020526040808220929092553081522054611d89908261174b565b3060009081526001602090815260409182902092909255518381526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b60008060006064600d5485611dfb9190612118565b611e05919061212f565b90506000611e1385836117ae565b959194509092505050565b600060208083528351808285015260005b81811015611e4b57858101830151858201604001528201611e2f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461142857600080fd5b60008060408385031215611e9457600080fd5b8235611e9f81611e6c565b946020939093013593505050565b600060208284031215611ebf57600080fd5b813561175781611e6c565b600080600060608486031215611edf57600080fd5b8335611eea81611e6c565b92506020840135611efa81611e6c565b929592945050506040919091013590565b60008060408385031215611f1e57600080fd5b50508035926020909101359150565b600060208284031215611f3f57600080fd5b813560ff8116811461175757600080fd5b600080600060608486031215611f6557600080fd5b505081359360208301359350604090920135919050565b801515811461142857600080fd5b600060208284031215611f9c57600080fd5b813561175781611f7c565b60008060408385031215611fba57600080fd5b8235611fc581611e6c565b91506020830135611fd581611e6c565b809150509250929050565b600060208284031215611ff257600080fd5b5035919050565b600181811c9082168061200d57607f821691505b60208210810361202d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561204557600080fd5b815161175781611e6c565b60006020828403121561206257600080fd5b5051919050565b60006020828403121561207b57600080fd5b815161175781611f7c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092257610922612086565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156120ff57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761092257610922612086565b60008261214c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092257610922612086565b600060ff821660ff810361217a5761217a612086565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e95784516001600160a01b0316835293830193918301916001016121c4565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec795346660535d7c836921003d6d52641c9a0f014975436358df4cb9c0c67f564736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102815760003560e01c80637231d2171161014f578063a514a07d116100c1578063ddbf52661161007a578063ddbf5266146107c9578063e06bd4a5146107e9578063e8fb57fb146107ff578063ea2f0b371461081f578063f2fde38b1461083f578063f7739b5f1461085f57600080fd5b8063a514a07d146106e3578063a9059cbb14610703578063c2cb11f614610723578063c5e3869214610743578063d785d5be14610763578063dd62ed3e1461078357600080fd5b80638da5cb5b116101135780638da5cb5b14610639578063904288121461065757806394cb2e521461066d57806395d89b411461068d578063a457c2d7146106a2578063a4620d0f146106c257600080fd5b80637231d2171461058957806374f4f547146105a9578063768dc710146105c95780637caefa89146105f95780638c2a993e1461061957600080fd5b806336b1a1bc116101f357806349bd5a5e116101ac57806349bd5a5e146104c75780634a74bb02146104e7578063590f897e1461050857806367cbd84c1461051e57806370a082311461053e578063715018a61461057457600080fd5b806336b1a1bc1461042557806339509351146104455780633ad868101461046557806340b9a54b1461047b57806340db65f614610491578063437823ec146104a757600080fd5b806318160ddd1161024557806318160ddd14610363578063220f66961461038257806323b872dd146103a357806327b5e1a0146103c3578063313ce567146103e35780633343ab831461040557600080fd5b806306fdde031461028d578063095ea7b3146102b85780631282a0a0146102e857806313fad07a1461030a5780631694505e1461032b57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261087f565b6040516102af9190611e1e565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004611e81565b610911565b60405190151581526020016102af565b3480156102f457600080fd5b50610308610303366004611ead565b610928565b005b34801561031657600080fd5b506019546102d890600160b81b900460ff1681565b34801561033757600080fd5b5060185461034b906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036f57600080fd5b50600a545b6040519081526020016102af565b34801561038e57600080fd5b506019546102d890600160a01b900460ff1681565b3480156103af57600080fd5b506102d86103be366004611eca565b610aab565b3480156103cf57600080fd5b506103086103de366004611ead565b610b14565b3480156103ef57600080fd5b5060095460405160ff90911681526020016102af565b34801561041157600080fd5b506102d8610420366004611eca565b610b56565b34801561043157600080fd5b50610308610440366004611ead565b610cb2565b34801561045157600080fd5b506102d8610460366004611e81565b610cdc565b34801561047157600080fd5b5061037460125481565b34801561048757600080fd5b50610374600e5481565b34801561049d57600080fd5b5061037460105481565b3480156104b357600080fd5b506103086104c2366004611ead565b610d12565b3480156104d357600080fd5b5060195461034b906001600160a01b031681565b3480156104f357600080fd5b506019546102d890600160a81b900460ff1681565b34801561051457600080fd5b50610374600f5481565b34801561052a57600080fd5b50610308610539366004611f0b565b610d3e565b34801561054a57600080fd5b50610374610559366004611ead565b6001600160a01b031660009081526001602052604090205490565b34801561058057600080fd5b50610308610d4e565b34801561059557600080fd5b506103086105a4366004611ead565b610d62565b3480156105b557600080fd5b506103086105c4366004611e81565b611010565b3480156105d557600080fd5b506102d86105e4366004611ead565b60036020526000908152604090205460ff1681565b34801561060557600080fd5b50610308610614366004611f2d565b6110b9565b34801561062557600080fd5b50610308610634366004611e81565b6110dd565b34801561064557600080fd5b506000546001600160a01b031661034b565b34801561066357600080fd5b5061037460115481565b34801561067957600080fd5b50610308610688366004611f50565b61117e565b34801561069957600080fd5b506102a26111b1565b3480156106ae57600080fd5b506102d86106bd366004611e81565b6111c0565b3480156106ce57600080fd5b506019546102d890600160b01b900460ff1681565b3480156106ef57600080fd5b506103086106fe366004611f8a565b61120f565b34801561070f57600080fd5b506102d861071e366004611e81565b611235565b34801561072f57600080fd5b5061030861073e366004611ead565b611242565b34801561074f57600080fd5b5061030861075e366004611ead565b611284565b34801561076f57600080fd5b5061030861077e366004611ead565b6112c6565b34801561078f57600080fd5b5061037461079e366004611fa7565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107d557600080fd5b506103086107e4366004611fe0565b6112f0565b3480156107f557600080fd5b5061037460175481565b34801561080b57600080fd5b5060065461034b906001600160a01b031681565b34801561082b57600080fd5b5061030861083a366004611ead565b611389565b34801561084b57600080fd5b5061030861085a366004611ead565b6113b2565b34801561086b57600080fd5b5061030861087a366004611f8a565b61142b565b60606007805461088e90611ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90611ff9565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b600061091e33848461148b565b5060015b92915050565b61093061154c565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a089190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190612033565b601980546001600160a01b039283166001600160a01b0319918216179091556018805493909216921691909117905550565b6000610ab88484846115a6565b610b0a8433610b058560405180606001604052806028815260200161220b602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061171f565b61148b565b5060019392505050565b610b1c61154c565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000610b6061154c565b306001600160a01b03851603610bbd5760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742072656d6f7665206e617469766520746f6b656e000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c289190612050565b905080831115610c36578092505b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190612069565b95945050505050565b610cba61154c565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161091e918590610b05908661174b565b610d1a61154c565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610d4661154c565b600f55600e55565b610d5661154c565b610d60600061175e565b565b610d6a61154c565b601954600160b01b900460ff1615610d8157600080fd5b6019805460ff60b01b1916600160b01b1790556040805163c45a015560e01b8152905182916001600160a01b0383169163c45a0155916004808201926020929091908290030181865afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e009190612033565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190612033565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612033565b601980546001600160a01b039283166001600160a01b03199182161790915560188054928416929091168217905530600081815260016020526040902054914791610f2d918461148b565b6018546001600160a01b031663f305d719823085808333610f504261070861209c565b6040518863ffffffff1660e01b8152600401610f71969594939291906120af565b60606040518083038185885af1158015610f8f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fb491906120ea565b5050601954604080513081526001600160a01b0390921660208301528101849052606081018390527f6059b39ae02bb6d64c653bc7dc67f2d0108e9cfa6c9f254c3af163640bc14f28915060800160405180910390a150505050565b6006546001600160a01b0316331461102757600080fd5b6001600160a01b03821660009081526001602052604090205461104a90826117ae565b6001600160a01b038316600090815260016020526040902055600a5461107090826117ae565b600a556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6110c161154c565b600c805460ff9092166101000261ff0019909216919091179055565b6006546001600160a01b031633146110f457600080fd5b6001600160a01b038216600090815260016020526040902054611117908261174b565b6001600160a01b038316600090815260016020526040902055600a5461113d908261174b565b600a556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016110ad565b61118661154c565b6010839055601182905560128190556111a9816111a3858561174b565b9061174b565b601355505050565b60606008805461088e90611ff9565b600061091e3384610b0585604051806060016040528060258152602001612233602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061171f565b61121761154c565b60198054911515600160b81b0260ff60b81b19909216919091179055565b600061091e3384846115a6565b61124a61154c565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b61128c61154c565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6112ce61154c565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6112f861154c565b601954600160a01b900460ff16156113525760405162461bcd60e51b815260206004820181905260248201527f43757272656e746c792070726f63657373696e672c20747279206c617465722e6044820152606401610bb4565b3060009081526001602052604081205490606461136f8484612118565b611379919061212f565b9050611384816117ba565b505050565b61139161154c565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6113ba61154c565b6001600160a01b03811661141f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb4565b6114288161175e565b50565b61143361154c565b60198054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061148090831515815260200190565b60405180910390a150565b6001600160a01b038316158015906114ab57506001600160a01b03821615155b6114eb5760405162461bcd60e51b81526020600482015260116024820152704552523a207a65726f206164647265737360781b6044820152606401610bb4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bb4565b600c5460ff610100820481169116108015906115cc5750601954600160a01b900460ff16155b80156115e557506019546001600160a01b038381169116145b80156115fa5750601954600160a81b900460ff165b1561163957600c805460ff191690553060009081526001602052604090205460175481111561162857506017545b801561163757611637816117ba565b505b6001600160a01b03831660009081526003602052604090205460019060ff168061167b57506001600160a01b03831660009081526003602052604090205460ff165b806116c25750601954600160b81b900460ff1680156116a857506019546001600160a01b03858116911614155b80156116c257506019546001600160a01b03848116911614155b156116cf5750600061170d565b6019546001600160a01b03908116908516036116f057600e54600d5561170d565b6019546001600160a01b039081169084160361170d57600f54600d555b611719848484846119ea565b50505050565b600081848411156117435760405162461bcd60e51b8152600401610bb49190611e1e565b505050900390565b6000611757828461209c565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006117578284612151565b6019805460ff60a01b1916600160a01b1790556013546010546000916117f0916002916117ea9182908790611a50565b90611a5c565b905060006117fe83836117ae565b905061180981611a68565b604080518281524760208201819052917f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1600061186861185f6002601054611a5c90919063ffffffff16565b601354906117ae565b9050600061188a60026117ea846117ea60105488611a5090919063ffffffff16565b905060006118a7836117ea60115487611a5090919063ffffffff16565b905060006118bf826118b987866117ae565b906117ae565b9050821561190d576118d18784611bc2565b505060408051888152602081018590527f6e500010cf745ca08b8ba2c0086153fc3f608a44464334aaa6528b28b720c546910160405180910390a15b811561197057600554611929906001600160a01b031683611c7f565b600554604080516001600160a01b039092168252602082018490527f4d8231c76dd338af8b275ae59e1591f03f77c39feb78606f6ca7a6099e589597910160405180910390a15b80156119d35760045461198c906001600160a01b031682611c7f565b600454604080516001600160a01b039092168252602082018390527f19bb39aae0d5db58582d17592eb53aa5301ac156a83b2edd05b74403e3b693a8910160405180910390a15b50506019805460ff60a01b19169055505050505050565b806119fc576119f7611cb5565b611a29565b600c805460ff16906000611a0f83612164565b91906101000a81548160ff021916908360ff160217905550505b611a34848484611cfa565b8061171957611719601454600d55601554600e55601654600f55565b60006117578284612118565b6000611757828461212f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a9d57611a9d612183565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190612033565b81600181518110611b2d57611b2d612183565b6001600160a01b039283166020918202929092010152601854611b53913091168461148b565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b8c908590600090869030904290600401612199565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050505050565b6018546000908190611bdf9030906001600160a01b03168661148b565b60185460009081906001600160a01b031663f305d7198630898580611c0c6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611c2e969594939291906120af565b60606040518083038185885af1158015611c4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c7191906120ea565b509097909650945050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611384573d6000803e3d6000fd5b600d54158015611cc55750600e54155b8015611cd15750600f54155b15611cd857565b600e8054601555600f8054601655600d80546014556000928390559082905555565b600080611d0683611de6565b6001600160a01b0387166000908152600160205260409020549193509150611d2e90846117ae565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611d5d908361174b565b6001600160a01b038516600090815260016020526040808220929092553081522054611d89908261174b565b3060009081526001602090815260409182902092909255518381526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b60008060006064600d5485611dfb9190612118565b611e05919061212f565b90506000611e1385836117ae565b959194509092505050565b600060208083528351808285015260005b81811015611e4b57858101830151858201604001528201611e2f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461142857600080fd5b60008060408385031215611e9457600080fd5b8235611e9f81611e6c565b946020939093013593505050565b600060208284031215611ebf57600080fd5b813561175781611e6c565b600080600060608486031215611edf57600080fd5b8335611eea81611e6c565b92506020840135611efa81611e6c565b929592945050506040919091013590565b60008060408385031215611f1e57600080fd5b50508035926020909101359150565b600060208284031215611f3f57600080fd5b813560ff8116811461175757600080fd5b600080600060608486031215611f6557600080fd5b505081359360208301359350604090920135919050565b801515811461142857600080fd5b600060208284031215611f9c57600080fd5b813561175781611f7c565b60008060408385031215611fba57600080fd5b8235611fc581611e6c565b91506020830135611fd581611e6c565b809150509250929050565b600060208284031215611ff257600080fd5b5035919050565b600181811c9082168061200d57607f821691505b60208210810361202d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561204557600080fd5b815161175781611e6c565b60006020828403121561206257600080fd5b5051919050565b60006020828403121561207b57600080fd5b815161175781611f7c565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092257610922612086565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156120ff57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761092257610922612086565b60008261214c57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561092257610922612086565b600060ff821660ff810361217a5761217a612086565b60010192915050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e95784516001600160a01b0316835293830193918301916001016121c4565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec795346660535d7c836921003d6d52641c9a0f014975436358df4cb9c0c67f564736f6c63430008120033
Deployed Bytecode Sourcemap
17091:18777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21007:161;;;;;;;;;;-1:-1:-1;21007:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;21007:161:0;1023:187:1;33901:342:0;;;;;;;;;;-1:-1:-1;33901:342:0;;;;;:::i;:::-;;:::i;:::-;;25113:34;;;;;;;;;;-1:-1:-1;25113:34:0;;;;-1:-1:-1;;;25113:34:0;;;;;;18759:41;;;;;;;;;;-1:-1:-1;18759:41:0;;;;-1:-1:-1;;;;;18759:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;18759:41:0;1467:230:1;20453:95:0;;;;;;;;;;-1:-1:-1;20533:7:0;;20453:95;;;1848:25:1;;;1836:2;1821:18;20453:95:0;1702:177:1;18844:28:0;;;;;;;;;;-1:-1:-1;18844:28:0;;;;-1:-1:-1;;;18844:28:0;;;;;;21176:313;;;;;;;;;;-1:-1:-1;21176:313:0;;;;;:::i;:::-;;:::i;24078:165::-;;;;;;;;;;-1:-1:-1;24078:165:0;;;;;:::i;:::-;;:::i;20362:83::-;;;;;;;;;;-1:-1:-1;20428:9:0;;20362:83;;20428:9;;;;2487:36:1;;2475:2;2460:18;20362:83:0;2345:184:1;32166:502:0;;;;;;;;;;-1:-1:-1;32166:502:0;;;;;:::i;:::-;;:::i;34277:207::-;;;;;;;;;;-1:-1:-1;34277:207:0;;;;;:::i;:::-;;:::i;21497:218::-;;;;;;;;;;-1:-1:-1;21497:218:0;;;;;:::i;:::-;;:::i;18185:36::-;;;;;;;;;;;;;;;;18011:26;;;;;;;;;;;;;;;;18105:34;;;;;;;;;;;;;;;;22640:111;;;;;;;;;;-1:-1:-1;22640:111:0;;;;;:::i;:::-;;:::i;18807:28::-;;;;;;;;;;-1:-1:-1;18807:28:0;;;;-1:-1:-1;;;;;18807:28:0;;;18879:40;;;;;;;;;;-1:-1:-1;18879:40:0;;;;-1:-1:-1;;;18879:40:0;;;;;;18044:27;;;;;;;;;;;;;;;;23047:145;;;;;;;;;;-1:-1:-1;23047:145:0;;;;;:::i;:::-;;:::i;20556:117::-;;;;;;;;;;-1:-1:-1;20556:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;20649:16:0;20622:7;20649:16;;;:7;:16;;;;;;;20556:117;8470:103;;;;;;;;;;;;;:::i;32800:969::-;;;;;;;;;;-1:-1:-1;32800:969:0;;;;;:::i;:::-;;:::i;22224:220::-;;;;;;;;;;-1:-1:-1;22224:220:0;;;;;:::i;:::-;;:::i;17371:51::-;;;;;;;;;;-1:-1:-1;17371:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24675:161;;;;;;;;;;-1:-1:-1;24675:161:0;;;;;:::i;:::-;;:::i;22000:212::-;;;;;;;;;;-1:-1:-1;22000:212:0;;;;;:::i;:::-;;:::i;7822:87::-;;;;;;;;;;-1:-1:-1;7868:7:0;7895:6;-1:-1:-1;;;;;7895:6:0;7822:87;;18146:32;;;;;;;;;;;;;;;;23204:369;;;;;;;;;;-1:-1:-1;23204:369:0;;;;;:::i;:::-;;:::i;20267:87::-;;;;;;;;;;;;;:::i;21723:269::-;;;;;;;;;;-1:-1:-1;21723:269:0;;;;;:::i;:::-;;:::i;18932:30::-;;;;;;;;;;-1:-1:-1;18932:30:0;;;;-1:-1:-1;;;18932:30:0;;;;;;25501:125;;;;;;;;;;-1:-1:-1;25501:125:0;;;;;:::i;:::-;;:::i;20681:167::-;;;;;;;;;;-1:-1:-1;20681:167:0;;;;;:::i;:::-;;:::i;23614:177::-;;;;;;;;;;-1:-1:-1;23614:177:0;;;;;:::i;:::-;;:::i;23837:203::-;;;;;;;;;;-1:-1:-1;23837:203:0;;;;;:::i;:::-;;:::i;34496:108::-;;;;;;;;;;-1:-1:-1;34496:108:0;;;;;:::i;:::-;;:::i;20856:143::-;;;;;;;;;;-1:-1:-1;20856:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20964:18:0;;;20937:7;20964:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20856:143;30894:479;;;;;;;;;;-1:-1:-1;30894:479:0;;;;;:::i;:::-;;:::i;18616:51::-;;;;;;;;;;;;;;;;17566:31;;;;;;;;;;-1:-1:-1;17566:31:0;;;;-1:-1:-1;;;;;17566:31:0;;;22831:110;;;;;;;;;;-1:-1:-1;22831:110:0;;;;;:::i;:::-;;:::i;8728:201::-;;;;;;;;;;-1:-1:-1;8728:201:0;;;;;:::i;:::-;;:::i;24373:190::-;;;;;;;;;;-1:-1:-1;24373:190:0;;;;;:::i;:::-;;:::i;20176:83::-;20213:13;20246:5;20239:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:83;:::o;21007:161::-;21082:4;21099:39;3227:10;21122:7;21131:6;21099:8;:39::i;:::-;-1:-1:-1;21156:4:0;21007:161;;;;;:::o;33901:342::-;7708:13;:11;:13::i;:::-;33988:38:::1;34048:9;33988:70;;34103:19;-1:-1:-1::0;;;;;34103:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34085:59:0::1;;34153:4;34160:19;-1:-1:-1::0;;;;;34160:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34085:102;::::0;-1:-1:-1;;;;;;34085:102:0::1;::::0;;;;;;-1:-1:-1;;;;;5668:15:1;;;34085:102:0::1;::::0;::::1;5650:34:1::0;5720:15;;5700:18;;;5693:43;5585:18;;34085:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34069:13;:118:::0;;-1:-1:-1;;;;;34069:118:0;;::::1;-1:-1:-1::0;;;;;;34069:118:0;;::::1;;::::0;;;34198:15:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33901:342:0:o;21176:313::-;21274:4;21291:36;21301:6;21309:9;21320:6;21291:9;:36::i;:::-;21338:121;21347:6;3227:10;21369:89;21407:6;21369:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21369:19:0;;;;;;:11;:19;;;;;;;;3227:10;21369:33;;;;;;;;;;:37;:89::i;:::-;21338:8;:121::i;:::-;-1:-1:-1;21477:4:0;21176:313;;;;;:::o;24078:165::-;7708:13;:11;:13::i;:::-;24153:16:::1;:32:::0;;-1:-1:-1;;;;;24153:32:0;;::::1;-1:-1:-1::0;;;;;;24153:32:0;;::::1;::::0;::::1;::::0;;:16:::1;24195:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;24195:40:0::1;24153:32:::0;24195:40:::1;::::0;;24078:165::o;32166:502::-;32301:10;7708:13;:11;:13::i;:::-;32363:4:::1;-1:-1:-1::0;;;;;32331:37:0;::::1;::::0;32323:77:::1;;;::::0;-1:-1:-1;;;32323:77:0;;5949:2:1;32323:77:0::1;::::0;::::1;5931:21:1::0;5988:2;5968:18;;;5961:30;6027:29;6007:18;;;6000:57;6074:18;;32323:77:0::1;;;;;;;;;32435:53;::::0;-1:-1:-1;;;32435:53:0;;32482:4:::1;32435:53;::::0;::::1;1640:51:1::0;32411:21:0::1;::::0;-1:-1:-1;;;;;32435:38:0;::::1;::::0;::::1;::::0;1613:18:1;;32435:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32411:77;;32522:13;32503:16;:32;32499:72;;;32556:13;32537:32;;32499:72;32589:71;::::0;-1:-1:-1;;;32589:71:0;;-1:-1:-1;;;;;6484:32:1;;;32589:71:0::1;::::0;::::1;6466:51:1::0;6533:18;;;6526:34;;;32589:37:0;::::1;::::0;::::1;::::0;6439:18:1;;32589:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32581:79:::0;32166:502;-1:-1:-1;;;;;32166:502:0:o;34277:207::-;7708:13;:11;:13::i;:::-;34439:15:::1;:37:::0;;-1:-1:-1;;;;;;34439:37:0::1;-1:-1:-1::0;;;;;34439:37:0;;;::::1;::::0;;;::::1;::::0;;34277:207::o;21497:218::-;3227:10;21585:4;21634:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21634:34:0;;;;;;;;;;21585:4;;21602:83;;21625:7;;21634:50;;21673:10;21634:38;:50::i;22640:111::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;22709:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22709:34:0::1;22739:4;22709:34;::::0;;22640:111::o;23047:145::-;7708:13;:11;:13::i;:::-;23135:8:::1;:19:::0;23165:7:::1;:17:::0;23047:145::o;8470:103::-;7708:13;:11;:13::i;:::-;8535:30:::1;8562:1;8535:18;:30::i;:::-;8470:103::o:0;32800:969::-;7708:13;:11;:13::i;:::-;32877:18:::1;::::0;-1:-1:-1;;;32877:18:0;::::1;;;32876:19;32868:28;;;::::0;::::1;;32907:18;:25:::0;;-1:-1:-1;;;;32907:25:0::1;-1:-1:-1::0;;;32907:25:0::1;::::0;;33055:29:::1;::::0;;-1:-1:-1;;;33055:29:0;;;;33003:6;;-1:-1:-1;;;;;33055:27:0;::::1;::::0;::::1;::::0;:29:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:27;:29:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33037:59:0::1;;33105:4;33112:19;-1:-1:-1::0;;;;;33112:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33037:102;::::0;-1:-1:-1;;;;;;33037:102:0::1;::::0;;;;;;-1:-1:-1;;;;;5668:15:1;;;33037:102:0::1;::::0;::::1;5650:34:1::0;5720:15;;5700:18;;;5693:43;5585:18;;33037:102:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33021:13;:118:::0;;-1:-1:-1;;;;;33021:118:0;;::::1;-1:-1:-1::0;;;;;;33021:118:0;;::::1;;::::0;;;33150:15:::1;:37:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;33254:4:::1;-1:-1:-1::0;20649:16:0;;;-1:-1:-1;20649:16:0;;;;;;;33297:21:::1;::::0;33329:68:::1;::::0;20649:16;33329:8:::1;:68::i;:::-;33410:15;::::0;-1:-1:-1;;;;;33410:15:0::1;:31;33449:15:::0;33488:4:::1;33508:17:::0;;33449:15;33602:10:::1;33627:20;:15;33643:4;33627:20;:::i;:::-;33410:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;33713:13:0::1;::::0;33684:77:::1;::::0;;33707:4:::1;8259:34:1::0;;-1:-1:-1;;;;;33713:13:0;;::::1;8324:2:1::0;8309:18;;8302:43;8361:18;;8354:34;;;8419:2;8404:18;;8397:34;;;33684:77:0::1;::::0;-1:-1:-1;8208:3:1;8193:19;33684:77:0::1;;;;;;;32857:912;;;32800:969:::0;:::o;22224:220::-;19897:16;;-1:-1:-1;;;;;19897:16:0;19883:10;:30;19875:39;;;;;;-1:-1:-1;;;;;22321:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;:25:::1;::::0;22339:6;22321:17:::1;:25::i;:::-;-1:-1:-1::0;;;;;22305:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:41;22367:7:::1;::::0;:19:::1;::::0;22379:6;22367:11:::1;:19::i;:::-;22357:7;:29:::0;22402:34:::1;::::0;1848:25:1;;;22425:1:0::1;::::0;-1:-1:-1;;;;;22402:34:0;::::1;::::0;::::1;::::0;1836:2:1;1821:18;22402:34:0::1;;;;;;;;22224:220:::0;;:::o;24675:161::-;7708:13;:11;:13::i;:::-;24792:11:::1;:36:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;24792:36:0;;::::1;::::0;;;::::1;::::0;;24675:161::o;22000:212::-;19897:16;;-1:-1:-1;;;;;19897:16:0;19883:10;:30;19875:39;;;;;;-1:-1:-1;;;;;22093:11:0;::::1;;::::0;;;:7:::1;:11;::::0;;;;;:23:::1;::::0;22109:6;22093:15:::1;:23::i;:::-;-1:-1:-1::0;;;;;22079:11:0;::::1;;::::0;;;:7:::1;:11;::::0;;;;:37;22137:7:::1;::::0;:19:::1;::::0;22149:6;22137:11:::1;:19::i;:::-;22127:7;:29:::0;22172:32:::1;::::0;1848:25:1;;;-1:-1:-1;;;;;22172:32:0;::::1;::::0;22189:1:::1;::::0;22172:32:::1;::::0;1836:2:1;1821:18;22172:32:0::1;1702:177:1::0;23204:369:0;7708:13;:11;:13::i;:::-;23351:12:::1;:32:::0;;;23395:10:::1;:28:::0;;;23435:14:::1;:36:::0;;;23515:48:::1;23452:19:::0;23515:28:::1;23366:17:::0;23408:15;23515:16:::1;:28::i;:::-;:32:::0;::::1;:48::i;:::-;23489:23;:74:::0;-1:-1:-1;;;23204:369:0:o;20267:87::-;20306:13;20339:7;20332:14;;;;;:::i;21723:269::-;21816:4;21833:129;3227:10;21856:7;21865:96;21904:15;21865:96;;;;;;;;;;;;;;;;;3227:10;21865:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21865:34:0;;;;;;;;;;;;:38;:96::i;25501:125::-;7708:13;:11;:13::i;:::-;25587:15:::1;:31:::0;;;::::1;;-1:-1:-1::0;;;25587:31:0::1;-1:-1:-1::0;;;;25587:31:0;;::::1;::::0;;;::::1;::::0;;25501:125::o;20681:167::-;20759:4;20776:42;3227:10;20800:9;20811:6;20776:9;:42::i;23614:177::-;7708:13;:11;:13::i;:::-;23707:7:::1;:24:::0;;-1:-1:-1;;;;;23707:24:0;;::::1;-1:-1:-1::0;;;;;;23707:24:0;;::::1;::::0;::::1;::::0;;:7:::1;23742:34:::0;;;:18:::1;:34;::::0;;;;:41;;-1:-1:-1;;23742:41:0::1;23707:24:::0;23742:41:::1;::::0;;23614:177::o;23837:203::-;7708:13;:11;:13::i;:::-;23938:17:::1;:38:::0;;-1:-1:-1;;;;;23938:38:0;;::::1;-1:-1:-1::0;;;;;;23938:38:0;;::::1;::::0;::::1;::::0;;:17:::1;23987:38:::0;;;:18:::1;:38;::::0;;;;:45;;-1:-1:-1;;23987:45:0::1;23938:38:::0;23987:45:::1;::::0;;23837:203::o;34496:108::-;7708:13;:11;:13::i;:::-;34573::::1;:23:::0;;-1:-1:-1;;;;;;34573:23:0::1;-1:-1:-1::0;;;;;34573:23:0;;;::::1;::::0;;;::::1;::::0;;34496:108::o;30894:479::-;7708:13;:11;:13::i;:::-;31044:16:::1;::::0;-1:-1:-1;;;31044:16:0;::::1;;;31043:17;31035:62;;;::::0;-1:-1:-1;;;31035:62:0;;8644:2:1;31035:62:0::1;::::0;::::1;8626:21:1::0;;;8663:18;;;8656:30;8722:34;8702:18;;;8695:62;8774:18;;31035:62:0::1;8442:356:1::0;31035:62:0::1;31241:4;31196:24;20649:16:::0;;;:7;:16;;;;;;;31325:3:::1;31279:45;31296:28:::0;20649:16;31279:45:::1;:::i;:::-;:49;;;;:::i;:::-;31258:70;;31339:26;31354:10;31339:14;:26::i;:::-;30978:395;;30894:479:::0;:::o;22831:110::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;22898:27:0::1;22928:5;22898:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22898:35:0::1;::::0;;22831:110::o;8728:201::-;7708:13;:11;:13::i;:::-;-1:-1:-1;;;;;8817:22:0;::::1;8809:73;;;::::0;-1:-1:-1;;;8809:73:0;;9400:2:1;8809:73:0::1;::::0;::::1;9382:21:1::0;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:36;9575:19;;8809:73:0::1;9198:402:1::0;8809:73:0::1;8893:28;8912:8;8893:18;:28::i;:::-;8728:201:::0;:::o;24373:190::-;7708:13;:11;:13::i;:::-;24459:21:::1;:37:::0;;;::::1;;-1:-1:-1::0;;;24459:37:0::1;-1:-1:-1::0;;;;24459:37:0;;::::1;;::::0;;24512:43:::1;::::0;::::1;::::0;::::1;::::0;24483:13;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;24512:43:0::1;;;;;;;;24373:190:::0;:::o;26550:266::-;-1:-1:-1;;;;;26645:19:0;;;;;;:44;;-1:-1:-1;;;;;;26668:21:0;;;;26645:44;26637:74;;;;-1:-1:-1;;;26637:74:0;;9807:2:1;26637:74:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;9865:18:1;;;9858:47;9922:18;;26637:74:0;9605:341:1;26637:74:0;-1:-1:-1;;;;;26722:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26774:32;;1848:25:1;;;26774:32:0;;1821:18:1;26774:32:0;;;;;;;26550:266;;;:::o;7987:132::-;7868:7;7895:6;-1:-1:-1;;;;;7895:6:0;3227:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;10153:2:1;8043:68:0;;;10135:21:1;;;10172:18;;;10165:30;10231:34;10211:18;;;10204:62;10283:18;;8043:68:0;9951:356:1;26824:1434:0;27147:11;;;;;;;;27136:7;;:22;;;;:57;;-1:-1:-1;27177:16:0;;-1:-1:-1;;;27177:16:0;;;;27176:17;27136:57;:93;;;;-1:-1:-1;27216:13:0;;-1:-1:-1;;;;;27210:19:0;;;27216:13;;27210:19;27136:93;:131;;;;-1:-1:-1;27246:21:0;;-1:-1:-1;;;27246:21:0;;;;27136:131;27119:499;;;27324:7;:11;;-1:-1:-1;;27324:11:0;;;27399:4;-1:-1:-1;20649:16:0;;;-1:-1:-1;20649:16:0;;;;;;27446:14;;27423:37;;27420:82;;;-1:-1:-1;27486:14:0;;27420:82;27519:24;;27516:91;;27559:36;27574:20;27559:14;:36::i;:::-;27293:325;27119:499;-1:-1:-1;;;;;27923:24:0;;27879:12;27923:24;;;:18;:24;;;;;;27894:4;;27923:24;;;:50;;-1:-1:-1;;;;;;27951:22:0;;;;;;:18;:22;;;;;;;;27923:50;:119;;;-1:-1:-1;27978:15:0;;-1:-1:-1;;;27978:15:0;;;;:40;;;;-1:-1:-1;28005:13:0;;-1:-1:-1;;;;;27997:21:0;;;28005:13;;27997:21;;27978:40;:63;;;;-1:-1:-1;28028:13:0;;-1:-1:-1;;;;;28022:19:0;;;28028:13;;28022:19;;27978:63;27920:272;;;-1:-1:-1;28068:5:0;27920:272;;;28103:13;;-1:-1:-1;;;;;28103:13:0;;;28095:21;;;;28091:101;;28130:7;;28118:9;:19;28091:101;;;28155:13;;-1:-1:-1;;;;;28155:13:0;;;28149:19;;;;28145:47;;28182:8;;28170:9;:20;28145:47;28212:38;28227:4;28232:2;28235:6;28242:7;28212:14;:38::i;:::-;26927:1331;26824:1434;;;:::o;2674:206::-;2760:7;2821:12;2813:6;;;;2805:29;;;;-1:-1:-1;;;2805:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2856:5:0;;;2674:206::o;2246:98::-;2304:7;2331:5;2335:1;2331;:5;:::i;:::-;2324:12;2246:98;-1:-1:-1;;;2246:98:0:o;9089:191::-;9163:16;9182:6;;-1:-1:-1;;;;;9199:17:0;;;-1:-1:-1;;;;;;9199:17:0;;;;;;9232:40;;9182:6;;;;;;;9232:40;;9163:16;9232:40;9152:128;9089:191;:::o;2352:98::-;2410:7;2437:5;2441:1;2437;:5;:::i;28662:1459::-;19686:16;:23;;-1:-1:-1;;;;19686:23:0;-1:-1:-1;;;19686:23:0;;;28822::::1;::::0;28804:12:::1;::::0;19686:23;;28779:74:::1;::::0;28851:1:::1;::::0;28779:67:::1;::::0;;;:20;;:24:::1;:38::i;:::-;:42:::0;::::1;:67::i;:74::-;28757:96:::0;-1:-1:-1;28864:20:0::1;28887:37;:20:::0;28757:96;28887:24:::1;:37::i;:::-;28864:60;;28937:33;28957:12;28937:19;:33::i;:::-;29061:42;::::0;;10619:25:1;;;29024:21:0::1;10675:2:1::0;10660:18;;10653:34;;;29024:21:0;29061:42:::1;::::0;10592:18:1;29061:42:0::1;;;;;;;29149:22;29174:48;29202:19;29219:1;29202:12;;:16;;:19;;;;:::i;:::-;29174:23;::::0;;:27:::1;:48::i;:::-;29149:73;;29241:26;29270:57;29325:1;29270:50;29305:14;29270:30;29287:12;;29270;:16;;:30;;;;:::i;:57::-;29241:86;;29338:24;29365:48;29398:14;29365:28;29382:10;;29365:12;:16;;:28;;;;:::i;:48::-;29338:75:::0;-1:-1:-1;29424:28:0::1;29455:58;29338:75:::0;29455:36:::1;:12:::0;29472:18;29455:16:::1;:36::i;:::-;:40:::0;::::1;:58::i;:::-;29424:89:::0;-1:-1:-1;29531:22:0;;29527:166:::1;;29570:45;29583:11;29596:18;29570:12;:45::i;:::-;-1:-1:-1::0;;29635:46:0::1;::::0;;10619:25:1;;;10675:2;10660:18;;10653:34;;;29635:46:0::1;::::0;10592:18:1;29635:46:0::1;;;;;;;29527:166;29718:20:::0;;29714:151:::1;;29769:7;::::0;29756:38:::1;::::0;-1:-1:-1;;;;;29769:7:0::1;29777:16:::0;29756:12:::1;:38::i;:::-;29826:7;::::0;29814:38:::1;::::0;;-1:-1:-1;;;;;29826:7:0;;::::1;6466:51:1::0;;6548:2;6533:18;;6526:34;;;29814:38:0::1;::::0;6439:18:1;29814:38:0::1;;;;;;;29714:151;29905:24:::0;;29901:187:::1;;29960:17;::::0;29947:52:::1;::::0;-1:-1:-1;;;;;29960:17:0::1;29978:20:::0;29947:12:::1;:52::i;:::-;30035:17;::::0;30019:56:::1;::::0;;-1:-1:-1;;;;;30035:17:0;;::::1;6466:51:1::0;;6548:2;6533:18;;6526:34;;;30019:56:0::1;::::0;6439:18:1;30019:56:0::1;;;;;;;29901:187;-1:-1:-1::0;;19732:16:0;:24;;-1:-1:-1;;;;19732:24:0;;;-1:-1:-1;;;;;;28662:1459:0:o;34709:360::-;34840:7;34836:107;;34863:14;:12;:14::i;:::-;34836:107;;;34918:7;:9;;;;;:7;:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34836:107;34957:42;34973:6;34981:9;34992:6;34957:15;:42::i;:::-;35024:7;35020:41;;35046:15;26405:17;;26393:9;:29;26439:15;;26429:7;:25;26473:16;;26462:8;:27;26347:153;2458:98;2516:7;2543:5;2547:1;2543;:5;:::i;2568:98::-;2626:7;2653:5;2657:1;2653;:5;:::i;31442:541::-;31541:16;;;31555:1;31541:16;;;;;;;;31517:21;;31541:16;;;;;;;;;;-1:-1:-1;31541:16:0;31517:40;;31586:4;31568;31573:1;31568:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31568:23:0;;;:7;;;;;;;;;;:23;;;;31612:15;;:22;;;-1:-1:-1;;;31612:22:0;;;;:15;;;;;:20;;:22;;;;;31568:7;;31612:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31602:4;31607:1;31602:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31602:32:0;;;:7;;;;;;;;;:32;31679:15;;31647:62;;31664:4;;31679:15;31697:11;31647:8;:62::i;:::-;31748:15;;:227;;-1:-1:-1;;;31748:227:0;;-1:-1:-1;;;;;31748:15:0;;;;:66;;:227;;31829:11;;31748:15;;31902:4;;31929;;31949:15;;31748:227;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31500:483;31442:541;:::o;30135:645::-;30345:15;;30217:7;;;;30313:62;;30330:4;;-1:-1:-1;;;;;30345:15:0;30363:11;30313:8;:62::i;:::-;30457:15;;30419:16;;;;-1:-1:-1;;;;;30457:15:0;:31;30496:12;30532:4;30552:11;30419:16;;30664:7;7868;7895:6;-1:-1:-1;;;;;7895:6:0;;7822:87;30664:7;30686:15;30457:255;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30418:294:0;;;;-1:-1:-1;30135:645:0;-1:-1:-1;;;;;30135:645:0:o;28492:120::-;28577:23;;-1:-1:-1;;;;;28577:15:0;;;:23;;;;;28593:6;;28577:23;;;;28593:6;28577:15;:23;;;;;;;;;;;;;;;;;;;26010:300;26056:9;;:14;:30;;;;-1:-1:-1;26074:7:0;;:12;26056:30;:47;;;;-1:-1:-1;26090:8:0;;:13;26056:47;26053:59;;;26010:300::o;26053:59::-;26144:7;;;26126:15;:25;26182:8;;;26163:16;:27;26222:9;;;26202:17;:29;-1:-1:-1;26242:11:0;;;;26264:12;;;;26287:13;26010:300::o;35150:424::-;35247:23;35272:12;35288:19;35299:7;35288:10;:19::i;:::-;-1:-1:-1;;;;;35336:15:0;;;;;;:7;:15;;;;;;35246:61;;-1:-1:-1;35246:61:0;-1:-1:-1;35336:28:0;;35356:7;35336:19;:28::i;:::-;-1:-1:-1;;;;;35318:15:0;;;;;;;:7;:15;;;;;;:46;;;;35396:18;;;;;;;:39;;35419:15;35396:22;:39::i;:::-;-1:-1:-1;;;;;35375:18:0;;;;;;:7;:18;;;;;;:60;;;;35487:4;35471:22;;;;:32;;35498:4;35471:26;:32::i;:::-;35462:4;35446:22;;;;:7;:22;;;;;;;;;:57;;;;35522:44;1848:25:1;;;-1:-1:-1;;;;;35522:44:0;;;;;;;;;;1821:18:1;35522:44:0;;;;;;;35235:339;;35150:424;;;:::o;35622:227::-;35681:7;35690;35710:12;35743:3;35733:9;;35725:7;:17;;;;:::i;:::-;:21;;;;:::i;:::-;35710:36;-1:-1:-1;35757:23:0;35783:17;:7;35710:36;35783:11;:17::i;:::-;35757:43;35836:4;;-1:-1:-1;35622:227:0;;-1:-1:-1;;;35622:227:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:248::-;2810:6;2818;2871:2;2859:9;2850:7;2846:23;2842:32;2839:52;;;2887:1;2884;2877:12;2839:52;-1:-1:-1;;2910:23:1;;;2980:2;2965:18;;;2952:32;;-1:-1:-1;2742:248:1:o;2995:269::-;3052:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3160:9;3147:23;3210:4;3203:5;3199:16;3192:5;3189:27;3179:55;;3230:1;3227;3220:12;3269:316;3346:6;3354;3362;3415:2;3403:9;3394:7;3390:23;3386:32;3383:52;;;3431:1;3428;3421:12;3383:52;-1:-1:-1;;3454:23:1;;;3524:2;3509:18;;3496:32;;-1:-1:-1;3575:2:1;3560:18;;;3547:32;;3269:316;-1:-1:-1;3269:316:1:o;3590:118::-;3676:5;3669:13;3662:21;3655:5;3652:32;3642:60;;3698:1;3695;3688:12;3713:241;3769:6;3822:2;3810:9;3801:7;3797:23;3793:32;3790:52;;;3838:1;3835;3828:12;3790:52;3877:9;3864:23;3896:28;3918:5;3896:28;:::i;4219:388::-;4287:6;4295;4348:2;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4403:9;4390:23;4422:31;4447:5;4422:31;:::i;:::-;4472:5;-1:-1:-1;4529:2:1;4514:18;;4501:32;4542:33;4501:32;4542:33;:::i;:::-;4594:7;4584:17;;;4219:388;;;;;:::o;4612:180::-;4671:6;4724:2;4712:9;4703:7;4699:23;4695:32;4692:52;;;4740:1;4737;4730:12;4692:52;-1:-1:-1;4763:23:1;;4612:180;-1:-1:-1;4612:180:1:o;4797:380::-;4876:1;4872:12;;;;4919;;;4940:61;;4994:4;4986:6;4982:17;4972:27;;4940:61;5047:2;5039:6;5036:14;5016:18;5013:38;5010:161;;5093:10;5088:3;5084:20;5081:1;5074:31;5128:4;5125:1;5118:15;5156:4;5153:1;5146:15;5010:161;;4797:380;;;:::o;5182:251::-;5252:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5353:9;5347:16;5372:31;5397:5;5372:31;:::i;6103:184::-;6173:6;6226:2;6214:9;6205:7;6201:23;6197:32;6194:52;;;6242:1;6239;6232:12;6194:52;-1:-1:-1;6265:16:1;;6103:184;-1:-1:-1;6103:184:1:o;6571:245::-;6638:6;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;6739:9;6733:16;6758:28;6780:5;6758:28;:::i;6821:127::-;6882:10;6877:3;6873:20;6870:1;6863:31;6913:4;6910:1;6903:15;6937:4;6934:1;6927:15;6953:125;7018:9;;;7039:10;;;7036:36;;;7052:18;;:::i;7083:591::-;-1:-1:-1;;;;;7426:15:1;;;7408:34;;7473:2;7458:18;;7451:34;;;;7516:2;7501:18;;7494:34;;;;7559:2;7544:18;;7537:34;;;;7608:15;;;7602:3;7587:19;;7580:44;7388:3;7640:19;;7633:35;;;;7357:3;7342:19;;7083:591::o;7679:306::-;7767:6;7775;7783;7836:2;7824:9;7815:7;7811:23;7807:32;7804:52;;;7852:1;7849;7842:12;7804:52;7881:9;7875:16;7865:26;;7931:2;7920:9;7916:18;7910:25;7900:35;;7975:2;7964:9;7960:18;7954:25;7944:35;;7679:306;;;;;:::o;8803:168::-;8876:9;;;8907;;8924:15;;;8918:22;;8904:37;8894:71;;8945:18;;:::i;8976:217::-;9016:1;9042;9032:132;;9086:10;9081:3;9077:20;9074:1;9067:31;9121:4;9118:1;9111:15;9149:4;9146:1;9139:15;9032:132;-1:-1:-1;9178:9:1;;8976:217::o;10312:128::-;10379:9;;;10400:11;;;10397:37;;;10414:18;;:::i;10985:175::-;11022:3;11066:4;11059:5;11055:16;11095:4;11086:7;11083:17;11080:43;;11103:18;;:::i;:::-;11152:1;11139:15;;10985:175;-1:-1:-1;;10985:175:1:o;11297:127::-;11358:10;11353:3;11349:20;11346:1;11339:31;11389:4;11386:1;11379:15;11413:4;11410:1;11403:15;11429:980;11691:4;11739:3;11728:9;11724:19;11770:6;11759:9;11752:25;11796:2;11834:6;11829:2;11818:9;11814:18;11807:34;11877:3;11872:2;11861:9;11857:18;11850:31;11901:6;11936;11930:13;11967:6;11959;11952:22;12005:3;11994:9;11990:19;11983:26;;12044:2;12036:6;12032:15;12018:29;;12065:1;12075:195;12089:6;12086:1;12083:13;12075:195;;;12154:13;;-1:-1:-1;;;;;12150:39:1;12138:52;;12245:15;;;;12210:12;;;;12186:1;12104:9;12075:195;;;-1:-1:-1;;;;;;;12326:32:1;;;;12321:2;12306:18;;12299:60;-1:-1:-1;;;12390:3:1;12375:19;12368:35;12287:3;11429:980;-1:-1:-1;;;11429:980:1:o
Swarm Source
ipfs://ec795346660535d7c836921003d6d52641c9a0f014975436358df4cb9c0c67f5
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.