Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17789626 | 367 days ago | IN | 0 ETH | 0.0027783 | ||||
Approve | 17786917 | 367 days ago | IN | 0 ETH | 0.00701778 | ||||
Approve | 17786917 | 367 days ago | IN | 0 ETH | 0.00701778 | ||||
Approve | 17786917 | 367 days ago | IN | 0 ETH | 0.00701778 | ||||
Approve | 17786441 | 367 days ago | IN | 0 ETH | 0.00148065 | ||||
Approve Max | 17786177 | 367 days ago | IN | 0 ETH | 0.00186748 | ||||
Approve | 17786163 | 367 days ago | IN | 0 ETH | 0.00206177 | ||||
Approve | 17786163 | 367 days ago | IN | 0 ETH | 0.00206177 | ||||
Approve | 17786159 | 367 days ago | IN | 0 ETH | 0.00110912 | ||||
Approve | 17786152 | 367 days ago | IN | 0 ETH | 0.00208549 | ||||
Approve | 17786146 | 367 days ago | IN | 0 ETH | 0.00215751 | ||||
Approve | 17786142 | 367 days ago | IN | 0 ETH | 0.0020607 | ||||
Approve | 17786140 | 367 days ago | IN | 0 ETH | 0.00204673 | ||||
Approve | 17786135 | 367 days ago | IN | 0 ETH | 0.00289324 | ||||
Approve | 17786127 | 367 days ago | IN | 0 ETH | 0.00701778 | ||||
Approve | 17786125 | 367 days ago | IN | 0 ETH | 0.00244464 | ||||
Approve | 17786125 | 367 days ago | IN | 0 ETH | 0.00244464 | ||||
Approve | 17786125 | 367 days ago | IN | 0 ETH | 0.00244464 | ||||
Approve | 17786122 | 367 days ago | IN | 0 ETH | 0.0028412 | ||||
Approve | 17786117 | 367 days ago | IN | 0 ETH | 0.00303458 | ||||
Approve | 17786112 | 367 days ago | IN | 0 ETH | 0.00245262 | ||||
Approve | 17786111 | 367 days ago | IN | 0 ETH | 0.00232253 | ||||
Approve | 17786100 | 367 days ago | IN | 0 ETH | 0.00228031 | ||||
Approve | 17786098 | 367 days ago | IN | 0 ETH | 0.00215403 | ||||
Approve | 17786096 | 367 days ago | IN | 0 ETH | 0.00258308 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Bubbles
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 50 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Bubbles // Built with the latest next-gen, dynamic reflection tokenomics combining gambling and ultra addictive features. // Twitter: https://twitter.com/bubbles_erc // Website: https://bubbles.run/ pragma solidity ^0.8.19; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract Bubbles is IERC20, Ownable { using SafeMath for uint256; /* -------------------------------------------------------------------------- */ /* events */ /* -------------------------------------------------------------------------- */ event EventStart(string evt); event EventFinish(string evt, uint256 amountReflectionAccumulated); event ReflectAccumulated( uint256 amountAdded, uint256 totalAmountAccumulated ); event ReflectDistributed(uint256 amountDistributer); event ReflectNotification(string message); event ModeChanged(string mode); event HolderMinimumChanged(uint256 newMinimum); event LogInfo(string info); event LogError(string error); /* -------------------------------------------------------------------------- */ /* constants */ /* -------------------------------------------------------------------------- */ address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; uint256 constant MAX_FEE = 10; /* -------------------------------------------------------------------------- */ /* states */ /* -------------------------------------------------------------------------- */ IUniswapV2Router02 public constant UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address public immutable UNISWAP_V2_PAIR; struct Fee { uint8 reflection; uint8 teamOracle; uint8 lp; uint8 burn; uint128 total; } struct HolderInfo { uint256 balance; uint256 eventReflection; uint256 baseReflection; uint256 holdingTime; uint256 lastBuy; uint256 lastSell; uint256 keyIndex; bool isHolder; } string _name = "Bubbles"; string _symbol = "Bubbles"; uint256 _totalSupply = 100_000_000 ether; uint256 public _swapThreshold = (_totalSupply * 2) / 10000; uint256 public _minSupplyHolding = 100_000 ether; mapping(address => uint256) public _balances; mapping(address => uint256) public _baseReflection; mapping(address => uint256) public _eventReflection; mapping(address => uint256) public _historyReflectionTransfered; mapping(address => uint256) public _holdingTime; mapping(address => uint256) public _lastBuy; mapping(address => uint256) public _lastSell; mapping(address => uint256) public _keyIndex; mapping(address => bool) public _isHolder; address[] public addressesParticipantEvent; address[] public holderAddresses; uint256 public totalReflections = 0; uint256 public eventReflectedToken = 0; uint256 public normalReflectedToken = 0; uint256 public totalRemainder = 0; string public currentTokenMode = "chill"; string public nextTokenMode = "ngmi"; uint256 public lastTimeMode = 0; uint256 public lastTimeGenesis = 0; string public eventNameInProgress = ""; bool public eventInProgress = false; string[] public eventHistory; string[] public modeHistory; uint256 public eventTokenAmountDistributedBatching; uint256 public timeEventStart = 0; uint256 public timeEventStop = 0; uint256 public highestReflectionEventValue = 0; uint256 public highestReflectionEventTime = 0; string public highestReflectionEventName = ""; mapping(address => mapping(address => uint256)) _allowances; bool public enableTrading = false; bool public enableAutoAdjust = false; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isReflectionExempt; Fee public chill = Fee({reflection: 1, teamOracle: 3, lp: 1, burn: 0, total: 5}); Fee public ngmiBuy = Fee({reflection: 2, teamOracle: 0, lp: 0, burn: 2, total: 4}); Fee public ngmiSell = Fee({reflection: 3, teamOracle: 7, lp: 0, burn: 0, total: 10}); Fee public apeBuy = Fee({reflection: 0, teamOracle: 0, lp: 0, burn: 0, total: 0}); Fee public apeSell = Fee({reflection: 1, teamOracle: 3, lp: 0, burn: 1, total: 5}); Fee public buyFee; Fee public sellFee; address private teamOracleFeeReceiver; address private lpFeeReceiver; address private airDropAddress; address private msAddress; bool public claimingFees = true; bool inSwap; mapping(address => bool) public blacklists; /* -------------------------------------------------------------------------- */ /* modifiers */ /* -------------------------------------------------------------------------- */ modifier swapping() { inSwap = true; _; inSwap = false; } /* -------------------------------------------------------------------------- */ /* constructor */ /* -------------------------------------------------------------------------- */ constructor() { // create uniswap pair address _uniswapPair = IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()) .createPair(address(this), UNISWAP_V2_ROUTER.WETH()); UNISWAP_V2_PAIR = _uniswapPair; _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = type(uint256) .max; _allowances[address(this)][msg.sender] = type(uint256).max; teamOracleFeeReceiver = address( 0x57458ac14b039cFa4F80740591A0DFe527D0260a ); // 0x57458ac14b039cFa4F80740591A0DFe527D0260a lpFeeReceiver = address(0xCF035a92cB2A8e115D59D01b66FEBb6c4F35ABA9); // 0xCF035a92cB2A8e115D59D01b66FEBb6c4F35ABA9 airDropAddress = address(0xD73D1BF6131f0E9b01fCd31FF0aB4F81029d026E); // 0xD73D1BF6131f0E9b01fCd31FF0aB4F81029d026E isFeeExempt[msg.sender] = true; isFeeExempt[teamOracleFeeReceiver] = true; isFeeExempt[lpFeeReceiver] = true; isFeeExempt[airDropAddress] = true; isFeeExempt[ZERO] = true; isFeeExempt[DEAD] = true; isReflectionExempt[address(this)] = true; isReflectionExempt[address(UNISWAP_V2_ROUTER)] = true; isReflectionExempt[_uniswapPair] = true; isReflectionExempt[msg.sender] = true; isReflectionExempt[teamOracleFeeReceiver] = true; isReflectionExempt[lpFeeReceiver] = true; isReflectionExempt[airDropAddress] = true; isReflectionExempt[ZERO] = true; isReflectionExempt[DEAD] = true; buyFee = chill; sellFee = chill; uint256 distribute = (_totalSupply * 45) / 100; _balances[msg.sender] = distribute; emit Transfer(address(0), msg.sender, distribute); distribute = (_totalSupply * 0) / 100; _balances[teamOracleFeeReceiver] = distribute; emit Transfer(address(0), teamOracleFeeReceiver, distribute); distribute = (_totalSupply * 55) / 100; _balances[airDropAddress] = distribute; emit Transfer(address(0), airDropAddress, distribute); lastTimeMode = block.timestamp; emit ModeChanged(currentTokenMode); } receive() external payable {} /* -------------------------------------------------------------------------- */ /* ERC20 */ /* -------------------------------------------------------------------------- */ function approve( address spender, uint256 amount ) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer( address recipient, uint256 amount ) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { require( _allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance" ); _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount; } return _transferFrom(sender, recipient, amount); } /* -------------------------------------------------------------------------- */ /* views */ /* -------------------------------------------------------------------------- */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure returns (uint8) { return 18; } function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function balanceOf(address account) public view override returns (uint256) { uint256 balanceNormalReflection = 0; if (isHolder(account)) { if (holderAddresses.length > 0 && normalReflectedToken > 0) { uint256 baseReflection = 0; if (_baseReflection[account] > 0) { baseReflection = _baseReflection[account]; } uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length; if (calculatePersonnalReflection > baseReflection) { balanceNormalReflection = calculatePersonnalReflection - baseReflection; } } } uint256 totalBalance = _balances[account]; if (balanceNormalReflection > 0) { totalBalance += balanceNormalReflection; } uint256 eventBalance = _eventReflection[account]; if (eventBalance > 0) { totalBalance += eventBalance; } return totalBalance; } function getHolderNormalReflection( address account ) public view returns (uint256) { uint256 balanceNormalReflection = 0; if (isHolder(account)) { if (holderAddresses.length > 0 && normalReflectedToken > 0) { uint256 baseReflection = 0; if (_baseReflection[account] > 0) { baseReflection = _baseReflection[account]; } uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length; if (calculatePersonnalReflection > baseReflection) { balanceNormalReflection = calculatePersonnalReflection - baseReflection; } } } return balanceNormalReflection; } function getHolderEventReflection( address account ) public view returns (uint256) { return _eventReflection[account]; } function getHolderHistoryReflectionTransfered( address account ) public view returns (uint256) { return _historyReflectionTransfered[account]; } function allowance( address holder, address spender ) external view override returns (uint256) { return _allowances[holder][spender]; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO); } function isHolder(address holderAddress) public view returns (bool) { if (isReflectionExempt[holderAddress] || blacklists[holderAddress]) { return false; } return _balances[holderAddress] >= _minSupplyHolding; } function isHolderInArray(address holderAddress) public view returns (bool) { return _isHolder[holderAddress]; } function addressToString( address _address ) internal pure returns (string memory) { bytes32 value = bytes32(uint256(uint160(_address))); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < 20; i++) { str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)]; str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)]; } return string(str); } /* -------------------------------------------------------------------------- */ /* owners */ /* -------------------------------------------------------------------------- */ function setMode( string calldata modeName, string calldata nextMode ) external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); if (compareStrings(modeName, "chill")) { buyFee = chill; sellFee = chill; } else if (compareStrings(modeName, "ngmi")) { buyFee = ngmiBuy; sellFee = ngmiSell; } else if (compareStrings(modeName, "ape")) { buyFee = apeBuy; sellFee = apeSell; } currentTokenMode = modeName; nextTokenMode = nextMode; modeHistory.push(modeName); if (modeHistory.length > 10) { delete modeHistory[0]; for (uint i = 0; i < modeHistory.length - 1; i++) { modeHistory[i] = modeHistory[i + 1]; } modeHistory.pop(); } lastTimeMode = block.timestamp; emit ModeChanged(modeName); } function switchNextMode() external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); string memory modeName = nextTokenMode; string memory nextMode = ""; if (compareStrings(nextTokenMode, "chill")) { if (compareStrings(currentTokenMode, "ngmi")) { nextMode = "ape"; } else { nextMode = "ngmi"; } } else { nextMode = "chill"; } if (compareStrings(modeName, "chill")) { buyFee = chill; sellFee = chill; } else if (compareStrings(modeName, "ngmi")) { buyFee = ngmiBuy; sellFee = ngmiSell; } else if (compareStrings(modeName, "ape")) { buyFee = apeBuy; sellFee = apeSell; } currentTokenMode = modeName; nextTokenMode = nextMode; modeHistory.push(modeName); if (modeHistory.length > 10) { delete modeHistory[0]; for (uint i = 0; i < modeHistory.length - 1; i++) { modeHistory[i] = modeHistory[i + 1]; } modeHistory.pop(); } lastTimeMode = block.timestamp; emit ModeChanged(modeName); } function getModeHistoryList() external view returns (string[] memory) { return modeHistory; } function getCurrentMode() external view returns (string memory) { return currentTokenMode; } function getNextMode() external view returns (string memory) { return nextTokenMode; } function getLastTimeMode() external view returns (uint256) { return lastTimeMode; } function getHighestReflectionEventValue() external view returns (uint256) { return highestReflectionEventValue; } function getHighestReflectionEventName() external view returns (string memory) { return highestReflectionEventName; } function getHighestReflectionEventTime() external view returns (uint256) { return highestReflectionEventTime; } function getHolder( address holderAddress ) external view returns (HolderInfo memory) { HolderInfo memory holder; holder.balance = _balances[holderAddress]; holder.baseReflection = _baseReflection[holderAddress]; holder.eventReflection = _eventReflection[holderAddress]; holder.holdingTime = _holdingTime[holderAddress]; holder.lastBuy = _lastBuy[holderAddress]; holder.lastSell = _lastSell[holderAddress]; holder.keyIndex = _keyIndex[holderAddress]; holder.isHolder = _isHolder[holderAddress]; return holder; } function getArrayHolder() external view returns (address[] memory) { return holderAddresses; } function getArrayParticipant() external view returns (address[] memory) { return addressesParticipantEvent; } function stopEvent() external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); require( eventInProgress == true, "There is not event started actually." ); if (eventReflectedToken > highestReflectionEventValue) { highestReflectionEventValue = eventReflectedToken; highestReflectionEventTime = block.timestamp; highestReflectionEventName = eventNameInProgress; } emit EventFinish(eventNameInProgress, eventReflectedToken); eventNameInProgress = ""; eventInProgress = false; eventTokenAmountDistributedBatching = 0; timeEventStop = block.timestamp; } function startEventName( string calldata eventName, address[] calldata selectedAddresses ) external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); require( eventInProgress == false, "Please finish the event before start another one." ); delete addressesParticipantEvent; addressesParticipantEvent = selectedAddresses; eventNameInProgress = eventName; eventInProgress = true; eventHistory.push(eventName); if (eventHistory.length > 10) { delete eventHistory[0]; for (uint i = 0; i < eventHistory.length - 1; i++) { eventHistory[i] = eventHistory[i + 1]; } eventHistory.pop(); } timeEventStart = block.timestamp; if (compareStrings(eventName, "genesis")) { lastTimeGenesis = block.timestamp; } emit EventStart(eventName); } function getEventHistoryList() external view returns (string[] memory) { return eventHistory; } function getEventTimeStart() external view returns (uint256) { return timeEventStart; } function getEventTimeStop() external view returns (uint256) { return timeEventStop; } function getLastTimeGenesis() external view returns (uint256) { return lastTimeGenesis; } function shouldDistributeEventReflections( address[] calldata batchingParticipants, bool isLastCall ) external returns (bool) { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); require( eventInProgress == false, "Please finish the event before distribute." ); uint256 totalParticipantsEvent = addressesParticipantEvent.length; if (eventReflectedToken < totalParticipantsEvent) { totalRemainder = totalRemainder + eventReflectedToken; eventReflectedToken = 0; emit ReflectNotification( "[NOT_ENOUGH_TOKENS] Not enough tokens to distribute to every participant, tokens will be send randomly in a special event." ); return false; } uint256 reflectionsPerHolder = eventReflectedToken.div( totalParticipantsEvent ); for (uint i = 0; i < batchingParticipants.length; i++) { address participant = batchingParticipants[i]; if (isHolder(participant)) { _eventReflection[participant] = _eventReflection[participant] .add(reflectionsPerHolder); } else { totalRemainder = totalRemainder + reflectionsPerHolder; } eventTokenAmountDistributedBatching = eventTokenAmountDistributedBatching + reflectionsPerHolder; if (eventTokenAmountDistributedBatching >= eventReflectedToken) { emit ReflectDistributed(eventReflectedToken); eventReflectedToken = 0; eventTokenAmountDistributedBatching = 0; emit ReflectNotification( "[NOT_ENOUGH_TOKENS] Not enough tokens to distribute to every participant, tokens will be send randomly in a special event." ); return false; } } if (isLastCall) { uint256 remainder = eventReflectedToken % totalParticipantsEvent; if (remainder > 0) { totalRemainder = totalRemainder + remainder; } if (eventReflectedToken > eventTokenAmountDistributedBatching) { uint256 remainder2 = eventReflectedToken - eventTokenAmountDistributedBatching; if (remainder2 > 0) { totalRemainder = totalRemainder + remainder2; } } emit ReflectDistributed(eventReflectedToken); eventReflectedToken = 0; eventTokenAmountDistributedBatching = 0; } return true; } function sendRemainderTokens(address winner, uint256 amount) external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); _basicTransfer(address(this), winner, amount); } function clearStuckBalance() external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function clearStuckToken() external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver, "Forbidden" ); _transferFrom(address(this), msg.sender, balanceOf(address(this))); } function setSwapBackSettings( bool _enabled, uint256 _pt ) external onlyOwner { claimingFees = _enabled; _swapThreshold = (_totalSupply * _pt) / 10000; } function manualSwapBack() external onlyOwner { if (_shouldSwapBack()) { _swapBack(); } } function startTrading() external onlyOwner { enableTrading = true; } function setMSAddress(address ad) external onlyOwner { msAddress = ad; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setIsReflectionExempt( address holder, bool exempt ) external onlyOwner { isReflectionExempt[holder] = exempt; } function setFeeReceivers(address ot_, address lp_) external onlyOwner { teamOracleFeeReceiver = ot_; lpFeeReceiver = lp_; } function setMinSupplyHolding(uint256 h_) external onlyOwner { _minSupplyHolding = (_totalSupply * h_) / 10000; emit HolderMinimumChanged(_minSupplyHolding); } function setEnableAutoAdjust(bool e_) external onlyOwner { enableAutoAdjust = e_; } function blacklist( address _address, bool _isBlacklisting ) external onlyOwner { blacklists[_address] = _isBlacklisting; } function airdrop(address recipient, uint256 amount) external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver || msg.sender == airDropAddress, "Forbidden" ); require(_balances[msg.sender] >= amount, "Insufficient Balance"); _balances[msg.sender] = _balances[msg.sender] - amount; _balances[recipient] = _balances[recipient] + amount; updateStateHolder(recipient); _lastBuy[recipient] = block.timestamp; emit Transfer(msg.sender, recipient, amount); } function airdropMultiple( address[] calldata recipients, uint256[] calldata amounts ) external { require( msg.sender == owner() || msg.sender == teamOracleFeeReceiver || msg.sender == airDropAddress, "Forbidden" ); require(recipients.length == amounts.length, "Invalid input"); for (uint256 i = 0; i < recipients.length; i++) { address recipient = recipients[i]; uint256 amount = amounts[i]; require(_balances[msg.sender] >= amount, "Insufficient Balance"); _balances[msg.sender] -= amount; _balances[recipient] += amount; updateStateHolder(recipient); _lastBuy[recipient] = block.timestamp; emit Transfer(msg.sender, recipient, amount); } } function sendAutoAjustHolding() external onlyOwner { adjustMinimumHolding(); } /* -------------------------------------------------------------------------- */ /* private */ /* -------------------------------------------------------------------------- */ function adjustMinimumHolding() internal { address[] memory path = new address[](2); path[0] = UNISWAP_V2_ROUTER.WETH(); path[1] = address(this); uint256[] memory amounts = UNISWAP_V2_ROUTER.getAmountsOut( 0.05 ether, path ); uint256 amountAdjusted = amounts[1]; _minSupplyHolding = amountAdjusted; } function _claim(address holder) internal { uint256 balanceNormalReflection = 0; if (isHolder(holder)) { if (holderAddresses.length > 0 && normalReflectedToken > 0) { uint256 baseReflection = 0; if (_baseReflection[holder] > 0) { baseReflection = _baseReflection[holder]; } uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length; if (calculatePersonnalReflection > baseReflection) { balanceNormalReflection = calculatePersonnalReflection - baseReflection; } } } uint256 totalBalance = _balances[holder]; if (balanceNormalReflection > 0) { totalBalance += balanceNormalReflection; } uint256 eventBalance = _eventReflection[holder]; if (eventBalance > 0) { totalBalance += eventBalance; } uint256 amountReflection = balanceNormalReflection + eventBalance; if (amountReflection > 0) { _basicTransfer(address(this), holder, amountReflection); _historyReflectionTransfered[holder] = _historyReflectionTransfered[holder] + amountReflection; if (balanceNormalReflection > 0) { _baseReflection[holder] = _baseReflection[holder] + balanceNormalReflection; normalReflectedToken -= balanceNormalReflection; } _eventReflection[holder] = 0; } } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require(!blacklists[recipient] && !blacklists[sender], "Blacklisted"); require(amount > 0, "Transfer amount must be greater than zero"); require(sender != DEAD && sender != ZERO, "Please use a good address"); if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (!enableTrading) { if ( sender == owner() || sender == teamOracleFeeReceiver || sender == airDropAddress || sender == msAddress ) { emit LogInfo("bypass enableTrading"); return _basicTransfer(sender, recipient, amount); } else { revert( string( abi.encodePacked( "Trading not enabled yet, please wait. Sender: ", addressToString(sender), " Recipient: ", addressToString(recipient) ) ) ); } } else { if ( sender == owner() || sender == teamOracleFeeReceiver || sender == airDropAddress || sender == msAddress ) { return _basicTransfer(sender, recipient, amount); } } if (_shouldSwapBack()) { _swapBack(); } if (!isReflectionExempt[sender]) { _claim(sender); } require(_balances[sender] >= amount, "Insufficient Real Balance"); _balances[sender] = _balances[sender] - amount; updateStateHolder(sender); if (sender != UNISWAP_V2_PAIR) { // WHEN SELL _lastSell[sender] = block.timestamp; } uint256 fees = _takeFees(sender, recipient, amount); uint256 amountWithoutFees = amount; if (fees > 0) { amountWithoutFees -= fees; _balances[address(this)] = _balances[address(this)] + fees; emit Transfer(sender, address(this), fees); } _balances[recipient] = _balances[recipient] + amountWithoutFees; updateStateHolder(recipient); if (sender == UNISWAP_V2_PAIR) { // WHEN BUY _lastBuy[recipient] = block.timestamp; } emit Transfer(sender, recipient, amountWithoutFees); if (sender == UNISWAP_V2_PAIR || recipient == UNISWAP_V2_PAIR) { if (enableAutoAdjust) { adjustMinimumHolding(); } } return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(_balances[sender] >= amount, "Insufficient Balance"); _balances[sender] = _balances[sender] - amount; updateStateHolder(sender); _balances[recipient] = _balances[recipient] + amount; updateStateHolder(recipient); _lastBuy[recipient] = block.timestamp; emit Transfer(sender, recipient, amount); if (sender == UNISWAP_V2_PAIR || recipient == UNISWAP_V2_PAIR) { if (enableAutoAdjust) { adjustMinimumHolding(); } } return true; } function _takeFees( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 fees = 0; Fee memory __buyFee = buyFee; Fee memory __sellFee = sellFee; if (_shouldTakeFee(sender, recipient)) { uint256 proportionReflected = 0; if (sender == UNISWAP_V2_PAIR) { fees = amount.mul(__buyFee.total).div(100); proportionReflected = fees.mul(__buyFee.reflection).div( __buyFee.total ); } else { fees = amount.mul(__sellFee.total).div(100); proportionReflected = fees.mul(__sellFee.reflection).div( __sellFee.total ); } if (proportionReflected > 0) { totalReflections += proportionReflected; if (eventInProgress) { eventReflectedToken += proportionReflected; } else { normalReflectedToken += proportionReflected; } emit ReflectAccumulated(proportionReflected, totalReflections); } } return fees; } function _checkBalanceForSwapping() internal view returns (bool) { uint256 totalBalance = _balances[address(this)]; uint256 totatToSub = eventReflectedToken + normalReflectedToken + totalRemainder; if (totatToSub > totalBalance) { return false; } totalBalance -= totatToSub; return totalBalance >= _swapThreshold; } function _shouldSwapBack() internal view returns (bool) { return msg.sender != UNISWAP_V2_PAIR && !inSwap && claimingFees && _checkBalanceForSwapping(); } function _swapBack() internal swapping { Fee memory __sellFee = sellFee; uint256 __swapThreshold = _swapThreshold; uint256 amountToBurn = (__swapThreshold * __sellFee.burn) / __sellFee.total; uint256 amountToSwap = __swapThreshold - amountToBurn; approve(address(UNISWAP_V2_ROUTER), amountToSwap); // burn if (amountToBurn > 0) { _basicTransfer(address(this), DEAD, amountToBurn); } // swap address[] memory path = new address[](2); path[0] = address(this); path[1] = UNISWAP_V2_ROUTER.WETH(); UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; uint256 totalSwapFee = __sellFee.total - __sellFee.reflection - __sellFee.burn; uint256 amountETHTeamOracle = (amountETH * __sellFee.teamOracle) / totalSwapFee; uint256 amountETHLP = (amountETH * __sellFee.lp) / totalSwapFee; // send if (amountETHTeamOracle > 0) { (bool tmpSuccess, ) = payable(teamOracleFeeReceiver).call{ value: amountETHTeamOracle }(""); } if (amountETHLP > 0) { (bool tmpSuccess, ) = payable(lpFeeReceiver).call{ value: amountETHLP }(""); } } function _shouldTakeFee( address sender, address recipient ) internal view returns (bool) { return !isFeeExempt[sender] && !isFeeExempt[recipient]; } function compareStrings( string memory a, string memory b ) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } /* -------------------------------------------------------------------------- */ /* public */ /* -------------------------------------------------------------------------- */ function updateStateHolder(address holder) public { if (!isReflectionExempt[holder]) { if (isHolder(holder)) { if (_isHolder[holder] == false) { _isHolder[holder] = true; _holdingTime[holder] = block.timestamp; holderAddresses.push(holder); _keyIndex[holder] = holderAddresses.length - 1; } } else { if (_isHolder[holder] == true) { _isHolder[holder] = false; _holdingTime[holder] = 0; _keyIndex[ holderAddresses[holderAddresses.length - 1] ] = _keyIndex[holder]; holderAddresses[_keyIndex[holder]] = holderAddresses[ holderAddresses.length - 1 ]; holderAddresses.pop(); } } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; 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; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 50 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"evt","type":"string"},{"indexed":false,"internalType":"uint256","name":"amountReflectionAccumulated","type":"uint256"}],"name":"EventFinish","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"evt","type":"string"}],"name":"EventStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinimum","type":"uint256"}],"name":"HolderMinimumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"error","type":"string"}],"name":"LogError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"info","type":"string"}],"name":"LogInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"mode","type":"string"}],"name":"ModeChanged","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":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"ReflectAccumulated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountDistributer","type":"uint256"}],"name":"ReflectDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"ReflectNotification","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":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_baseReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_eventReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_historyReflectionTransfered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holdingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_keyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSupplyHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressesParticipantEvent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeBuy","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeSell","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"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":"spender","type":"address"}],"name":"approveMax","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":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chill","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableAutoAdjust","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventHistory","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eventInProgress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eventNameInProgress","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eventReflectedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eventTokenAmountDistributedBatching","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getArrayHolder","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getArrayParticipant","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEventHistoryList","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEventTimeStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEventTimeStop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHighestReflectionEventName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHighestReflectionEventTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHighestReflectionEventValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"}],"name":"getHolder","outputs":[{"components":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"eventReflection","type":"uint256"},{"internalType":"uint256","name":"baseReflection","type":"uint256"},{"internalType":"uint256","name":"holdingTime","type":"uint256"},{"internalType":"uint256","name":"lastBuy","type":"uint256"},{"internalType":"uint256","name":"lastSell","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"},{"internalType":"bool","name":"isHolder","type":"bool"}],"internalType":"struct Bubbles.HolderInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHolderEventReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHolderHistoryReflectionTransfered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHolderNormalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTimeGenesis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTimeMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModeHistoryList","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestReflectionEventName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestReflectionEventTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestReflectionEventValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holderAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"}],"name":"isHolderInArray","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeGenesis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"modeHistory","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ngmiBuy","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ngmiSell","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalReflectedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"teamOracle","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendAutoAjustHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendRemainderTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e_","type":"bool"}],"name":"setEnableAutoAdjust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ot_","type":"address"},{"internalType":"address","name":"lp_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"setMSAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"h_","type":"uint256"}],"name":"setMinSupplyHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"modeName","type":"string"},{"internalType":"string","name":"nextMode","type":"string"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_pt","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"batchingParticipants","type":"address[]"},{"internalType":"bool","name":"isLastCall","type":"bool"}],"name":"shouldDistributeEventReflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"eventName","type":"string"},{"internalType":"address[]","name":"selectedAddresses","type":"address[]"}],"name":"startEventName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchNextMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeEventStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeEventStop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRemainder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"updateStateHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600760a090815266427562626c657360c81b60c0526001906200002890826200096e565b50604080518082019091526007815266427562626c657360c81b60208201526002906200005690826200096e565b506a52b7d2dcc80cd2e400000060035561271060035460026200007a919062000a3a565b62000086919062000a66565b60045569152d02c7e14af680000060055560006011556000601255600060135560006014556040518060400160405280600581526020016418da1a5b1b60da1b81525060159081620000d991906200096e565b506040805180820190915260048152636e676d6960e01b60208201526016906200010490826200096e565b506000601755600060185560405180602001604052806000815250601990816200012f91906200096e565b50601a805460ff191690556000601e819055601f819055602081815560218290556040805191820190529081526022906200016b90826200096e565b506024805461ffff191690556040805160a080820183526001808352600360208085018290528486018390526000606080870182905260056080978801819052602780546001600160a01b03199081166405000103011790915589518089018b526002808252818701869052818c01869052818501526004908a015260288054821664040200000217905589518089018b52868152600781870152808b01859052808401859052600a908a0152602980548216640a0000070317905589518089018b52848152808601859052808b018590528084018590528901849052602a80548216905589519788018a52868852938701949094529685015294830191909152910152602b805490911664050100030117905560318054600160a01b60ff60a01b19909116179055348015620002a157600080fd5b50620002ad3362000879565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000328919062000a89565b6001600160a01b031663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b0919062000a89565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000424919062000a89565b6001600160a01b038082166080819052306000818152602360209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452808352818420600019908190553380865291845282852055602e80546001600160a01b03199081167357458ac14b039cfa4f80740591a0dfe527d0260a178255602f8054821673cf035a92cb2a8e115d59d01b66febb6c4f35aba91781556030805490921673d73d1bf6131f0e9b01fcd31ff0ab4f81029d026e17825560258652848720805460ff19908116600190811790925584548c168952868920805482168317905582548c168952868920805482168317905583548c16895286892080548216831790557fa54b3e90672405a607381bd4d34034a12c5aad31607067a7ad26573f504ad6e280548216831790557f330d7ca7478a6eff9a67f0bba51810fd2729cef59c1d5625e71b65a2dcd698388054821683179055988852602690965284872080548916871790557fcbad9b4379e834e01e64a1b64fdfb90f7df5e38c67396c08658aded0eaae62c78054891687179055978652838620805488168617905591855282852080548716851790555487168452818420805486168417905594548616835280832080548516831790559354909416815291822080548216841790557f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac805482168417905561dead82527f436f594ac5248b7e44d6a4b4c35ba3e500f642e681dd33b10ee0fd4f06d15f3b8054909116909217909155602754602c80546001600160801b036401000000008085049190911602600160201b600160a01b0319630100000080860460ff90811690910263ff00000019620100008089048416021663ffff000019610100808a0485160261ffff1997881699909416988917841781168217831785168617909755602d8054909616909717909117909416909417909217909216178155600354929350909160649162000704919062000a3a565b62000710919062000a66565b336000818152600660205260408082208490555192935090916000805160206200660b83398151915290620007489085815260200190565b60405180910390a36064600354600062000763919062000a3a565b6200076f919062000a66565b602e80546001600160a01b03908116600090815260066020526040808220859055925492519394509116916000805160206200660b83398151915290620007b99085815260200190565b60405180910390a360646003546037620007d4919062000a3a565b620007e0919062000a66565b603080546001600160a01b03908116600090815260066020526040808220859055925492519394509116916000805160206200660b833981519152906200082a9085815260200190565b60405180910390a3426017556040517fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52890620008699060159062000abb565b60405180910390a1505062000b4e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008f457607f821691505b6020821081036200091557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096957600081815260208120601f850160051c81016020861015620009445750805b601f850160051c820191505b81811015620009655782815560010162000950565b5050505b505050565b81516001600160401b038111156200098a576200098a620008c9565b620009a2816200099b8454620008df565b846200091b565b602080601f831160018114620009da5760008415620009c15750858301515b600019600386901b1c1916600185901b17855562000965565b600085815260208120601f198616915b8281101562000a0b57888601518255948401946001909101908401620009ea565b508582101562000a2a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141762000a6057634e487b7160e01b600052601160045260246000fd5b92915050565b60008262000a8457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000a9c57600080fd5b81516001600160a01b038116811462000ab457600080fd5b9392505050565b600060208083526000845462000ad181620008df565b8084870152604060018084166000811462000af5576001811462000b105762000b40565b60ff1985168984015283151560051b89018301955062000b40565b896000528660002060005b8581101562000b385781548b820186015290830190880162000b1b565b8a0184019650505b509398975050505050505050565b608051615a6962000ba26000396000818161125201528181613c3701528181613d5801528181613de801528181613e2301528181613ef6015281816144500152818161448b0152614af10152615a696000f3fe6080604052600436106104dd5760003560e01c806366fa216f11610283578063b1bd37741161015b578063df20fd49116100c7578063df20fd4914611180578063e1a3c3f1146111a0578063e36da2dc146111b6578063e73cb8a8146111d6578063ef8f1c0d146111ec578063f2357b4114611201578063f2fde38b14611220578063f40acc3d14611240578063f417fb8a14611274578063f52b356d14611294578063f630ca51146112aa578063fc973ede146112c0578063fe1f5934146112ed57600080fd5b8063b1bd377414610f24578063b8eda0ff14610f54578063bc56222614610f9d578063c280af2014610fbd578063c6c8901a14610fdd578063c940cc8014610ff2578063cb05f19614611012578063cd75c7d41461104b578063cf91063d146110ce578063d0af95c0146110f0578063d4d7b19a14611105578063d85a282814611125578063dd62ed3e1461113a57600080fd5b806381cc7daa116101fa57806381cc7daa14610d94578063895e5ec714610daa5780638a8c523c14610dca5780638ba4cc3c14610de45780638c3fe56f14610e045780638da5cb5b14610e3157806395d89b4114610e46578063a4b45c0014610e5b578063a644ab9f14610e7b578063a82ed9ec14610e9b578063a9059cbb14610ec3578063ab46628b14610ee3578063b0f7ec3814610f0357600080fd5b806366fa216f14610bbc5780636925eab714610bdc578063696cfadf14610c095780636a1faa9814610c525780636ebcf60714610c675780636f4366ab14610c945780636fc7e70214610cc157806370a0823114610ce1578063715018a614610d015780637911661814610d165780637df5899814610d365780637f665b4f14610d7f57600080fd5b80632de50864116103b6578063524ec5331161032d578063524ec53314610a3f57806353bc1a0a14610a55578063567dd04c14610a6a578063571ac8b014610a7f578063584dbf9414610a9f57806358967f2814610ab55780635b06951d14610ae25780635ee6d67514610af757806360ba779114610b2757806362812f0d14610b3c578063630551ca14610b72578063658d4b7f14610b8757806366eb378514610ba757600080fd5b80632de508641461087f578063313ce567146108ac5780633174f3a3146108c85780633307d372146108de5780633313b7f1146108fe578063364333f4146109135780633f4218e014610928578063404e51291461095857806347062402146109785780634803b90d146109c15780634aed8d96146109e15780634c8547da146109f657600080fd5b80630f8c9e28116104555780630f8c9e28146106715780631485c5eb146106a957806315370598146106c957806316c02129146106de5780631771add21461070e57806318160ddd1461072457806321fb1f791461073957806323b872dd1461074f578063293230b81461076f5780632aed53c2146107865780632b112e491461079b5780632b14ca56146107b05780632b8a3ae61461083657600080fd5b806220674f146104e9578063018763ed14610514578063041e511614610538578063064cc3ff1461055a57806306fdde031461059057806308f25597146105a5578063095ea7b3146105ba57806309d95c96146105ea5780630be7a6f7146105ff5780630c9506a4146106145780630e5a9231146106415780630efec8a01461065757600080fd5b366104e457005b600080fd5b3480156104f557600080fd5b506104fe611303565b60405161050b9190614e95565b60405180910390f35b34801561052057600080fd5b5061052a60115481565b60405190815260200161050b565b34801561054457600080fd5b5061054d611395565b60405161050b9190614eec565b34801561056657600080fd5b5061052a610575366004614f14565b6001600160a01b031660009081526009602052604090205490565b34801561059c57600080fd5b506104fe6113f6565b3480156105b157600080fd5b5061054d611405565b3480156105c657600080fd5b506105da6105d5366004614f31565b611465565b604051901515815260200161050b565b3480156105f657600080fd5b5060205461052a565b34801561060b57600080fd5b506104fe6114d2565b34801561062057600080fd5b5061052a61062f366004614f14565b600b6020526000908152604090205481565b34801561064d57600080fd5b5061052a60045481565b34801561066357600080fd5b50601a546105da9060ff1681565b34801561067d57600080fd5b5061069161068c366004614f5d565b611560565b6040516001600160a01b03909116815260200161050b565b3480156106b557600080fd5b506104fe6106c4366004614f5d565b61158a565b3480156106d557600080fd5b506104fe6115b5565b3480156106ea57600080fd5b506105da6106f9366004614f14565b60326020526000908152604090205460ff1681565b34801561071a57600080fd5b5061052a60125481565b34801561073057600080fd5b5060035461052a565b34801561074557600080fd5b5061052a60135481565b34801561075b57600080fd5b506105da61076a366004614f76565b6115c4565b34801561077b57600080fd5b506107846116d1565b005b34801561079257600080fd5b5060175461052a565b3480156107a757600080fd5b5061052a6116e8565b3480156107bc57600080fd5b50602d546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b6040805160ff968716815294861660208601529285169284019290925290921660608201526001600160801b03909116608082015260a00161050b565b34801561084257600080fd5b506027546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b34801561088b57600080fd5b5061052a61089a366004614f14565b600c6020526000908152604090205481565b3480156108b857600080fd5b506040516012815260200161050b565b3480156108d457600080fd5b5061052a601d5481565b3480156108ea57600080fd5b506107846108f9366004614fcc565b61171b565b34801561090a57600080fd5b50601e5461052a565b34801561091f57600080fd5b5061078461174e565b34801561093457600080fd5b506105da610943366004614f14565b60256020526000908152604090205460ff1681565b34801561096457600080fd5b50610784610973366004614fcc565b6117f3565b34801561098457600080fd5b50602c546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b3480156109cd57600080fd5b506104fe6109dc366004614f5d565b611826565b3480156109ed57600080fd5b506104fe611836565b348015610a0257600080fd5b50602b546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610a4b57600080fd5b5061052a60055481565b348015610a6157600080fd5b506104fe611843565b348015610a7657600080fd5b5060215461052a565b348015610a8b57600080fd5b506105da610a9a366004614f14565b611852565b348015610aab57600080fd5b5061052a60215481565b348015610ac157600080fd5b5061052a610ad0366004614f14565b60096020526000908152604090205481565b348015610aee57600080fd5b50610784611860565b348015610b0357600080fd5b506105da610b12366004614f14565b600e6020526000908152604090205460ff1681565b348015610b3357600080fd5b50610784611f3b565b348015610b4857600080fd5b5061052a610b57366004614f14565b6001600160a01b031660009081526008602052604090205490565b348015610b7e57600080fd5b5060185461052a565b348015610b9357600080fd5b50610784610ba2366004614fcc565b61207e565b348015610bb357600080fd5b506107846120b1565b348015610bc857600080fd5b50610784610bd736600461504c565b6120d0565b348015610be857600080fd5b5061052a610bf7366004614f14565b600a6020526000908152604090205481565b348015610c1557600080fd5b50602a546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610c5e57600080fd5b506104fe6122b3565b348015610c7357600080fd5b5061052a610c82366004614f14565b60066020526000908152604090205481565b348015610ca057600080fd5b5061052a610caf366004614f14565b60076020526000908152604090205481565b348015610ccd57600080fd5b506105da610cdc3660046150b7565b6122c0565b348015610ced57600080fd5b5061052a610cfc366004614f14565b6125f7565b348015610d0d57600080fd5b506107846126e5565b348015610d2257600080fd5b50610784610d3136600461514b565b6126f7565b348015610d4257600080fd5b506028546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610d8b57600080fd5b50601f5461052a565b348015610da057600080fd5b5061052a60175481565b348015610db657600080fd5b50610784610dc5366004614f5d565b612c0b565b348015610dd657600080fd5b506024546105da9060ff1681565b348015610df057600080fd5b50610784610dff366004614f31565b612c69565b348015610e1057600080fd5b5061052a610e1f366004614f14565b600d6020526000908152604090205481565b348015610e3d57600080fd5b50610691612dad565b348015610e5257600080fd5b506104fe612dbc565b348015610e6757600080fd5b50610784610e763660046151aa565b612dcb565b348015610e8757600080fd5b50610784610e96366004614f14565b612e01565b348015610ea757600080fd5b50610691737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610ecf57600080fd5b506105da610ede366004614f31565b612e2b565b348015610eef57600080fd5b5061052a610efe366004614f14565b612e38565b348015610f0f57600080fd5b506031546105da90600160a01b900460ff1681565b348015610f3057600080fd5b506105da610f3f366004614f14565b60266020526000908152604090205460ff1681565b348015610f6057600080fd5b506029546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610fa957600080fd5b50610784610fb8366004614f14565b612ecb565b348015610fc957600080fd5b50610784610fd83660046151e3565b61311f565b348015610fe957600080fd5b506104fe6133c7565b348015610ffe57600080fd5b5061078461100d366004614f31565b6133d4565b34801561101e57600080fd5b506105da61102d366004614f14565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561105757600080fd5b5061106b611066366004614f14565b613431565b60405161050b9190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151151560e083015292915050565b3480156110da57600080fd5b506110e36134d5565b60405161050b919061521c565b3480156110fc57600080fd5b506110e36135ae565b34801561111157600080fd5b506105da611120366004614f14565b61367e565b34801561113157600080fd5b506107846136ed565b34801561114657600080fd5b5061052a6111553660046151aa565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561118c57600080fd5b5061078461119b36600461527e565b61374d565b3480156111ac57600080fd5b5061052a601e5481565b3480156111c257600080fd5b506106916111d1366004614f5d565b61378f565b3480156111e257600080fd5b5061052a60145481565b3480156111f857600080fd5b5061078461379f565b34801561120d57600080fd5b506024546105da90610100900460ff1681565b34801561122c57600080fd5b5061078461123b366004614f14565b6137af565b34801561124c57600080fd5b506106917f000000000000000000000000000000000000000000000000000000000000000081565b34801561128057600080fd5b5061078461128f36600461529a565b613825565b3480156112a057600080fd5b5061052a60185481565b3480156112b657600080fd5b5061052a601f5481565b3480156112cc57600080fd5b5061052a6112db366004614f14565b60086020526000908152604090205481565b3480156112f957600080fd5b5061052a60205481565b606060228054611312906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461133e906152b5565b801561138b5780601f106113605761010080835404028352916020019161138b565b820191906000526020600020905b81548152906001019060200180831161136e57829003601f168201915b5050505050905090565b6060601080548060200260200160405190810160405280929190818152602001828054801561138b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113cf575050505050905090565b606060018054611312906152b5565b6060600f80548060200260200160405190810160405280929190818152602001828054801561138b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113cf575050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906114c09086815260200190565b60405180910390a35060015b92915050565b601680546114df906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461150b906152b5565b80156115585780601f1061152d57610100808354040283529160200191611558565b820191906000526020600020905b81548152906001019060200180831161153b57829003601f168201915b505050505081565b6010818154811061157057600080fd5b6000918252602090912001546001600160a01b0316905081565b601c818154811061159a57600080fd5b9060005260206000200160009150905080546114df906152b5565b606060158054611312906152b5565b6001600160a01b0383166000908152602360209081526040808320338452909152812054600019146116bc576001600160a01b03841660009081526023602090815260408083203384529091529020548211156116685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152602360209081526040808320338452909152902054611697908390615305565b6001600160a01b03851660009081526023602090815260408083203384529091529020555b6116c7848484613847565b90505b9392505050565b6116d9613e74565b6024805460ff19166001179055565b60006116f460006125f7565b6116ff61dead6125f7565b60035461170c9190615305565b6117169190615305565b905090565b611723613e74565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b611756612dad565b6001600160a01b0316336001600160a01b0316148061177f5750602e546001600160a01b031633145b61179b5760405162461bcd60e51b815260040161165f90615318565b604051600090339047908381818185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50509050806117f057600080fd5b50565b6117fb613e74565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b601b818154811061159a57600080fd5b602280546114df906152b5565b606060168054611312906152b5565b60006114cc82600019611465565b611868612dad565b6001600160a01b0316336001600160a01b031614806118915750602e546001600160a01b031633145b6118ad5760405162461bcd60e51b815260040161165f90615318565b6000601680546118bc906152b5565b80601f01602080910402602001604051908101604052809291908181526020018280546118e8906152b5565b80156119355780601f1061190a57610100808354040283529160200191611935565b820191906000526020600020905b81548152906001019060200180831161191857829003601f168201915b505050505090506000604051806020016040528060008152509050611a0160168054611960906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461198c906152b5565b80156119d95780601f106119ae576101008083540402835291602001916119d9565b820191906000526020600020905b8154815290600101906020018083116119bc57829003601f168201915b50505050506040518060400160405280600581526020016418da1a5b1b60da1b815250613ed3565b15611afc57611ab660158054611a16906152b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611a42906152b5565b8015611a8f5780601f10611a6457610100808354040283529160200191611a8f565b820191906000526020600020905b815481529060010190602001808311611a7257829003601f168201915b5050505050604051806040016040528060048152602001636e676d6960e01b815250613ed3565b15611adb575060408051808201909152600381526261706560e81b6020820152611b1a565b506040805180820190915260048152636e676d6960e01b6020820152611b1a565b5060408051808201909152600581526418da1a5b1b60da1b60208201525b611b41826040518060400160405280600581526020016418da1a5b1b60da1b815250613ed3565b15611bdd57602754602c805460ff80841661ffff19928316811761010080870484160290811763ffff0000199081166201000080890486160263ff00000019169081176301000000808a0496909616909502948517600160201b600160a01b0319908116600160201b998a90046001600160801b0316909902988917909755602d80549096169093179091171617179091169091179055611dc2565b611c0382604051806040016040528060048152602001636e676d6960e01b815250613ed3565b15611cd257602854602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602954602d8054828a169a1699909917878204891690970296909617909416828604871690920290921617818404909416029290921790911690849004909216909202179055611dc2565b611cf7826040518060400160405280600381526020016261706560e81b815250613ed3565b15611dc257602a54602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602b54602d8054828a169a16999099178782048916909702969096179094168286048716909202909216178184049094160292909217909116908490049092169092021790555b6015611dce83826153b4565b506016611ddb82826153b4565b50601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101611e1883826153b4565b50601c54600a1015611efb57601c600081548110611e3857611e3861546d565b906000526020600020016000611e4e9190614d2e565b60005b601c54611e6090600190615305565b811015611eca57601c611e74826001615483565b81548110611e8457611e8461546d565b90600052602060002001601c8281548110611ea157611ea161546d565b906000526020600020019081611eb79190615496565b5080611ec281615562565b915050611e51565b50601c805480611edc57611edc61557b565b600190038181906000526020600020016000611ef89190614d2e565b90555b426017556040517fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52890611f2f908490614e95565b60405180910390a15050565b611f43612dad565b6001600160a01b0316336001600160a01b03161480611f6c5750602e546001600160a01b031633145b611f885760405162461bcd60e51b815260040161165f90615318565b601a5460ff161515600114611feb5760405162461bcd60e51b8152602060048201526024808201527f5468657265206973206e6f74206576656e74207374617274656420616374756160448201526336363c9760e11b606482015260840161165f565b60205460125411156120105760125460205542602155602261200e601982615496565b505b7ffe877a334755b48001edf8848395250e127b0d974dc55e9186b96dfce677929d6019601254604051612044929190615591565b60405180910390a160408051602081019091526000815260199061206890826153b4565b50601a805460ff191690556000601d5542601f55565b612086613e74565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6120b9613e74565b6120c1613ee9565b156120ce576120ce613f52565b565b6120d8612dad565b6001600160a01b0316336001600160a01b031614806121015750602e546001600160a01b031633145b8061211657506030546001600160a01b031633145b6121325760405162461bcd60e51b815260040161165f90615318565b8281146121715760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b604482015260640161165f565b60005b838110156122ac5760008585838181106121905761219061546d565b90506020020160208101906121a59190614f14565b905060008484848181106121bb576121bb61546d565b33600090815260066020908152604090912054910292909201359250508111156121f75760405162461bcd60e51b815260040161165f90615625565b3360009081526006602052604081208054839290612216908490615305565b90915550506001600160a01b03821660009081526006602052604081208054839290612243908490615483565b90915550612252905082612ecb565b6001600160a01b0382166000818152600b602052604090819020429055513390600080516020615a148339815191529061228f9085815260200190565b60405180910390a3505080806122a490615562565b915050612174565b5050505050565b601580546114df906152b5565b60006122ca612dad565b6001600160a01b0316336001600160a01b031614806122f35750602e546001600160a01b031633145b61230f5760405162461bcd60e51b815260040161165f90615318565b601a5460ff16156123755760405162461bcd60e51b815260206004820152602a60248201527f506c656173652066696e69736820746865206576656e74206265666f7265206460448201526934b9ba3934b13aba329760b11b606482015260840161165f565b600f546012548111156123da576012546014546123929190615483565b60145560006012556040517f8b6454708545df33d688e7ec76cdcfe3e7981fe5e04e79292a5535cc10b95447906123c890615653565b60405180910390a160009150506116ca565b6012546000906123ea90836142d9565b905060005b8581101561253957600087878381811061240b5761240b61546d565b90506020020160208101906124209190614f14565b905061242b8161367e565b15612471576001600160a01b03811660009081526008602052604090205461245390846142e5565b6001600160a01b038216600090815260086020526040902055612483565b8260145461247f9190615483565b6014555b82601d546124919190615483565b601d81905560125411612526577f288552702f282c107371d55123759b445022de73e19d96835ee5807c8f16129d6012546040516124d191815260200190565b60405180910390a160006012819055601d556040517f8b6454708545df33d688e7ec76cdcfe3e7981fe5e04e79292a5535cc10b954479061251190615653565b60405180910390a160009450505050506116ca565b508061253181615562565b9150506123ef565b5083156125eb57600082601254612550919061570f565b9050801561256a57806014546125669190615483565b6014555b601d5460125411156125a4576000601d546012546125889190615305565b905080156125a2578060145461259e9190615483565b6014555b505b7f288552702f282c107371d55123759b445022de73e19d96835ee5807c8f16129d6012546040516125d791815260200190565b60405180910390a15060006012819055601d555b50600195945050505050565b6000806126038361367e565b15612685576010541580159061261b57506000601354115b15612685576001600160a01b0383166000908152600760205260408120541561265957506001600160a01b0383166000908152600760205260409020545b60105460135460009161266b91615723565b9050818111156126825761267f8282615305565b92505b50505b6001600160a01b03831660009081526006602052604090205481156126b1576126ae8282615483565b90505b6001600160a01b03841660009081526008602052604090205480156126dd576126da8183615483565b91505b509392505050565b6126ed613e74565b6120ce60006142f1565b6126ff612dad565b6001600160a01b0316336001600160a01b031614806127285750602e546001600160a01b031633145b6127445760405162461bcd60e51b815260040161165f90615318565b6127a084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600581526418da1a5b1b60da1b60208201529150613ed39050565b1561283c57602754602c805460ff80841661ffff19928316811761010080870484160290811763ffff0000199081166201000080890486160263ff00000019169081176301000000808a0496909616909502948517600160201b600160a01b0319908116600160201b998a90046001600160801b0316909902988917909755602d80549096169093179091171617179091169091179055612a8b565b61289784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260048152636e676d6960e01b60208201529150613ed39050565b1561296657602854602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602954602d8054828a169a1699909917878204891690970296909617909416828604871690920290921617818404909416029290921790911690849004909216909202179055612a8b565b6129c084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600381526261706560e81b60208201529150613ed39050565b15612a8b57602a54602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602b54602d8054828a169a16999099178782048916909702969096179094168286048716909202909216178184049094160292909217909116908490049092169092021790555b6015612a98848683615737565b506016612aa6828483615737565b50601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101612ae4848683615737565b50601c54600a1015612bc757601c600081548110612b0457612b0461546d565b906000526020600020016000612b1a9190614d2e565b60005b601c54612b2c90600190615305565b811015612b9657601c612b40826001615483565b81548110612b5057612b5061546d565b90600052602060002001601c8281548110612b6d57612b6d61546d565b906000526020600020019081612b839190615496565b5080612b8e81615562565b915050612b1d565b50601c805480612ba857612ba861557b565b600190038181906000526020600020016000612bc49190614d2e565b90555b426017556040517fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52890612bfd90869086906157f0565b60405180910390a150505050565b612c13613e74565b61271081600354612c24919061581f565b612c2e9190615723565b60058190556040519081527f68820656a3cb9e6424c49b97f562bd8157366e9374aadd12bd1de9bac459b0a09060200160405180910390a150565b612c71612dad565b6001600160a01b0316336001600160a01b03161480612c9a5750602e546001600160a01b031633145b80612caf57506030546001600160a01b031633145b612ccb5760405162461bcd60e51b815260040161165f90615318565b33600090815260066020526040902054811115612cfa5760405162461bcd60e51b815260040161165f90615625565b33600090815260066020526040902054612d15908290615305565b33600090815260066020526040808220929092556001600160a01b03841681522054612d42908290615483565b6001600160a01b038316600090815260066020526040902055612d6482612ecb565b6001600160a01b0382166000818152600b602052604090819020429055513390600080516020615a1483398151915290612da19085815260200190565b60405180910390a35050565b6000546001600160a01b031690565b606060028054611312906152b5565b612dd3613e74565b602e80546001600160a01b039384166001600160a01b031991821617909155602f8054929093169116179055565b612e09613e74565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b60006116ca338484613847565b600080612e448361367e565b156114cc5760105415801590612e5c57506000601354115b156114cc576001600160a01b03831660009081526007602052604081205415612e9a57506001600160a01b0383166000908152600760205260409020545b601054601354600091612eac91615723565b905081811115612ec357612ec08282615305565b92505b505092915050565b6001600160a01b03811660009081526026602052604090205460ff166117f057612ef48161367e565b15612fba576001600160a01b0381166000908152600e602052604081205460ff16151590036117f0576001600160a01b0381166000818152600e60209081526040808320805460ff19166001908117909155600a9092528220429055601080548083018255928190527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67290920180546001600160a01b03191690931790925554612f9e9190615305565b6001600160a01b0382166000908152600d602052604090205550565b6001600160a01b0381166000908152600e602052604090205460ff1615156001036117f0576001600160a01b0381166000908152600e60209081526040808320805460ff19169055600a8252808320839055600d918290528220546010805491939161302890600190615305565b815481106130385761303861546d565b60009182526020808320909101546001600160a01b031683528201929092526040019020556010805461306d90600190615305565b8154811061307d5761307d61546d565b60009182526020808320909101546001600160a01b038481168452600d9092526040909220546010805492909316929181106130bb576130bb61546d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060108054806130fa576130fa61557b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b613127612dad565b6001600160a01b0316336001600160a01b031614806131505750602e546001600160a01b031633145b61316c5760405162461bcd60e51b815260040161165f90615318565b601a5460ff16156131d95760405162461bcd60e51b815260206004820152603160248201527f506c656173652066696e69736820746865206576656e74206265666f726520736044820152703a30b93a1030b737ba3432b91037b7329760791b606482015260840161165f565b6131e5600f6000614d68565b6131f1600f8383614d86565b5060196131ff848683615737565b50601a805460ff19166001908117909155601b805491820181556000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc101613249848683615737565b50601b54600a101561332c57601b6000815481106132695761326961546d565b90600052602060002001600061327f9190614d2e565b60005b601b5461329190600190615305565b8110156132fb57601b6132a5826001615483565b815481106132b5576132b561546d565b90600052602060002001601b82815481106132d2576132d261546d565b9060005260206000200190816132e89190615496565b50806132f381615562565b915050613282565b50601b80548061330d5761330d61557b565b6001900381819060005260206000200160006133299190614d2e565b90555b42601e55604080516020601f860181900481028201810190925284815261338c9186908690819084018382808284376000920191909152505060408051808201909152600781526667656e6573697360c81b60208201529150613ed39050565b1561339657426018555b7f7ac828aceb6614378510bd905df95e23a59e2cfb1141a5ed91b4a54e2b169b338484604051612bfd9291906157f0565b601980546114df906152b5565b6133dc612dad565b6001600160a01b0316336001600160a01b031614806134055750602e546001600160a01b031633145b6134215760405162461bcd60e51b815260040161165f90615318565b61342c308383614341565b505050565b613439614de9565b613441614de9565b6001600160a01b039092166000818152600660209081526040808320548652838352600782528083205486820152838352600882528083205486830152838352600a8252808320546060870152838352600b8252808320546080870152838352600c82528083205460a0870152838352600d82528083205460c0870152928252600e9052205460ff16151560e08301525090565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156135a5578382906000526020600020018054613518906152b5565b80601f0160208091040260200160405190810160405280929190818152602001828054613544906152b5565b80156135915780601f1061356657610100808354040283529160200191613591565b820191906000526020600020905b81548152906001019060200180831161357457829003601f168201915b5050505050815260200190600101906134f9565b50505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156135a55783829060005260206000200180546135f1906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461361d906152b5565b801561366a5780601f1061363f5761010080835404028352916020019161366a565b820191906000526020600020905b81548152906001019060200180831161364d57829003601f168201915b5050505050815260200190600101906135d2565b6001600160a01b03811660009081526026602052604081205460ff16806136bd57506001600160a01b03821660009081526032602052604090205460ff165b156136ca57506000919050565b506005546001600160a01b03909116600090815260066020526040902054101590565b6136f5612dad565b6001600160a01b0316336001600160a01b0316148061371e5750602e546001600160a01b031633145b61373a5760405162461bcd60e51b815260040161165f90615318565b6117f03033613748306125f7565b613847565b613755613e74565b6031805460ff60a01b1916600160a01b841515021790556003546127109061377e90839061581f565b6137889190615723565b6004555050565b600f818154811061157057600080fd5b6137a7613e74565b6120ce6144e6565b6137b7613e74565b6001600160a01b03811661381c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161165f565b6117f0816142f1565b61382d613e74565b602480549115156101000261ff0019909216919091179055565b6001600160a01b03821660009081526032602052604081205460ff1615801561388957506001600160a01b03841660009081526032602052604090205460ff16155b6138c35760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161165f565b600082116139255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161165f565b6001600160a01b03841661dead1480159061394857506001600160a01b03841615155b6139905760405162461bcd60e51b8152602060048201526019602482015278506c6561736520757365206120676f6f64206164647265737360381b604482015260640161165f565b603154600160a81b900460ff16156139b4576139ad848484614341565b90506116ca565b60245460ff16613ad9576139c6612dad565b6001600160a01b0316846001600160a01b031614806139f25750602e546001600160a01b038581169116145b80613a0a57506030546001600160a01b038581169116145b80613a2257506031546001600160a01b038581169116145b15613a90577ffee95ecae0c8f7f0743ec0ad254c78ab75e5ecca9f1ddcd9f11f9a98124b96bc604051613a7d9060208082526014908201527362797061737320656e61626c6554726164696e6760601b604082015260600190565b60405180910390a16139ad848484614341565b613a998461468e565b613aa28461468e565b604051602001613ab3929190615836565b60408051601f198184030181529082905262461bcd60e51b825261165f91600401614e95565b613ae1612dad565b6001600160a01b0316846001600160a01b03161480613b0d5750602e546001600160a01b038581169116145b80613b2557506030546001600160a01b038581169116145b80613b3d57506031546001600160a01b038581169116145b15613b4d576139ad848484614341565b613b55613ee9565b15613b6257613b62613f52565b6001600160a01b03841660009081526026602052604090205460ff16613b8b57613b8b84614879565b6001600160a01b038416600090815260066020526040902054821115613bef5760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e74205265616c2042616c616e636560381b604482015260640161165f565b6001600160a01b038416600090815260066020526040902054613c13908390615305565b6001600160a01b038516600090815260066020526040902055613c3584612ecb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614613c8a576001600160a01b0384166000908152600c602052604090204290555b6000613c97858585614a37565b9050828115613d1057613caa8282615305565b30600090815260066020526040902054909150613cc8908390615483565b30600081815260066020526040908190209290925590516001600160a01b03881690600080516020615a1483398151915290613d079086815260200190565b60405180910390a35b6001600160a01b038516600090815260066020526040902054613d34908290615483565b6001600160a01b038616600090815260066020526040902055613d5685612ecb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603613dab576001600160a01b0385166000908152600b602052604090204290555b846001600160a01b0316866001600160a01b0316600080516020615a1483398151915283604051613dde91815260200190565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480613e5757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b156125eb57602454610100900460ff16156125eb576125eb6144e6565b33613e7d612dad565b6001600160a01b0316146120ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161165f565b8051602091820120825192909101919091201490565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590613f2e5750603154600160a81b900460ff16155b8015613f435750603154600160a01b900460ff165b80156117165750611716614c84565b60318054600160a81b60ff60a81b199091161790556040805160a081018252602d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810490921660608201819052600160201b9092046001600160801b031660808201819052600454919260009190613fd2908461581f565b613fdc9190615723565b90506000613fea8284615305565b905061400a737a250d5630b4cf539739df2c5dacb4c659f2488d82611465565b5081156140205761401e3061dead84614341565b505b60408051600280825260608201835260009260208301908036833701905050905030816000815181106140555761405561546d565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140eb91906158bd565b816001815181106140fe576140fe61546d565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906141569085906000908690309042906004016158da565b600060405180830381600087803b15801561417057600080fd5b505af1158015614184573d6000803e3d6000fd5b5050505060004790506000866060015160ff16876000015160ff1688608001516141ae9190615916565b6141b89190615916565b6001600160801b03169050600081886020015160ff16846141d9919061581f565b6141e39190615723565b9050600082896040015160ff16856141fb919061581f565b6142059190615723565b9050811561426457602e546040516000916001600160a01b03169084908381818185875af1925050503d806000811461425a576040519150601f19603f3d011682016040523d82523d6000602084013e61425f565b606091505b505050505b80156142c157602f546040516000916001600160a01b03169083908381818185875af1925050503d80600081146142b7576040519150601f19603f3d011682016040523d82523d6000602084013e6142bc565b606091505b505050505b50506031805460ff60a81b1916905550505050505050565b60006116ca8284615723565b60006116ca8284615483565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600660205260408120548211156143795760405162461bcd60e51b815260040161165f90615625565b6001600160a01b03841660009081526006602052604090205461439d908390615305565b6001600160a01b0385166000908152600660205260409020556143bf84612ecb565b6001600160a01b0383166000908152600660205260409020546143e3908390615483565b6001600160a01b03841660009081526006602052604090205561440583612ecb565b6001600160a01b038084166000818152600b602052604090819020429055519091861690600080516020615a14833981519152906144469086815260200190565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614806144bf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b156144dc57602454610100900460ff16156144dc576144dc6144e6565b5060019392505050565b604080516002808252606082018352600092602083019080368337019050509050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457d91906158bd565b816000815181106145905761459061546d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106145c4576145c461546d565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061461f9066b1a2bc2ec5000090869060040161593d565b600060405180830381865afa15801561463c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146649190810190615956565b905060008160018151811061467b5761467b61546d565b6020908102919091010151600555505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106146f9576146f961546d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106147285761472861546d565b60200101906001600160f81b031916908160001a90535060005b6014811015614870578260048561475a84600c615483565b6020811061476a5761476a61546d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106147905761479061546d565b01602001516001600160f81b031916826147ab83600261581f565b6147b6906002615483565b815181106147c6576147c661546d565b60200101906001600160f81b031916908160001a90535082846147ea83600c615483565b602081106147fa576147fa61546d565b825191901a600f169081106148115761481161546d565b01602001516001600160f81b0319168261482c83600261581f565b614837906003615483565b815181106148475761484761546d565b60200101906001600160f81b031916908160001a9053508061486881615562565b915050614742565b50949350505050565b60006148848261367e565b15614906576010541580159061489c57506000601354115b15614906576001600160a01b038216600090815260076020526040812054156148da57506001600160a01b0382166000908152600760205260409020545b6010546013546000916148ec91615723565b905081811115614903576149008282615305565b92505b50505b6001600160a01b03821660009081526006602052604090205481156149325761492f8282615483565b90505b6001600160a01b038316600090815260086020526040902054801561495e5761495b8183615483565b91505b600061496a8285615483565b905080156122ac5761497d308683614341565b506001600160a01b0385166000908152600960205260409020546149a2908290615483565b6001600160a01b0386166000908152600960205260409020558315614a19576001600160a01b0385166000908152600760205260409020546149e5908590615483565b6001600160a01b03861660009081526007602052604081209190915560138054869290614a13908490615305565b90915550505b505050506001600160a01b0316600090815260086020526040812055565b6040805160a08082018352602c5460ff8082168452610100808304821660208087019190915262010000808504841687890152630100000080860485166060808a01919091526001600160801b03600160201b9788900481166080808c01919091528b51998a018c52602d548089168b529687048816958a0195909552928504861699880199909952830490931696850196909652919091041692810192909252600091829190614ae88787614cdc565b15614c795760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031603614b8757614b536064614b4d85608001516001600160801b031689614d2290919063ffffffff16565b906142d9565b9350614b8083608001516001600160801b0316614b4d856000015160ff1687614d2290919063ffffffff16565b9050614bdc565b614bac6064614b4d84608001516001600160801b031689614d2290919063ffffffff16565b9350614bd982608001516001600160801b0316614b4d846000015160ff1687614d2290919063ffffffff16565b90505b8015614c77578060116000828254614bf49190615483565b9091555050601a5460ff1615614c21578060126000828254614c169190615483565b90915550614c399050565b8060136000828254614c339190615483565b90915550505b6011546040805183815260208101929092527f18eb4f38dd44e95e8a1c75cca7d7ff27a98c255ffece0e32f334fb4184e1280a910160405180910390a15b505b509095945050505050565b30600090815260066020526040812054601454601354601254849291614ca991615483565b614cb39190615483565b905081811115614cc65760009250505090565b614cd08183615305565b60045411159392505050565b6001600160a01b03821660009081526025602052604081205460ff161580156116ca5750506001600160a01b031660009081526025602052604090205460ff1615919050565b60006116ca828461581f565b508054614d3a906152b5565b6000825580601f10614d4a575050565b601f0160209004906000526020600020908101906117f09190614e30565b50805460008255906000526020600020908101906117f09190614e30565b828054828255906000526020600020908101928215614dd9579160200282015b82811115614dd95781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614da6565b50614de5929150614e30565b5090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b5b80821115614de55760008155600101614e31565b60005b83811015614e60578181015183820152602001614e48565b50506000910152565b60008151808452614e81816020860160208601614e45565b601f01601f19169290920160200192915050565b6020815260006116ca6020830184614e69565b600081518084526020808501945080840160005b83811015614ee15781516001600160a01b031687529582019590820190600101614ebc565b509495945050505050565b6020815260006116ca6020830184614ea8565b6001600160a01b03811681146117f057600080fd5b600060208284031215614f2657600080fd5b81356116ca81614eff565b60008060408385031215614f4457600080fd5b8235614f4f81614eff565b946020939093013593505050565b600060208284031215614f6f57600080fd5b5035919050565b600080600060608486031215614f8b57600080fd5b8335614f9681614eff565b92506020840135614fa681614eff565b929592945050506040919091013590565b80358015158114614fc757600080fd5b919050565b60008060408385031215614fdf57600080fd5b8235614fea81614eff565b9150614ff860208401614fb7565b90509250929050565b60008083601f84011261501357600080fd5b5081356001600160401b0381111561502a57600080fd5b6020830191508360208260051b850101111561504557600080fd5b9250929050565b6000806000806040858703121561506257600080fd5b84356001600160401b038082111561507957600080fd5b61508588838901615001565b9096509450602087013591508082111561509e57600080fd5b506150ab87828801615001565b95989497509550505050565b6000806000604084860312156150cc57600080fd5b83356001600160401b038111156150e257600080fd5b6150ee86828701615001565b9094509250615101905060208501614fb7565b90509250925092565b60008083601f84011261511c57600080fd5b5081356001600160401b0381111561513357600080fd5b60208301915083602082850101111561504557600080fd5b6000806000806040858703121561516157600080fd5b84356001600160401b038082111561517857600080fd5b6151848883890161510a565b9096509450602087013591508082111561519d57600080fd5b506150ab8782880161510a565b600080604083850312156151bd57600080fd5b82356151c881614eff565b915060208301356151d881614eff565b809150509250929050565b600080600080604085870312156151f957600080fd5b84356001600160401b038082111561521057600080fd5b6150858883890161510a565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561527157603f1988860301845261525f858351614e69565b94509285019290850190600101615243565b5092979650505050505050565b6000806040838503121561529157600080fd5b614f4f83614fb7565b6000602082840312156152ac57600080fd5b6116ca82614fb7565b600181811c908216806152c957607f821691505b6020821081036152e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156114cc576114cc6152ef565b6020808252600990820152682337b93134b23232b760b91b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b601f82111561342c57600081815260208120601f850160051c810160208610156153785750805b601f850160051c820191505b8181101561539757828155600101615384565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b038111156153cd576153cd61533b565b6153e1816153db84546152b5565b84615351565b602080601f83116001811461541057600084156153fe5750858301515b615408858261539f565b865550615397565b600085815260208120601f198616915b8281101561543f57888601518255948401946001909101908401615420565b508582101561545d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b808201808211156114cc576114cc6152ef565b8181036154a1575050565b6154ab82546152b5565b6001600160401b038111156154c2576154c261533b565b6154d0816153db84546152b5565b6000601f8211600181146154fe57600083156154ec5750848201545b6154f6848261539f565b8555506122ac565b600085815260209020601f19841690600086815260209020845b838110156155385782860154825560019586019590910190602001615518565b508583101561545d5793015460001960f8600387901b161c19169092555050600190811b01905550565b600060018201615574576155746152ef565b5060010190565b634e487b7160e01b600052603160045260246000fd5b6040815260008084546155a3816152b5565b80604086015260606001808416600081146155c557600181146155df57615610565b60ff1985168884015283151560051b880183019550615610565b8960005260208060002060005b868110156156075781548b82018701529084019082016155ec565b8a018501975050505b50505050506020929092019290925292915050565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b6020808252607a908201527f5b4e4f545f454e4f5547485f544f4b454e535d204e6f7420656e6f756768207460408201527f6f6b656e7320746f206469737472696275746520746f2065766572792070617260608201527f7469636970616e742c20746f6b656e732077696c6c2062652073656e64207261608082015279373237b6b63c9034b710309039b832b1b4b0b61032bb32b73a1760311b60a082015260c00190565b634e487b7160e01b600052601260045260246000fd5b60008261571e5761571e6156f9565b500690565b600082615732576157326156f9565b500490565b6001600160401b0383111561574e5761574e61533b565b6157628361575c83546152b5565b83615351565b6000601f841160018114615790576000851561577e5750838201355b615788868261539f565b8455506122ac565b600083815260209020601f19861690835b828110156157c157868501358255602094850194600190920191016157a1565b50868210156157de5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b80820281158282048414176114cc576114cc6152ef565b7f54726164696e67206e6f7420656e61626c6564207965742c20706c656173652081526d03bb0b4ba171029b2b73232b91d160951b60208201526000835161588581602e850160208801614e45565b6b0102932b1b4b834b2b73a1d160a51b602e9184019182015283516158b181603a840160208801614e45565b01603a01949350505050565b6000602082840312156158cf57600080fd5b81516116ca81614eff565b85815284602082015260a0604082015260006158f960a0830186614ea8565b6001600160a01b0394909416606083015250608001529392505050565b6001600160801b03828116828216039080821115615936576159366152ef565b5092915050565b8281526040602082015260006116c76040830184614ea8565b6000602080838503121561596957600080fd5b82516001600160401b038082111561598057600080fd5b818501915085601f83011261599457600080fd5b8151818111156159a6576159a661533b565b8060051b604051601f19603f830116810181811085821117156159cb576159cb61533b565b6040529182528482019250838101850191888311156159e957600080fd5b938501935b82851015615a07578451845293850193928501926159ee565b9897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220df3444c98a2389da02a3e51fea1078f4975b1ce19502652b9d8d8dcd0193534f64736f6c63430008130033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106104dd5760003560e01c806366fa216f11610283578063b1bd37741161015b578063df20fd49116100c7578063df20fd4914611180578063e1a3c3f1146111a0578063e36da2dc146111b6578063e73cb8a8146111d6578063ef8f1c0d146111ec578063f2357b4114611201578063f2fde38b14611220578063f40acc3d14611240578063f417fb8a14611274578063f52b356d14611294578063f630ca51146112aa578063fc973ede146112c0578063fe1f5934146112ed57600080fd5b8063b1bd377414610f24578063b8eda0ff14610f54578063bc56222614610f9d578063c280af2014610fbd578063c6c8901a14610fdd578063c940cc8014610ff2578063cb05f19614611012578063cd75c7d41461104b578063cf91063d146110ce578063d0af95c0146110f0578063d4d7b19a14611105578063d85a282814611125578063dd62ed3e1461113a57600080fd5b806381cc7daa116101fa57806381cc7daa14610d94578063895e5ec714610daa5780638a8c523c14610dca5780638ba4cc3c14610de45780638c3fe56f14610e045780638da5cb5b14610e3157806395d89b4114610e46578063a4b45c0014610e5b578063a644ab9f14610e7b578063a82ed9ec14610e9b578063a9059cbb14610ec3578063ab46628b14610ee3578063b0f7ec3814610f0357600080fd5b806366fa216f14610bbc5780636925eab714610bdc578063696cfadf14610c095780636a1faa9814610c525780636ebcf60714610c675780636f4366ab14610c945780636fc7e70214610cc157806370a0823114610ce1578063715018a614610d015780637911661814610d165780637df5899814610d365780637f665b4f14610d7f57600080fd5b80632de50864116103b6578063524ec5331161032d578063524ec53314610a3f57806353bc1a0a14610a55578063567dd04c14610a6a578063571ac8b014610a7f578063584dbf9414610a9f57806358967f2814610ab55780635b06951d14610ae25780635ee6d67514610af757806360ba779114610b2757806362812f0d14610b3c578063630551ca14610b72578063658d4b7f14610b8757806366eb378514610ba757600080fd5b80632de508641461087f578063313ce567146108ac5780633174f3a3146108c85780633307d372146108de5780633313b7f1146108fe578063364333f4146109135780633f4218e014610928578063404e51291461095857806347062402146109785780634803b90d146109c15780634aed8d96146109e15780634c8547da146109f657600080fd5b80630f8c9e28116104555780630f8c9e28146106715780631485c5eb146106a957806315370598146106c957806316c02129146106de5780631771add21461070e57806318160ddd1461072457806321fb1f791461073957806323b872dd1461074f578063293230b81461076f5780632aed53c2146107865780632b112e491461079b5780632b14ca56146107b05780632b8a3ae61461083657600080fd5b806220674f146104e9578063018763ed14610514578063041e511614610538578063064cc3ff1461055a57806306fdde031461059057806308f25597146105a5578063095ea7b3146105ba57806309d95c96146105ea5780630be7a6f7146105ff5780630c9506a4146106145780630e5a9231146106415780630efec8a01461065757600080fd5b366104e457005b600080fd5b3480156104f557600080fd5b506104fe611303565b60405161050b9190614e95565b60405180910390f35b34801561052057600080fd5b5061052a60115481565b60405190815260200161050b565b34801561054457600080fd5b5061054d611395565b60405161050b9190614eec565b34801561056657600080fd5b5061052a610575366004614f14565b6001600160a01b031660009081526009602052604090205490565b34801561059c57600080fd5b506104fe6113f6565b3480156105b157600080fd5b5061054d611405565b3480156105c657600080fd5b506105da6105d5366004614f31565b611465565b604051901515815260200161050b565b3480156105f657600080fd5b5060205461052a565b34801561060b57600080fd5b506104fe6114d2565b34801561062057600080fd5b5061052a61062f366004614f14565b600b6020526000908152604090205481565b34801561064d57600080fd5b5061052a60045481565b34801561066357600080fd5b50601a546105da9060ff1681565b34801561067d57600080fd5b5061069161068c366004614f5d565b611560565b6040516001600160a01b03909116815260200161050b565b3480156106b557600080fd5b506104fe6106c4366004614f5d565b61158a565b3480156106d557600080fd5b506104fe6115b5565b3480156106ea57600080fd5b506105da6106f9366004614f14565b60326020526000908152604090205460ff1681565b34801561071a57600080fd5b5061052a60125481565b34801561073057600080fd5b5060035461052a565b34801561074557600080fd5b5061052a60135481565b34801561075b57600080fd5b506105da61076a366004614f76565b6115c4565b34801561077b57600080fd5b506107846116d1565b005b34801561079257600080fd5b5060175461052a565b3480156107a757600080fd5b5061052a6116e8565b3480156107bc57600080fd5b50602d546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b6040805160ff968716815294861660208601529285169284019290925290921660608201526001600160801b03909116608082015260a00161050b565b34801561084257600080fd5b506027546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b34801561088b57600080fd5b5061052a61089a366004614f14565b600c6020526000908152604090205481565b3480156108b857600080fd5b506040516012815260200161050b565b3480156108d457600080fd5b5061052a601d5481565b3480156108ea57600080fd5b506107846108f9366004614fcc565b61171b565b34801561090a57600080fd5b50601e5461052a565b34801561091f57600080fd5b5061078461174e565b34801561093457600080fd5b506105da610943366004614f14565b60256020526000908152604090205460ff1681565b34801561096457600080fd5b50610784610973366004614fcc565b6117f3565b34801561098457600080fd5b50602c546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b3480156109cd57600080fd5b506104fe6109dc366004614f5d565b611826565b3480156109ed57600080fd5b506104fe611836565b348015610a0257600080fd5b50602b546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610a4b57600080fd5b5061052a60055481565b348015610a6157600080fd5b506104fe611843565b348015610a7657600080fd5b5060215461052a565b348015610a8b57600080fd5b506105da610a9a366004614f14565b611852565b348015610aab57600080fd5b5061052a60215481565b348015610ac157600080fd5b5061052a610ad0366004614f14565b60096020526000908152604090205481565b348015610aee57600080fd5b50610784611860565b348015610b0357600080fd5b506105da610b12366004614f14565b600e6020526000908152604090205460ff1681565b348015610b3357600080fd5b50610784611f3b565b348015610b4857600080fd5b5061052a610b57366004614f14565b6001600160a01b031660009081526008602052604090205490565b348015610b7e57600080fd5b5060185461052a565b348015610b9357600080fd5b50610784610ba2366004614fcc565b61207e565b348015610bb357600080fd5b506107846120b1565b348015610bc857600080fd5b50610784610bd736600461504c565b6120d0565b348015610be857600080fd5b5061052a610bf7366004614f14565b600a6020526000908152604090205481565b348015610c1557600080fd5b50602a546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610c5e57600080fd5b506104fe6122b3565b348015610c7357600080fd5b5061052a610c82366004614f14565b60066020526000908152604090205481565b348015610ca057600080fd5b5061052a610caf366004614f14565b60076020526000908152604090205481565b348015610ccd57600080fd5b506105da610cdc3660046150b7565b6122c0565b348015610ced57600080fd5b5061052a610cfc366004614f14565b6125f7565b348015610d0d57600080fd5b506107846126e5565b348015610d2257600080fd5b50610784610d3136600461514b565b6126f7565b348015610d4257600080fd5b506028546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610d8b57600080fd5b50601f5461052a565b348015610da057600080fd5b5061052a60175481565b348015610db657600080fd5b50610784610dc5366004614f5d565b612c0b565b348015610dd657600080fd5b506024546105da9060ff1681565b348015610df057600080fd5b50610784610dff366004614f31565b612c69565b348015610e1057600080fd5b5061052a610e1f366004614f14565b600d6020526000908152604090205481565b348015610e3d57600080fd5b50610691612dad565b348015610e5257600080fd5b506104fe612dbc565b348015610e6757600080fd5b50610784610e763660046151aa565b612dcb565b348015610e8757600080fd5b50610784610e96366004614f14565b612e01565b348015610ea757600080fd5b50610691737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610ecf57600080fd5b506105da610ede366004614f31565b612e2b565b348015610eef57600080fd5b5061052a610efe366004614f14565b612e38565b348015610f0f57600080fd5b506031546105da90600160a01b900460ff1681565b348015610f3057600080fd5b506105da610f3f366004614f14565b60266020526000908152604090205460ff1681565b348015610f6057600080fd5b506029546107f99060ff8082169161010081048216916201000082048116916301000000810490911690600160201b90046001600160801b031685565b348015610fa957600080fd5b50610784610fb8366004614f14565b612ecb565b348015610fc957600080fd5b50610784610fd83660046151e3565b61311f565b348015610fe957600080fd5b506104fe6133c7565b348015610ffe57600080fd5b5061078461100d366004614f31565b6133d4565b34801561101e57600080fd5b506105da61102d366004614f14565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561105757600080fd5b5061106b611066366004614f14565b613431565b60405161050b9190600061010082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151151560e083015292915050565b3480156110da57600080fd5b506110e36134d5565b60405161050b919061521c565b3480156110fc57600080fd5b506110e36135ae565b34801561111157600080fd5b506105da611120366004614f14565b61367e565b34801561113157600080fd5b506107846136ed565b34801561114657600080fd5b5061052a6111553660046151aa565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561118c57600080fd5b5061078461119b36600461527e565b61374d565b3480156111ac57600080fd5b5061052a601e5481565b3480156111c257600080fd5b506106916111d1366004614f5d565b61378f565b3480156111e257600080fd5b5061052a60145481565b3480156111f857600080fd5b5061078461379f565b34801561120d57600080fd5b506024546105da90610100900460ff1681565b34801561122c57600080fd5b5061078461123b366004614f14565b6137af565b34801561124c57600080fd5b506106917f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db2881565b34801561128057600080fd5b5061078461128f36600461529a565b613825565b3480156112a057600080fd5b5061052a60185481565b3480156112b657600080fd5b5061052a601f5481565b3480156112cc57600080fd5b5061052a6112db366004614f14565b60086020526000908152604090205481565b3480156112f957600080fd5b5061052a60205481565b606060228054611312906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461133e906152b5565b801561138b5780601f106113605761010080835404028352916020019161138b565b820191906000526020600020905b81548152906001019060200180831161136e57829003601f168201915b5050505050905090565b6060601080548060200260200160405190810160405280929190818152602001828054801561138b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113cf575050505050905090565b606060018054611312906152b5565b6060600f80548060200260200160405190810160405280929190818152602001828054801561138b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116113cf575050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906114c09086815260200190565b60405180910390a35060015b92915050565b601680546114df906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461150b906152b5565b80156115585780601f1061152d57610100808354040283529160200191611558565b820191906000526020600020905b81548152906001019060200180831161153b57829003601f168201915b505050505081565b6010818154811061157057600080fd5b6000918252602090912001546001600160a01b0316905081565b601c818154811061159a57600080fd5b9060005260206000200160009150905080546114df906152b5565b606060158054611312906152b5565b6001600160a01b0383166000908152602360209081526040808320338452909152812054600019146116bc576001600160a01b03841660009081526023602090815260408083203384529091529020548211156116685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152602360209081526040808320338452909152902054611697908390615305565b6001600160a01b03851660009081526023602090815260408083203384529091529020555b6116c7848484613847565b90505b9392505050565b6116d9613e74565b6024805460ff19166001179055565b60006116f460006125f7565b6116ff61dead6125f7565b60035461170c9190615305565b6117169190615305565b905090565b611723613e74565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b611756612dad565b6001600160a01b0316336001600160a01b0316148061177f5750602e546001600160a01b031633145b61179b5760405162461bcd60e51b815260040161165f90615318565b604051600090339047908381818185875af1925050503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b50509050806117f057600080fd5b50565b6117fb613e74565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b601b818154811061159a57600080fd5b602280546114df906152b5565b606060168054611312906152b5565b60006114cc82600019611465565b611868612dad565b6001600160a01b0316336001600160a01b031614806118915750602e546001600160a01b031633145b6118ad5760405162461bcd60e51b815260040161165f90615318565b6000601680546118bc906152b5565b80601f01602080910402602001604051908101604052809291908181526020018280546118e8906152b5565b80156119355780601f1061190a57610100808354040283529160200191611935565b820191906000526020600020905b81548152906001019060200180831161191857829003601f168201915b505050505090506000604051806020016040528060008152509050611a0160168054611960906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461198c906152b5565b80156119d95780601f106119ae576101008083540402835291602001916119d9565b820191906000526020600020905b8154815290600101906020018083116119bc57829003601f168201915b50505050506040518060400160405280600581526020016418da1a5b1b60da1b815250613ed3565b15611afc57611ab660158054611a16906152b5565b80601f0160208091040260200160405190810160405280929190818152602001828054611a42906152b5565b8015611a8f5780601f10611a6457610100808354040283529160200191611a8f565b820191906000526020600020905b815481529060010190602001808311611a7257829003601f168201915b5050505050604051806040016040528060048152602001636e676d6960e01b815250613ed3565b15611adb575060408051808201909152600381526261706560e81b6020820152611b1a565b506040805180820190915260048152636e676d6960e01b6020820152611b1a565b5060408051808201909152600581526418da1a5b1b60da1b60208201525b611b41826040518060400160405280600581526020016418da1a5b1b60da1b815250613ed3565b15611bdd57602754602c805460ff80841661ffff19928316811761010080870484160290811763ffff0000199081166201000080890486160263ff00000019169081176301000000808a0496909616909502948517600160201b600160a01b0319908116600160201b998a90046001600160801b0316909902988917909755602d80549096169093179091171617179091169091179055611dc2565b611c0382604051806040016040528060048152602001636e676d6960e01b815250613ed3565b15611cd257602854602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602954602d8054828a169a1699909917878204891690970296909617909416828604871690920290921617818404909416029290921790911690849004909216909202179055611dc2565b611cf7826040518060400160405280600381526020016261706560e81b815250613ed3565b15611dc257602a54602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602b54602d8054828a169a16999099178782048916909702969096179094168286048716909202909216178184049094160292909217909116908490049092169092021790555b6015611dce83826153b4565b506016611ddb82826153b4565b50601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101611e1883826153b4565b50601c54600a1015611efb57601c600081548110611e3857611e3861546d565b906000526020600020016000611e4e9190614d2e565b60005b601c54611e6090600190615305565b811015611eca57601c611e74826001615483565b81548110611e8457611e8461546d565b90600052602060002001601c8281548110611ea157611ea161546d565b906000526020600020019081611eb79190615496565b5080611ec281615562565b915050611e51565b50601c805480611edc57611edc61557b565b600190038181906000526020600020016000611ef89190614d2e565b90555b426017556040517fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52890611f2f908490614e95565b60405180910390a15050565b611f43612dad565b6001600160a01b0316336001600160a01b03161480611f6c5750602e546001600160a01b031633145b611f885760405162461bcd60e51b815260040161165f90615318565b601a5460ff161515600114611feb5760405162461bcd60e51b8152602060048201526024808201527f5468657265206973206e6f74206576656e74207374617274656420616374756160448201526336363c9760e11b606482015260840161165f565b60205460125411156120105760125460205542602155602261200e601982615496565b505b7ffe877a334755b48001edf8848395250e127b0d974dc55e9186b96dfce677929d6019601254604051612044929190615591565b60405180910390a160408051602081019091526000815260199061206890826153b4565b50601a805460ff191690556000601d5542601f55565b612086613e74565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6120b9613e74565b6120c1613ee9565b156120ce576120ce613f52565b565b6120d8612dad565b6001600160a01b0316336001600160a01b031614806121015750602e546001600160a01b031633145b8061211657506030546001600160a01b031633145b6121325760405162461bcd60e51b815260040161165f90615318565b8281146121715760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b604482015260640161165f565b60005b838110156122ac5760008585838181106121905761219061546d565b90506020020160208101906121a59190614f14565b905060008484848181106121bb576121bb61546d565b33600090815260066020908152604090912054910292909201359250508111156121f75760405162461bcd60e51b815260040161165f90615625565b3360009081526006602052604081208054839290612216908490615305565b90915550506001600160a01b03821660009081526006602052604081208054839290612243908490615483565b90915550612252905082612ecb565b6001600160a01b0382166000818152600b602052604090819020429055513390600080516020615a148339815191529061228f9085815260200190565b60405180910390a3505080806122a490615562565b915050612174565b5050505050565b601580546114df906152b5565b60006122ca612dad565b6001600160a01b0316336001600160a01b031614806122f35750602e546001600160a01b031633145b61230f5760405162461bcd60e51b815260040161165f90615318565b601a5460ff16156123755760405162461bcd60e51b815260206004820152602a60248201527f506c656173652066696e69736820746865206576656e74206265666f7265206460448201526934b9ba3934b13aba329760b11b606482015260840161165f565b600f546012548111156123da576012546014546123929190615483565b60145560006012556040517f8b6454708545df33d688e7ec76cdcfe3e7981fe5e04e79292a5535cc10b95447906123c890615653565b60405180910390a160009150506116ca565b6012546000906123ea90836142d9565b905060005b8581101561253957600087878381811061240b5761240b61546d565b90506020020160208101906124209190614f14565b905061242b8161367e565b15612471576001600160a01b03811660009081526008602052604090205461245390846142e5565b6001600160a01b038216600090815260086020526040902055612483565b8260145461247f9190615483565b6014555b82601d546124919190615483565b601d81905560125411612526577f288552702f282c107371d55123759b445022de73e19d96835ee5807c8f16129d6012546040516124d191815260200190565b60405180910390a160006012819055601d556040517f8b6454708545df33d688e7ec76cdcfe3e7981fe5e04e79292a5535cc10b954479061251190615653565b60405180910390a160009450505050506116ca565b508061253181615562565b9150506123ef565b5083156125eb57600082601254612550919061570f565b9050801561256a57806014546125669190615483565b6014555b601d5460125411156125a4576000601d546012546125889190615305565b905080156125a2578060145461259e9190615483565b6014555b505b7f288552702f282c107371d55123759b445022de73e19d96835ee5807c8f16129d6012546040516125d791815260200190565b60405180910390a15060006012819055601d555b50600195945050505050565b6000806126038361367e565b15612685576010541580159061261b57506000601354115b15612685576001600160a01b0383166000908152600760205260408120541561265957506001600160a01b0383166000908152600760205260409020545b60105460135460009161266b91615723565b9050818111156126825761267f8282615305565b92505b50505b6001600160a01b03831660009081526006602052604090205481156126b1576126ae8282615483565b90505b6001600160a01b03841660009081526008602052604090205480156126dd576126da8183615483565b91505b509392505050565b6126ed613e74565b6120ce60006142f1565b6126ff612dad565b6001600160a01b0316336001600160a01b031614806127285750602e546001600160a01b031633145b6127445760405162461bcd60e51b815260040161165f90615318565b6127a084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600581526418da1a5b1b60da1b60208201529150613ed39050565b1561283c57602754602c805460ff80841661ffff19928316811761010080870484160290811763ffff0000199081166201000080890486160263ff00000019169081176301000000808a0496909616909502948517600160201b600160a01b0319908116600160201b998a90046001600160801b0316909902988917909755602d80549096169093179091171617179091169091179055612a8b565b61289784848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260048152636e676d6960e01b60208201529150613ed39050565b1561296657602854602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602954602d8054828a169a1699909917878204891690970296909617909416828604871690920290921617818404909416029290921790911690849004909216909202179055612a8b565b6129c084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600381526261706560e81b60208201529150613ed39050565b15612a8b57602a54602c805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a048716810291909117600160201b600160a01b0319908116600160201b9a8b90046001600160801b039081168c0291909117909955602b54602d8054828a169a16999099178782048916909702969096179094168286048716909202909216178184049094160292909217909116908490049092169092021790555b6015612a98848683615737565b506016612aa6828483615737565b50601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101612ae4848683615737565b50601c54600a1015612bc757601c600081548110612b0457612b0461546d565b906000526020600020016000612b1a9190614d2e565b60005b601c54612b2c90600190615305565b811015612b9657601c612b40826001615483565b81548110612b5057612b5061546d565b90600052602060002001601c8281548110612b6d57612b6d61546d565b906000526020600020019081612b839190615496565b5080612b8e81615562565b915050612b1d565b50601c805480612ba857612ba861557b565b600190038181906000526020600020016000612bc49190614d2e565b90555b426017556040517fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52890612bfd90869086906157f0565b60405180910390a150505050565b612c13613e74565b61271081600354612c24919061581f565b612c2e9190615723565b60058190556040519081527f68820656a3cb9e6424c49b97f562bd8157366e9374aadd12bd1de9bac459b0a09060200160405180910390a150565b612c71612dad565b6001600160a01b0316336001600160a01b03161480612c9a5750602e546001600160a01b031633145b80612caf57506030546001600160a01b031633145b612ccb5760405162461bcd60e51b815260040161165f90615318565b33600090815260066020526040902054811115612cfa5760405162461bcd60e51b815260040161165f90615625565b33600090815260066020526040902054612d15908290615305565b33600090815260066020526040808220929092556001600160a01b03841681522054612d42908290615483565b6001600160a01b038316600090815260066020526040902055612d6482612ecb565b6001600160a01b0382166000818152600b602052604090819020429055513390600080516020615a1483398151915290612da19085815260200190565b60405180910390a35050565b6000546001600160a01b031690565b606060028054611312906152b5565b612dd3613e74565b602e80546001600160a01b039384166001600160a01b031991821617909155602f8054929093169116179055565b612e09613e74565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b60006116ca338484613847565b600080612e448361367e565b156114cc5760105415801590612e5c57506000601354115b156114cc576001600160a01b03831660009081526007602052604081205415612e9a57506001600160a01b0383166000908152600760205260409020545b601054601354600091612eac91615723565b905081811115612ec357612ec08282615305565b92505b505092915050565b6001600160a01b03811660009081526026602052604090205460ff166117f057612ef48161367e565b15612fba576001600160a01b0381166000908152600e602052604081205460ff16151590036117f0576001600160a01b0381166000818152600e60209081526040808320805460ff19166001908117909155600a9092528220429055601080548083018255928190527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67290920180546001600160a01b03191690931790925554612f9e9190615305565b6001600160a01b0382166000908152600d602052604090205550565b6001600160a01b0381166000908152600e602052604090205460ff1615156001036117f0576001600160a01b0381166000908152600e60209081526040808320805460ff19169055600a8252808320839055600d918290528220546010805491939161302890600190615305565b815481106130385761303861546d565b60009182526020808320909101546001600160a01b031683528201929092526040019020556010805461306d90600190615305565b8154811061307d5761307d61546d565b60009182526020808320909101546001600160a01b038481168452600d9092526040909220546010805492909316929181106130bb576130bb61546d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060108054806130fa576130fa61557b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b613127612dad565b6001600160a01b0316336001600160a01b031614806131505750602e546001600160a01b031633145b61316c5760405162461bcd60e51b815260040161165f90615318565b601a5460ff16156131d95760405162461bcd60e51b815260206004820152603160248201527f506c656173652066696e69736820746865206576656e74206265666f726520736044820152703a30b93a1030b737ba3432b91037b7329760791b606482015260840161165f565b6131e5600f6000614d68565b6131f1600f8383614d86565b5060196131ff848683615737565b50601a805460ff19166001908117909155601b805491820181556000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc101613249848683615737565b50601b54600a101561332c57601b6000815481106132695761326961546d565b90600052602060002001600061327f9190614d2e565b60005b601b5461329190600190615305565b8110156132fb57601b6132a5826001615483565b815481106132b5576132b561546d565b90600052602060002001601b82815481106132d2576132d261546d565b9060005260206000200190816132e89190615496565b50806132f381615562565b915050613282565b50601b80548061330d5761330d61557b565b6001900381819060005260206000200160006133299190614d2e565b90555b42601e55604080516020601f860181900481028201810190925284815261338c9186908690819084018382808284376000920191909152505060408051808201909152600781526667656e6573697360c81b60208201529150613ed39050565b1561339657426018555b7f7ac828aceb6614378510bd905df95e23a59e2cfb1141a5ed91b4a54e2b169b338484604051612bfd9291906157f0565b601980546114df906152b5565b6133dc612dad565b6001600160a01b0316336001600160a01b031614806134055750602e546001600160a01b031633145b6134215760405162461bcd60e51b815260040161165f90615318565b61342c308383614341565b505050565b613439614de9565b613441614de9565b6001600160a01b039092166000818152600660209081526040808320548652838352600782528083205486820152838352600882528083205486830152838352600a8252808320546060870152838352600b8252808320546080870152838352600c82528083205460a0870152838352600d82528083205460c0870152928252600e9052205460ff16151560e08301525090565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156135a5578382906000526020600020018054613518906152b5565b80601f0160208091040260200160405190810160405280929190818152602001828054613544906152b5565b80156135915780601f1061356657610100808354040283529160200191613591565b820191906000526020600020905b81548152906001019060200180831161357457829003601f168201915b5050505050815260200190600101906134f9565b50505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156135a55783829060005260206000200180546135f1906152b5565b80601f016020809104026020016040519081016040528092919081815260200182805461361d906152b5565b801561366a5780601f1061363f5761010080835404028352916020019161366a565b820191906000526020600020905b81548152906001019060200180831161364d57829003601f168201915b5050505050815260200190600101906135d2565b6001600160a01b03811660009081526026602052604081205460ff16806136bd57506001600160a01b03821660009081526032602052604090205460ff165b156136ca57506000919050565b506005546001600160a01b03909116600090815260066020526040902054101590565b6136f5612dad565b6001600160a01b0316336001600160a01b0316148061371e5750602e546001600160a01b031633145b61373a5760405162461bcd60e51b815260040161165f90615318565b6117f03033613748306125f7565b613847565b613755613e74565b6031805460ff60a01b1916600160a01b841515021790556003546127109061377e90839061581f565b6137889190615723565b6004555050565b600f818154811061157057600080fd5b6137a7613e74565b6120ce6144e6565b6137b7613e74565b6001600160a01b03811661381c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161165f565b6117f0816142f1565b61382d613e74565b602480549115156101000261ff0019909216919091179055565b6001600160a01b03821660009081526032602052604081205460ff1615801561388957506001600160a01b03841660009081526032602052604090205460ff16155b6138c35760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161165f565b600082116139255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161165f565b6001600160a01b03841661dead1480159061394857506001600160a01b03841615155b6139905760405162461bcd60e51b8152602060048201526019602482015278506c6561736520757365206120676f6f64206164647265737360381b604482015260640161165f565b603154600160a81b900460ff16156139b4576139ad848484614341565b90506116ca565b60245460ff16613ad9576139c6612dad565b6001600160a01b0316846001600160a01b031614806139f25750602e546001600160a01b038581169116145b80613a0a57506030546001600160a01b038581169116145b80613a2257506031546001600160a01b038581169116145b15613a90577ffee95ecae0c8f7f0743ec0ad254c78ab75e5ecca9f1ddcd9f11f9a98124b96bc604051613a7d9060208082526014908201527362797061737320656e61626c6554726164696e6760601b604082015260600190565b60405180910390a16139ad848484614341565b613a998461468e565b613aa28461468e565b604051602001613ab3929190615836565b60408051601f198184030181529082905262461bcd60e51b825261165f91600401614e95565b613ae1612dad565b6001600160a01b0316846001600160a01b03161480613b0d5750602e546001600160a01b038581169116145b80613b2557506030546001600160a01b038581169116145b80613b3d57506031546001600160a01b038581169116145b15613b4d576139ad848484614341565b613b55613ee9565b15613b6257613b62613f52565b6001600160a01b03841660009081526026602052604090205460ff16613b8b57613b8b84614879565b6001600160a01b038416600090815260066020526040902054821115613bef5760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e74205265616c2042616c616e636560381b604482015260640161165f565b6001600160a01b038416600090815260066020526040902054613c13908390615305565b6001600160a01b038516600090815260066020526040902055613c3584612ecb565b7f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316846001600160a01b031614613c8a576001600160a01b0384166000908152600c602052604090204290555b6000613c97858585614a37565b9050828115613d1057613caa8282615305565b30600090815260066020526040902054909150613cc8908390615483565b30600081815260066020526040908190209290925590516001600160a01b03881690600080516020615a1483398151915290613d079086815260200190565b60405180910390a35b6001600160a01b038516600090815260066020526040902054613d34908290615483565b6001600160a01b038616600090815260066020526040902055613d5685612ecb565b7f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316866001600160a01b031603613dab576001600160a01b0385166000908152600b602052604090204290555b846001600160a01b0316866001600160a01b0316600080516020615a1483398151915283604051613dde91815260200190565b60405180910390a37f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316866001600160a01b03161480613e5757507f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316856001600160a01b0316145b156125eb57602454610100900460ff16156125eb576125eb6144e6565b33613e7d612dad565b6001600160a01b0316146120ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161165f565b8051602091820120825192909101919091201490565b6000336001600160a01b037f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db281614801590613f2e5750603154600160a81b900460ff16155b8015613f435750603154600160a01b900460ff165b80156117165750611716614c84565b60318054600160a81b60ff60a81b199091161790556040805160a081018252602d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810490921660608201819052600160201b9092046001600160801b031660808201819052600454919260009190613fd2908461581f565b613fdc9190615723565b90506000613fea8284615305565b905061400a737a250d5630b4cf539739df2c5dacb4c659f2488d82611465565b5081156140205761401e3061dead84614341565b505b60408051600280825260608201835260009260208301908036833701905050905030816000815181106140555761405561546d565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140eb91906158bd565b816001815181106140fe576140fe61546d565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906141569085906000908690309042906004016158da565b600060405180830381600087803b15801561417057600080fd5b505af1158015614184573d6000803e3d6000fd5b5050505060004790506000866060015160ff16876000015160ff1688608001516141ae9190615916565b6141b89190615916565b6001600160801b03169050600081886020015160ff16846141d9919061581f565b6141e39190615723565b9050600082896040015160ff16856141fb919061581f565b6142059190615723565b9050811561426457602e546040516000916001600160a01b03169084908381818185875af1925050503d806000811461425a576040519150601f19603f3d011682016040523d82523d6000602084013e61425f565b606091505b505050505b80156142c157602f546040516000916001600160a01b03169083908381818185875af1925050503d80600081146142b7576040519150601f19603f3d011682016040523d82523d6000602084013e6142bc565b606091505b505050505b50506031805460ff60a81b1916905550505050505050565b60006116ca8284615723565b60006116ca8284615483565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600660205260408120548211156143795760405162461bcd60e51b815260040161165f90615625565b6001600160a01b03841660009081526006602052604090205461439d908390615305565b6001600160a01b0385166000908152600660205260409020556143bf84612ecb565b6001600160a01b0383166000908152600660205260409020546143e3908390615483565b6001600160a01b03841660009081526006602052604090205561440583612ecb565b6001600160a01b038084166000818152600b602052604090819020429055519091861690600080516020615a14833981519152906144469086815260200190565b60405180910390a37f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316846001600160a01b031614806144bf57507f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316836001600160a01b0316145b156144dc57602454610100900460ff16156144dc576144dc6144e6565b5060019392505050565b604080516002808252606082018352600092602083019080368337019050509050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457d91906158bd565b816000815181106145905761459061546d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106145c4576145c461546d565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061461f9066b1a2bc2ec5000090869060040161593d565b600060405180830381865afa15801561463c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146649190810190615956565b905060008160018151811061467b5761467b61546d565b6020908102919091010151600555505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106146f9576146f961546d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106147285761472861546d565b60200101906001600160f81b031916908160001a90535060005b6014811015614870578260048561475a84600c615483565b6020811061476a5761476a61546d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106147905761479061546d565b01602001516001600160f81b031916826147ab83600261581f565b6147b6906002615483565b815181106147c6576147c661546d565b60200101906001600160f81b031916908160001a90535082846147ea83600c615483565b602081106147fa576147fa61546d565b825191901a600f169081106148115761481161546d565b01602001516001600160f81b0319168261482c83600261581f565b614837906003615483565b815181106148475761484761546d565b60200101906001600160f81b031916908160001a9053508061486881615562565b915050614742565b50949350505050565b60006148848261367e565b15614906576010541580159061489c57506000601354115b15614906576001600160a01b038216600090815260076020526040812054156148da57506001600160a01b0382166000908152600760205260409020545b6010546013546000916148ec91615723565b905081811115614903576149008282615305565b92505b50505b6001600160a01b03821660009081526006602052604090205481156149325761492f8282615483565b90505b6001600160a01b038316600090815260086020526040902054801561495e5761495b8183615483565b91505b600061496a8285615483565b905080156122ac5761497d308683614341565b506001600160a01b0385166000908152600960205260409020546149a2908290615483565b6001600160a01b0386166000908152600960205260409020558315614a19576001600160a01b0385166000908152600760205260409020546149e5908590615483565b6001600160a01b03861660009081526007602052604081209190915560138054869290614a13908490615305565b90915550505b505050506001600160a01b0316600090815260086020526040812055565b6040805160a08082018352602c5460ff8082168452610100808304821660208087019190915262010000808504841687890152630100000080860485166060808a01919091526001600160801b03600160201b9788900481166080808c01919091528b51998a018c52602d548089168b529687048816958a0195909552928504861699880199909952830490931696850196909652919091041692810192909252600091829190614ae88787614cdc565b15614c795760007f000000000000000000000000f403ca3ef8597e1a815a898290bc114b2fc1db286001600160a01b0316886001600160a01b031603614b8757614b536064614b4d85608001516001600160801b031689614d2290919063ffffffff16565b906142d9565b9350614b8083608001516001600160801b0316614b4d856000015160ff1687614d2290919063ffffffff16565b9050614bdc565b614bac6064614b4d84608001516001600160801b031689614d2290919063ffffffff16565b9350614bd982608001516001600160801b0316614b4d846000015160ff1687614d2290919063ffffffff16565b90505b8015614c77578060116000828254614bf49190615483565b9091555050601a5460ff1615614c21578060126000828254614c169190615483565b90915550614c399050565b8060136000828254614c339190615483565b90915550505b6011546040805183815260208101929092527f18eb4f38dd44e95e8a1c75cca7d7ff27a98c255ffece0e32f334fb4184e1280a910160405180910390a15b505b509095945050505050565b30600090815260066020526040812054601454601354601254849291614ca991615483565b614cb39190615483565b905081811115614cc65760009250505090565b614cd08183615305565b60045411159392505050565b6001600160a01b03821660009081526025602052604081205460ff161580156116ca5750506001600160a01b031660009081526025602052604090205460ff1615919050565b60006116ca828461581f565b508054614d3a906152b5565b6000825580601f10614d4a575050565b601f0160209004906000526020600020908101906117f09190614e30565b50805460008255906000526020600020908101906117f09190614e30565b828054828255906000526020600020908101928215614dd9579160200282015b82811115614dd95781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614da6565b50614de5929150614e30565b5090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b5b80821115614de55760008155600101614e31565b60005b83811015614e60578181015183820152602001614e48565b50506000910152565b60008151808452614e81816020860160208601614e45565b601f01601f19169290920160200192915050565b6020815260006116ca6020830184614e69565b600081518084526020808501945080840160005b83811015614ee15781516001600160a01b031687529582019590820190600101614ebc565b509495945050505050565b6020815260006116ca6020830184614ea8565b6001600160a01b03811681146117f057600080fd5b600060208284031215614f2657600080fd5b81356116ca81614eff565b60008060408385031215614f4457600080fd5b8235614f4f81614eff565b946020939093013593505050565b600060208284031215614f6f57600080fd5b5035919050565b600080600060608486031215614f8b57600080fd5b8335614f9681614eff565b92506020840135614fa681614eff565b929592945050506040919091013590565b80358015158114614fc757600080fd5b919050565b60008060408385031215614fdf57600080fd5b8235614fea81614eff565b9150614ff860208401614fb7565b90509250929050565b60008083601f84011261501357600080fd5b5081356001600160401b0381111561502a57600080fd5b6020830191508360208260051b850101111561504557600080fd5b9250929050565b6000806000806040858703121561506257600080fd5b84356001600160401b038082111561507957600080fd5b61508588838901615001565b9096509450602087013591508082111561509e57600080fd5b506150ab87828801615001565b95989497509550505050565b6000806000604084860312156150cc57600080fd5b83356001600160401b038111156150e257600080fd5b6150ee86828701615001565b9094509250615101905060208501614fb7565b90509250925092565b60008083601f84011261511c57600080fd5b5081356001600160401b0381111561513357600080fd5b60208301915083602082850101111561504557600080fd5b6000806000806040858703121561516157600080fd5b84356001600160401b038082111561517857600080fd5b6151848883890161510a565b9096509450602087013591508082111561519d57600080fd5b506150ab8782880161510a565b600080604083850312156151bd57600080fd5b82356151c881614eff565b915060208301356151d881614eff565b809150509250929050565b600080600080604085870312156151f957600080fd5b84356001600160401b038082111561521057600080fd5b6150858883890161510a565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561527157603f1988860301845261525f858351614e69565b94509285019290850190600101615243565b5092979650505050505050565b6000806040838503121561529157600080fd5b614f4f83614fb7565b6000602082840312156152ac57600080fd5b6116ca82614fb7565b600181811c908216806152c957607f821691505b6020821081036152e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156114cc576114cc6152ef565b6020808252600990820152682337b93134b23232b760b91b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b601f82111561342c57600081815260208120601f850160051c810160208610156153785750805b601f850160051c820191505b8181101561539757828155600101615384565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b038111156153cd576153cd61533b565b6153e1816153db84546152b5565b84615351565b602080601f83116001811461541057600084156153fe5750858301515b615408858261539f565b865550615397565b600085815260208120601f198616915b8281101561543f57888601518255948401946001909101908401615420565b508582101561545d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b808201808211156114cc576114cc6152ef565b8181036154a1575050565b6154ab82546152b5565b6001600160401b038111156154c2576154c261533b565b6154d0816153db84546152b5565b6000601f8211600181146154fe57600083156154ec5750848201545b6154f6848261539f565b8555506122ac565b600085815260209020601f19841690600086815260209020845b838110156155385782860154825560019586019590910190602001615518565b508583101561545d5793015460001960f8600387901b161c19169092555050600190811b01905550565b600060018201615574576155746152ef565b5060010190565b634e487b7160e01b600052603160045260246000fd5b6040815260008084546155a3816152b5565b80604086015260606001808416600081146155c557600181146155df57615610565b60ff1985168884015283151560051b880183019550615610565b8960005260208060002060005b868110156156075781548b82018701529084019082016155ec565b8a018501975050505b50505050506020929092019290925292915050565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b6020808252607a908201527f5b4e4f545f454e4f5547485f544f4b454e535d204e6f7420656e6f756768207460408201527f6f6b656e7320746f206469737472696275746520746f2065766572792070617260608201527f7469636970616e742c20746f6b656e732077696c6c2062652073656e64207261608082015279373237b6b63c9034b710309039b832b1b4b0b61032bb32b73a1760311b60a082015260c00190565b634e487b7160e01b600052601260045260246000fd5b60008261571e5761571e6156f9565b500690565b600082615732576157326156f9565b500490565b6001600160401b0383111561574e5761574e61533b565b6157628361575c83546152b5565b83615351565b6000601f841160018114615790576000851561577e5750838201355b615788868261539f565b8455506122ac565b600083815260209020601f19861690835b828110156157c157868501358255602094850194600190920191016157a1565b50868210156157de5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b80820281158282048414176114cc576114cc6152ef565b7f54726164696e67206e6f7420656e61626c6564207965742c20706c656173652081526d03bb0b4ba171029b2b73232b91d160951b60208201526000835161588581602e850160208801614e45565b6b0102932b1b4b834b2b73a1d160a51b602e9184019182015283516158b181603a840160208801614e45565b01603a01949350505050565b6000602082840312156158cf57600080fd5b81516116ca81614eff565b85815284602082015260a0604082015260006158f960a0830186614ea8565b6001600160a01b0394909416606083015250608001529392505050565b6001600160801b03828116828216039080821115615936576159366152ef565b5092915050565b8281526040602082015260006116c76040830184614ea8565b6000602080838503121561596957600080fd5b82516001600160401b038082111561598057600080fd5b818501915085601f83011261599457600080fd5b8151818111156159a6576159a661533b565b8060051b604051601f19603f830116810181811085821117156159cb576159cb61533b565b6040529182528482019250838101850191888311156159e957600080fd5b938501935b82851015615a07578451845293850193928501926159ee565b9897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220df3444c98a2389da02a3e51fea1078f4975b1ce19502652b9d8d8dcd0193534f64736f6c63430008130033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.