BEP-20
Source Code
Overview
Max Total Supply
10,000GCOW
Holders
9,799
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.003824689172445602 GCOWValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.27;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./Interface.sol";
contract TokenDistributor {
constructor(address token) {
// Approve the maximum possible amount to the deployer for distribution operations
TransferHelper.safeApprove(token, msg.sender, type(uint256).max);
}
}
interface IPool {
function processLotteryEntry(address user, uint256 amount) external;
function batchProcessLotteryResultsWhenBurn() external;
function batchProcessLotteryResultsWhenTrade() external;
function paused() external view returns (bool);
}
contract Token is IERC20, Ownable {
string private _name;
string private _symbol;
uint256 private _decimals;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) public isExcludedFromFee;
mapping(address => bool) public isLiquidityPair;
mapping(address => bool) public isSwapRouter;
uint256 private constant MAX = type(uint256).max;
address public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;
address public constant ZERO_ADDRESS = 0x0000000000000000000000000000000000000000;
address public immutable cowTokenAddress;
address public immutable usdtAddress;
address public immutable currencyAddr;
uint256 public transferFee;
uint256 public buyRewardFee;
uint256 public sellRewardFee;
uint256 public startTradeTimestamp;
address public immutable mainPairAddr;
// uint256 public addLiquidityFee;
uint256 public immutable removeLiquidityFee;
address public immutable wethAddress;
uint256 public startLPTimestamp;
uint256 public immutable maxAmountToJoinLottery;
uint256 public minValue2AddLp2GetDividendValue;
uint256 public gasForProcessing;
bool public constant strictCheck = true;
bool private inSwap;
TokenDistributor public tokenDistributor;
ISwapRouter public immutable swapRouter;
uint256 public immutable removeLpBurnInterval;
IDividendTracker public dividendTracker;
struct UserInfo {
uint256 preLpAmount;
uint256 lpAmount;
}
mapping(address => UserInfo) public _userInfo;
IPool public pool;
modifier onlyPool() {
require(msg.sender == address(pool), "Only pool can call this function");
_;
}
mapping(address => address) public _inviter;
mapping(address => address[]) public _binders;
mapping(address => mapping(address => bool)) public _pendingBind;
uint256[] public invitorRewardPercentList = [50, 30, 20];
event FailedSwap(uint256 value);
event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
event UserLpAmountChangedWhenAddLp(
address user,
uint256 beforePreLpAmount,
uint256 beforeLpAmount,
uint256 preLpAmount,
uint256 lpAmount
);
event UserLpAmountChangedWhenRemoveLp(
address user,
uint256 preLpAmount,
uint256 lpAmount
);
event cantBindCa(address caAddr);
event bindSuccessful(
address indexed i,
address indexed u,
uint256 timestamp
);
event pendingBind(
address indexed s,
address indexed x,
uint256 timestamp
);
event NotEnough2AddLp2GetDividendValue(address indexed user, uint256 addLpTokenValue, uint256 minValue2AddLp2GetDividendValue);
constructor() Ownable(msg.sender) {
_name = "GameCow";
_symbol = "GCOW";
_decimals = 18;
_totalSupply = 10_000 * 10 ** 18;
buyRewardFee = 200;
sellRewardFee = 200;
require(block.chainid == 56 || block.chainid == 97, "chain id not supported");
usdtAddress = block.chainid == 56 ? 0x55d398326f99059fF775485246999027B3197955 : 0xaB1a4d4f1D656d2450692D237fdD6C7f9146e814;
cowTokenAddress = block.chainid == 56 ? 0x7aAAA5B10f97321345ACd76945083141bE1C5631 : 0x7E4388f5868aB7E02BC5e5772688f76c6E462161;
address swapRouterAddr = block.chainid == 56 ? 0x10ED43C718714eb63d5aA57B78B54704E256024E : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
currencyAddr = cowTokenAddress;
address receiveAddr = address(0x50f8f9b66859d0Dd0de4a05aB22dd7d0c0865A1D);
require(currencyAddr < address(this),"currency address cannot be greater than token address");
swapRouter = ISwapRouter(swapRouterAddr);
isSwapRouter[swapRouterAddr] = true;
address swapPair = ISwapFactory(swapRouter.factory()).createPair(address(this), currencyAddr);
mainPairAddr = swapPair;
isLiquidityPair[swapPair] = true;
_balances[receiveAddr] = _totalSupply;
emit Transfer(address(0), receiveAddr, _totalSupply);
isExcludedFromFee[receiveAddr] = true;
isExcludedFromFee[address(this)] = true;
isExcludedFromFee[owner()] = true;
isExcludedFromFee[DEAD_ADDRESS] = true;
tokenDistributor = new TokenDistributor(currencyAddr);
_approve(address(this), address(swapRouterAddr), MAX);
TransferHelper.safeApprove(address(currencyAddr), address(swapRouterAddr), MAX);
wethAddress = swapRouter.WETH();
// user add lp after launch still burn
removeLiquidityFee = 10000;
// enough long to remove prelp burn
removeLpBurnInterval = 99999999 days;
// 10 usdt to get dividend
minValue2AddLp2GetDividendValue = 10 * 10 ** 18;
// transfer 3%
transferFee = 300;
// 1 token
maxAmountToJoinLottery = 1 ether;
}
function initDividendTracker(address _dividendTrackerAddress) public onlyOwner {
require(address(dividendTracker) == address(0), "dividendTracker already initialized");
dividendTracker = IDividendTracker(_dividendTrackerAddress);
dividendTracker.excludeFromDividends(address(dividendTracker));
dividendTracker.excludeFromDividends(address(this));
dividendTracker.excludeFromDividends(ZERO_ADDRESS);
dividendTracker.excludeFromDividends(DEAD_ADDRESS);
dividendTracker.excludeFromDividends(address(swapRouter));
dividendTracker.excludeFromDividends(mainPairAddr);
gasForProcessing = 500_000;
}
function handleWinner(address winner, uint256 sendAmount) external onlyPool returns(uint256, uint256, uint256){
uint256 realAmount = sendAmount;
if (realAmount * 2 > balanceOf(DEAD_ADDRESS)) {
// not enough token
return (0, 0, 0);
}
uint256 toWinnerAmount = realAmount * 196 / 100;
uint256 toLpRewardAmount = realAmount * 2 / 100;
uint256 toInviterAmount = realAmount * 1 / 100;
// cost + profit
_basicTransfer(DEAD_ADDRESS, address(winner), toWinnerAmount);
if (address(dividendTracker) != address(0) && dividendTracker.totalSupply() > 0) {
_basicTransfer(DEAD_ADDRESS, address(dividendTracker), toLpRewardAmount);
dividendTracker.distributeDividends(toLpRewardAmount);
}else{
// This makes it easy to check the quantity; otherwise
// it's impossible to determine whether dividends have been successfully allocated.
_basicTransfer(DEAD_ADDRESS, DEAD_ADDRESS, toLpRewardAmount);
}
uint256 inviterAmount;
uint256 totalShare = getInvitorTotalShare();
address current = winner;
uint256 perInviteAmount = toInviterAmount;
if (totalShare > 0){
for (uint256 i; i < invitorRewardPercentList.length; ++i) {
address __inviter = _inviter[current];
if (address(0) == __inviter) {
__inviter = DEAD_ADDRESS;
}
inviterAmount =
(perInviteAmount * invitorRewardPercentList[i]) /
totalShare;
_basicTransfer(DEAD_ADDRESS, __inviter, inviterAmount);
current = __inviter;
}
}
return (realAmount, toWinnerAmount, toLpRewardAmount);
}
/**
* @notice Returns the token symbol
* @return The symbol of the token
*/
function symbol() external view returns (string memory) {
return _symbol;
}
/**
* @notice Returns the token name
* @return The name of the token
*/
function name() external view returns (string memory) {
return _name;
}
/**
* @notice Returns the token decimals
* @return The number of decimals used by the token
*/
function decimals() external view returns (uint8) {
return uint8(_decimals);
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
if (_allowances[sender][msg.sender] != MAX) {
_allowances[sender][msg.sender] =
_allowances[sender][msg.sender] -
amount;
}
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _basicTransfer(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
function getTokenUsdtValue(uint256 tokenAmount) public view returns(uint256) {
address[] memory path = new address[](4);
path[0] = address(this);
path[1] = currencyAddr;
path[2] = wethAddress;
path[3] = usdtAddress;
try swapRouter.getAmountsOut(tokenAmount, path) returns (uint256[] memory amountsOut) {
return amountsOut[3];
} catch {
return 0;
}
}
function addOrRemove(
address from,
address to,
uint256 amount
)
internal
view
returns (uint256 addLPLiquidity, uint256 removeLPLiquidity)
{
if (isLiquidityPair[to] && isSwapRouter[msg.sender] && from == tx.origin) {
uint256 addAmount = amount;
addLPLiquidity = _isAddLiquidity(to, addAmount);
}
if (isLiquidityPair[from]) {
removeLPLiquidity = _isRemoveLiquidity(from, amount);
}
}
function _getReserves(
address pair
)
public
view
returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
{
ISwapPair mainPair = ISwapPair(pair);
(uint r0, uint256 r1, ) = mainPair.getReserves();
address tokenOther = mainPair.token0() == address(this)
? mainPair.token1()
: mainPair.token0();
if (tokenOther < address(this)) {
rOther = r0;
rThis = r1;
} else {
rOther = r1;
rThis = r0;
}
balanceOther = IERC20(tokenOther).balanceOf(pair);
}
function _isAddLiquidity(
address pair,
uint256 amount
) private view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves(
pair
);
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / rThis;
}
// isAddLP
// cow transfer 2% fee, avoid judgment errors caused by loss of precision
if ((balanceOther * 100 / 98) + 3 >= rOther + amountOther) {
(liquidity, ) = calLiquidity(
pair,
balanceOther,
amount,
rOther,
rThis
);
}
}
function calLiquidity(
address pair,
uint256 balanceA,
uint256 amount,
uint256 r0,
uint256 r1
) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
uint256 pairTotalSupply = ISwapPair(pair).totalSupply();
address feeTo = ISwapFactory(swapRouter.factory()).feeTo();
bool feeOn = feeTo != address(0);
uint256 _kLast = ISwapPair(pair).kLast();
if (feeOn) {
if (_kLast != 0) {
uint256 rootK = Math.sqrt(r0 * r1);
uint256 rootKLast = Math.sqrt(_kLast);
if (rootK > rootKLast) {
uint256 numerator;
uint256 denominator;
if (
address(swapRouter) ==
address(0x10ED43C718714eb63d5aA57B78B54704E256024E)
) {
// BSC Pancake
numerator = pairTotalSupply * (rootK - rootKLast) * 8;
denominator = rootK * 17 + (rootKLast * 8);
} else if (
address(swapRouter) ==
address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)
) {
//BSC testnet Pancake
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 3 + rootKLast;
} else {
//SushiSwap,UniSwap,OK Cherry Swap
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 5 + rootKLast;
}
feeToLiquidity = numerator / denominator;
if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
}
}
}
uint256 amount0 = balanceA - r0;
if (pairTotalSupply == 0) {
if (amount0 > 0) {
liquidity = Math.sqrt(amount0 * amount) - 1000;
}
} else {
liquidity = Math.min(
(amount0 * pairTotalSupply) / r0,
(amount * pairTotalSupply) / r1
);
}
}
function _isRemoveLiquidity(
address pair,
uint256 amount
) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves(
pair
);
//isRemoveLP
if (balanceOther <= rOther) {
liquidity =
(amount * ISwapPair(pair).totalSupply()) /
(balanceOf(pair) - amount);
} else if (strictCheck) {
// buy
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / (rThis - amount);
require(balanceOther >= amountOther + rOther);
}
}
}
function isStartTrade() internal view returns (bool) {
return startTradeTimestamp > 0 && block.timestamp >= startTradeTimestamp;
}
function setPool(address newPool) external onlyOwner {
require(address(pool) == address(0), "pool already set");
pool = IPool(newPool);
}
function getUserInfo(
address account
)
public
view
returns (uint256 lpBalance, uint256 lpAmount, uint256 userLpAmount, uint256 preLpAmount)
{
lpBalance = IERC20(mainPairAddr).balanceOf(account);
userLpAmount = _userInfo[account].lpAmount;
preLpAmount = _userInfo[account].preLpAmount;
lpAmount = userLpAmount + preLpAmount;
}
function multiUpdateLPAmountByLP(address[] memory accounts, bool isPre) external onlyOwner {
UserInfo storage userInfo;
for (uint256 i; i < accounts.length; i++) {
userInfo = _userInfo[accounts[i]];
if (isPre){
userInfo.preLpAmount = IERC20(mainPairAddr).balanceOf(accounts[i]) + 1;
}else{
userInfo.lpAmount = IERC20(mainPairAddr).balanceOf(accounts[i]) + 1;
}
dividendTracker.setBalance(payable(accounts[i]), userInfo.lpAmount + userInfo.preLpAmount);
}
}
function processDividendTracker(uint256 gas) external {
(
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) = dividendTracker.process(gas);
emit ProcessedDividendTracker(
iterations,
claims,
lastProcessedIndex,
false,
gas,
tx.origin
);
}
function claim() external {
dividendTracker.processAccount(payable(msg.sender), false);
}
function setInvitorRewardPercentList(
uint256[] calldata newValue
) public onlyOwner {
invitorRewardPercentList = new uint256[](newValue.length);
for (uint256 i = 0; i < newValue.length; i++) {
invitorRewardPercentList[i] = newValue[i];
}
require(getInvitorTotalShare() <= 10000 - buyRewardFee - sellRewardFee - transferFee, "invitor reward percent list is not valid");
}
function lenOfInvitorRewardPercentList() public view returns (uint256) {
return invitorRewardPercentList.length;
}
function getInvitorTotalShare() public view returns(uint256){
uint256 totalShare;
for (uint256 i; i < invitorRewardPercentList.length; i++) {
totalShare += invitorRewardPercentList[i];
}
return totalShare;
}
function _transfer(address from, address to, uint256 amount) private {
if (inSwap) {
_basicTransfer(from, to, amount);
return;
}
uint256 balance = _balances[from];
require(balance >= amount, "balanceNotEnough");
if (to == DEAD_ADDRESS && !isExcludedFromFee[from] && msg.sender == tx.origin) {
require(address(pool) != address(0), "pool not set");
require(amount <= maxAmountToJoinLottery, "exceed max amount");
if (pool.paused()) {
_basicTransfer(from, DEAD_ADDRESS, amount);
return;
}
pool.processLotteryEntry(from, amount);
try pool.batchProcessLotteryResultsWhenBurn() {} catch { emit FailedSwap(1); }
_basicTransfer(from, DEAD_ADDRESS, amount);
return;
}
bool takeFee;
bool isRemove;
bool isAdd;
(uint256 addLPLiquidity, uint256 removeLPLiquidity) = addOrRemove(
from,
to,
amount
);
// must currency + token, otherwise the LP will be lost
if (addLPLiquidity > 0 && !isExcludedFromFee[from]) {
isAdd = true;
UserInfo storage userInfo = _userInfo[from];
if (!isStartTrade()) {
userInfo.preLpAmount += addLPLiquidity;
emit UserLpAmountChangedWhenAddLp(
from,
userInfo.preLpAmount - addLPLiquidity,
userInfo.lpAmount,
userInfo.preLpAmount,
userInfo.lpAmount
);
} else {
userInfo.lpAmount += addLPLiquidity;
emit UserLpAmountChangedWhenAddLp(
from,
userInfo.preLpAmount,
userInfo.lpAmount - addLPLiquidity,
userInfo.preLpAmount,
userInfo.lpAmount
);
}
uint256 addLpTokenValue = getTokenUsdtValue(amount);
// if you dont want check value, set minValue2AddLp2GetDividendValue to 1 wei
if (minValue2AddLp2GetDividendValue > 0 && addLpTokenValue >= minValue2AddLp2GetDividendValue) {
dividendTracker.setBalance(payable(from), userInfo.lpAmount + userInfo.preLpAmount);
}else{
emit NotEnough2AddLp2GetDividendValue(from, addLpTokenValue, minValue2AddLp2GetDividendValue);
}
}
if (removeLPLiquidity > 0) {
isRemove = true;
}
bool isExcludedFromFeeTransfer = isExcludedFromFee[from] || isExcludedFromFee[to];
bool isSwapTransfer = isLiquidityPair[from] || isLiquidityPair[to];
// user can't add other lp before start trade
if (!isStartTrade()) {
if (
!isExcludedFromFeeTransfer &&
!isSwapTransfer
) {
require(!isContract(to), "can't add other lp before start trade");
}
}
if (isSwapTransfer && !isExcludedFromFeeTransfer) {
if (!isStartTrade()){
require(
startLPTimestamp > 0 && isAdd, "lp cant be added"
);
}
// still hold 1 wei token when sell all token
if (!isAdd && isLiquidityPair[to]) {
if (amount == balanceOf(from)) {
amount -= 1;
}
}
if (!isAdd && !isRemove) takeFee = true; // just swap fee
}
_tokenTransfer(
from,
to,
amount,
takeFee,
!isSwapTransfer,
isAdd,
isRemove,
removeLPLiquidity
);
// process dividend tracker when swap, when transfer, no need to trigger dividends to save gas
if (!inSwap && isSwapTransfer) {
uint256 gas = gasForProcessing;
inSwap = true;
try dividendTracker.process(gas) returns (
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) {
emit ProcessedDividendTracker(
iterations,
claims,
lastProcessedIndex,
true,
gas,
tx.origin
);
} catch {}
inSwap = false;
}
}
function _distributeRefReward(address sender, uint256 perInviteAmount, address _current, uint256 totalShare) private {
address current = _current;
uint256 inviterAmount;
if (totalShare > 0){
for (uint256 i; i < invitorRewardPercentList.length; ++i) {
address __inviter = _inviter[current];
if (address(0) == __inviter) {
__inviter = DEAD_ADDRESS;
}
inviterAmount =
(perInviteAmount * invitorRewardPercentList[i]) /
totalShare;
_takeTransfer(sender, __inviter, inviterAmount);
current = __inviter;
}
}
}
function min(uint256 a, uint256 b) public pure returns (uint256) {
return a < b ? a : b;
}
function _tokenTransfer(
address sender,
address recipient,
uint256 tAmount,
bool takeFee,
bool isTransfer,
bool isAdd,
bool isRemove,
uint256 removeLPLiquidity
) private {
_balances[sender] -= tAmount;
uint256 feeAmount;
if (takeFee) {
if (isLiquidityPair[sender] || isLiquidityPair[recipient]) {
//invitor reward
address current;
if (isLiquidityPair[sender]) {
current = recipient;
} else {
current = sender;
}
uint256 totalShare = getInvitorTotalShare();
uint256 perInviteAmount = (tAmount * totalShare) / 10000;
feeAmount += perInviteAmount;
_distributeRefReward(sender, perInviteAmount, current, totalShare);
}
bool isSell = isLiquidityPair[recipient];
uint256 swapFee;
// uint256 burnFee;
if (isSell) {
swapFee = sellRewardFee;
} else {
swapFee = buyRewardFee;
}
uint256 swapFeeAmount = (tAmount * swapFee) / 10000;
if (swapFeeAmount > 0) {
feeAmount += swapFeeAmount;
if (address(dividendTracker) != address(0) && dividendTracker.totalSupply() > 0) {
_takeTransfer(sender, address(dividendTracker), swapFeeAmount);
dividendTracker.distributeDividends(swapFeeAmount);
}else{
_takeTransfer(sender, DEAD_ADDRESS, swapFeeAmount);
}
}
}
if (isTransfer) {
address from = sender;
address to = recipient;
if (isContract(to)) {
emit cantBindCa(to);
} else if (isContract(from)) {
emit cantBindCa(from);
}else{
if (address(0) == _inviter[to] && tAmount > 0 && from != to && !isExcludedFromFee[to]) {
_pendingBind[from][to] = true;
emit pendingBind(from, to, block.timestamp);
}
if (address(0) == _inviter[from] && tAmount > 0 && from != to) {
if (_pendingBind[to][from] && _binders[from].length == 0) {
if (to != address(0)) {
_inviter[from] = to;
_binders[to].push(from);
emit bindSuccessful(to, from, block.timestamp);
}
}
}
}
}
bool isExcludedFromFeeTransfer = isExcludedFromFee[sender] || isExcludedFromFee[recipient];
// transfer free
if (isTransfer && !isExcludedFromFeeTransfer) {
uint256 transferFeeAmount;
transferFeeAmount = (tAmount * transferFee) / 10000;
if (transferFeeAmount > 0) {
// feeAmount += transferFeeAmount;
// _takeTransfer(sender, address(this), transferFeeAmount);
address current;
// If 'from' is the contract address, then it is assumed to be the LP contract.
if (isContract(sender)) {
current = recipient;
} else {
current = sender;
}
uint256 totalShare = getInvitorTotalShare();
feeAmount += transferFeeAmount;
_distributeRefReward(sender, transferFeeAmount / 3, current, totalShare);
if (address(dividendTracker) != address(0) && dividendTracker.totalSupply() > 0) {
_takeTransfer(sender, address(dividendTracker), transferFeeAmount * 2 / 3);
dividendTracker.distributeDividends(transferFeeAmount * 2 / 3);
}else{
_takeTransfer(sender, DEAD_ADDRESS, transferFeeAmount * 2 / 3);
}
}
}
if (isAdd && !isExcludedFromFeeTransfer) {
// free
}
if (isRemove && !isExcludedFromFeeTransfer) {
UserInfo storage userInfo = _userInfo[recipient];
// already remove prelp burn
bool isWithinRemoveLpBurnDays = isStartTrade() && block.timestamp < startTradeTimestamp + removeLpBurnInterval;
if (userInfo.preLpAmount >= removeLPLiquidity) {
userInfo.preLpAmount -= removeLPLiquidity;
uint256 removeFeeAmt = isWithinRemoveLpBurnDays ? (tAmount - feeAmount) : 0;
feeAmount += removeFeeAmt;
_takeTransfer(sender, DEAD_ADDRESS, removeFeeAmt);
} else {
uint256 removeLpBurnAmount = (userInfo.preLpAmount * tAmount) / removeLPLiquidity;
if (isWithinRemoveLpBurnDays && removeLpBurnAmount > 0) {
uint256 _tempfeeAmount = min(tAmount - feeAmount, removeLpBurnAmount);
feeAmount += _tempfeeAmount;
_takeTransfer(sender, DEAD_ADDRESS, _tempfeeAmount);
}
// uint256 restLp = removeLPLiquidity - userInfo.preLpAmount;
userInfo.lpAmount -= (removeLPLiquidity - userInfo.preLpAmount);
userInfo.preLpAmount = 0;
// uint256 _tempvalue = tAmount - (isWithinRemoveLpBurnDays ? removeLpBurnAmount : 0);
uint256 removeLpFeeAmount = ((tAmount - (isWithinRemoveLpBurnDays ? removeLpBurnAmount : 0)) * removeLiquidityFee) / 10000;
if (removeLpFeeAmount > 0) {
uint256 _tempfeeAmount = min(tAmount - feeAmount, removeLpFeeAmount);
feeAmount += _tempfeeAmount;
_takeTransfer(sender, DEAD_ADDRESS, _tempfeeAmount);
}
}
dividendTracker.setBalance(payable(recipient), userInfo.lpAmount + userInfo.preLpAmount);
emit UserLpAmountChangedWhenRemoveLp(
recipient,
userInfo.preLpAmount,
userInfo.lpAmount
);
}
_takeTransfer(sender, recipient, tAmount - feeAmount);
if (!isExcludedFromFeeTransfer){
try pool.batchProcessLotteryResultsWhenTrade() {} catch { emit FailedSwap(2); }
}
}
function _takeTransfer(
address sender,
address to,
uint256 tAmount
) private {
_balances[to] += tAmount;
emit Transfer(sender, to, tAmount);
}
function isContract(address _addr) private view returns (bool) {
return _addr.code.length > 25; // contract code length > 25 bytes, exclude eip7702 address
}
function startLP() external onlyOwner {
require(0 == startLPTimestamp, "startedAddLP");
startLPTimestamp = block.timestamp;
}
function stopLP() external onlyOwner {
startLPTimestamp = 0;
}
function launch() external onlyOwner {
require(0 == startTradeTimestamp, "already open");
startTradeTimestamp = block.timestamp;
}
function setStartTradeTimestamp(uint256 newValue) external onlyOwner {
require(newValue > block.timestamp, "new value must be greater than current timestamp");
startTradeTimestamp = newValue;
}
function shutdown() external onlyOwner {
require(startTradeTimestamp > 0, "already shutdown");
startTradeTimestamp = 0;
}
function setGasForProcessing(uint256 newValue) external onlyOwner {
require(newValue >= 300000 && newValue <= 2000000, "gas for processing must be between 300000 and 2000000");
gasForProcessing = newValue;
}
function setMinValue2AddLp2GetDividendValue(uint256 newValue) external onlyOwner {
minValue2AddLp2GetDividendValue = newValue;
}
function multiSetIsExcludedFromFee(
address[] calldata addresses,
bool status
) external onlyOwner {
for (uint256 i; i < addresses.length; i++) {
isExcludedFromFee[addresses[i]] = status;
}
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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 v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
interface ISwapRouter {
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
}
interface ISwapFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function feeTo() external view returns (address);
}
interface ISwapPair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function token0() external view returns (address);
function token1() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function kLast() external view returns (uint);
function totalSupply() external view returns (uint256);
}
interface IWETH {
function deposit() external payable;
function withdraw(uint) external;
}
interface DividendPayingTokenOptionalInterface {
function withdrawableDividendOf(
address _owner
) external view returns (uint256);
function withdrawnDividendOf(
address _owner
) external view returns (uint256);
function accumulativeDividendOf(
address _owner
) external view returns (uint256);
}
interface DividendPayingTokenInterface {
function dividendOf(address _owner) external view returns (uint256);
function withdrawDividend() external;
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library IterableMapping {
// Iterable mapping from address to uint;
struct Map {
address[] keys;
mapping(address => uint256) values;
mapping(address => uint256) indexOf;
mapping(address => bool) inserted;
}
function get(Map storage map, address key) public view returns (uint256) {
return map.values[key];
}
function getIndexOfKey(
Map storage map,
address key
) public view returns (int256) {
if (!map.inserted[key]) {
return -1;
}
return int256(map.indexOf[key]);
}
function getKeyAtIndex(
Map storage map,
uint256 index
) public view returns (address) {
return map.keys[index];
}
function size(Map storage map) public view returns (uint256) {
return map.keys.length;
}
function set(Map storage map, address key, uint256 val) public {
if (map.inserted[key]) {
map.values[key] = val;
} else {
map.inserted[key] = true;
map.values[key] = val;
map.indexOf[key] = map.keys.length;
map.keys.push(key);
}
}
function remove(Map storage map, address key) public {
if (!map.inserted[key]) {
return;
}
delete map.inserted[key];
delete map.values[key];
uint256 index = map.indexOf[key];
uint256 lastIndex = map.keys.length - 1;
address lastKey = map.keys[lastIndex];
map.indexOf[lastKey] = index;
delete map.indexOf[key];
map.keys[index] = lastKey;
map.keys.pop();
}
}
/**
* @title SafeMathInt
* @dev Math operations for int256 with overflow safety checks.
*/
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
/**
* @dev Multiplies two int256 variables and fails on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
/**
* @dev Division of two int256 variables and fails on overflow.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
/**
* @dev Subtracts two int256 variables and fails on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two int256 variables and fails on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Converts to absolute value, and fails on overflow.
*/
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
/**
* @title SafeMathUint
* @dev Math operations with safety checks that revert on error
*/
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
function safeTransferFrom(address token, address from, address to, uint value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
}
function safeTransferETH(address to, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
}
}
interface IDividendTracker {
function totalSupply() external view returns (uint256);
// function claimDividendTrackerToken(address token, address to, uint256 amount) external;
function setMinimumTokenBalanceForDividends(uint256 newValue) external;
function setClaimWait(uint256 newValue) external;
function setBalance(address payable account,uint256 newBalance) external;
function process(uint256 gas) external returns (uint256, uint256, uint256);
function processAccount(
address payable account,
bool automatic
) external returns (bool);
function excludeFromDividends(address account) external;
function distributeDividends(uint256 amount) external;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"uint256","name":"value","type":"uint256"}],"name":"FailedSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"addLpTokenValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minValue2AddLp2GetDividendValue","type":"uint256"}],"name":"NotEnough2AddLp2GetDividendValue","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"beforePreLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beforeLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"preLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"UserLpAmountChangedWhenAddLp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"preLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"UserLpAmountChangedWhenRemoveLp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"i","type":"address"},{"indexed":true,"internalType":"address","name":"u","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"bindSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caAddr","type":"address"}],"name":"cantBindCa","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"s","type":"address"},{"indexed":true,"internalType":"address","name":"x","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"pendingBind","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_binders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_inviter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_pendingBind","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userInfo","outputs":[{"internalType":"uint256","name":"preLpAmount","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cowTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract IDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInvitorTotalShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getTokenUsdtValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"userLpAmount","type":"uint256"},{"internalType":"uint256","name":"preLpAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"sendAmount","type":"uint256"}],"name":"handleWinner","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dividendTrackerAddress","type":"address"}],"name":"initDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"invitorRewardPercentList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSwapRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lenOfInvitorRewardPercentList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPairAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmountToJoinLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"minValue2AddLp2GetDividendValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multiSetIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isPre","type":"bool"}],"name":"multiUpdateLPAmountByLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLpBurnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newValue","type":"uint256[]"}],"name":"setInvitorRewardPercentList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinValue2AddLp2GetDividendValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPool","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setStartTradeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shutdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLPTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"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":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
61020060405260326101a0908152601e6101c05260146101e0526100279060189060036107aa565b5034801561003457600080fd5b50338061005c57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610065816105de565b5060408051808201909152600781526647616d65436f7760c81b602082015260019061009190826108b8565b5060408051808201909152600481526347434f5760e01b60208201526002906100ba90826108b8565b50601260035569021e19e0c9bab240000060045560c8600b819055600c5560384614806100e75750466061145b6101335760405162461bcd60e51b815260206004820152601660248201527f636861696e206964206e6f7420737570706f72746564000000000000000000006044820152606401610053565b466038146101555773ab1a4d4f1d656d2450692d237fdd6c7f9146e81461016b565b7355d398326f99059ff775485246999027b31979555b6001600160a01b031660a0526038461461019957737e4388f5868ab7e02bc5e5772688f76c6e4621616101af565b737aaaa5b10f97321345acd76945083141be1c56315b6001600160a01b03166080526000603846146101df5773d99d1c33f9fc3444f8101754abc46c52416550d16101f5565b7310ed43c718714eb63d5aa57b78b54704e256024e5b6080516001600160a01b031660c08190529091507350f8f9b66859d0dd0de4a05ab22dd7d0c0865a1d9030116102935760405162461bcd60e51b815260206004820152603560248201527f63757272656e637920616464726573732063616e6e6f7420626520677265617460448201527f6572207468616e20746f6b656e206164647265737300000000000000000000006064820152608401610053565b6001600160a01b0382166101608190526000818152600960209081526040808320805460ff19166001179055805163c45a015560e01b8152905192939263c45a0155926004808401939192918290030181865afa1580156102f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031c9190610976565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561036d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190610976565b6001600160a01b0381811660e08190526000908152600860209081526040808320805460ff1916600117905560045493871680845260058352818420859055905193845293945090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b03821660009081526007602081905260408083208054600160ff19918216811790925530855291842080549092168117909155916104526000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905561dead905260079091527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805490921660011790915560c05190516104c2906107fa565b6001600160a01b039091168152602001604051809103906000f0801580156104ee573d6000803e3d6000fd5b50601180546001600160a01b039290921661010002610100600160a81b0319909216919091179055610523308460001961062e565b60c051610533908460001961068f565b610160516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105989190610976565b6001600160a01b031661012052505061271061010052506507dba8202e8061018052678ac7230489e80000600f5561012c600a55670de0b6b3a7640000610140526109f7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916106eb91906109a6565b6000604051808303816000865af19150503d8060008114610728576040519150601f19603f3d011682016040523d82523d6000602084013e61072d565b606091505b509150915081801561075757508051158061075757508080602001905181019061075791906109d5565b6107a35760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610053565b5050505050565b8280548282559060005260206000209081019282156107ea579160200282015b828111156107ea578251829060ff169055916020019190600101906107ca565b506107f6929150610807565b5090565b61022f8061502483390190565b5b808211156107f65760008155600101610808565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061084657607f821691505b60208210810361086657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108b357806000526020600020601f840160051c810160208510156108935750805b601f840160051c820191505b818110156107a3576000815560010161089f565b505050565b81516001600160401b038111156108d1576108d161081c565b6108e5816108df8454610832565b8461086c565b6020601f82116001811461091957600083156109015750848201515b600019600385901b1c1916600184901b1784556107a3565b600084815260208120601f198516915b828110156109495787850151825560209485019460019092019101610929565b50848210156109675786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561098857600080fd5b81516001600160a01b038116811461099f57600080fd5b9392505050565b6000825160005b818110156109c757602081860181015185830152016109ad565b506000920191825250919050565b6000602082840312156109e757600080fd5b8151801515811461099f57600080fd5b60805160a05160c05160e0516101005161012051610140516101605161018051614554610ad060003960008181610b260152613489015260008181610be401528181610f2b0152818161140601528181613ae801528181613c9d0152613d2a0152600081816109dc01526123e60152600081816106fa015261135b015260008181610bb001526135a901526000818161096d01528181610faa015281816116a60152818161176d01526119400152600081816106460152611307015260008181610a8c01526113af01526000610a2e01526145546000f3fe6080604052600436106103bc5760003560e01c80635a1fe42f116101f2578063992db38f1161010d578063b5028e23116100a0578063dd62ed3e1161006f578063dd62ed3e14610c3c578063de0aad5314610c82578063f2fde38b14610c98578063fc0e74d114610cb857600080fd5b8063b5028e2314610b7e578063bfc3137e14610b9e578063c31c9c0714610bd2578063ccdbd42414610c0657600080fd5b8063a9059cbb116100dc578063a9059cbb14610af4578063ac0c850814610b14578063acb2ad6f14610b48578063b340364f14610b5e57600080fd5b8063992db38f14610a655780639ab4a44514610a7a5780639c1b8af514610aae578063a1bc910f14610ac457600080fd5b8063715018a61161018557806386b0e8051161015457806386b0e805146109ca5780638da5cb5b146109fe5780639145b1c414610a1c57806395d89b4114610a5057600080fd5b8063715018a6146109265780637ae2b5c71461093b578063847164851461095b578063850ea0da1461098f57600080fd5b80636386c1c7116101c15780636386c1c7146108475780636f17d61114610887578063700bb191146108d057806370a08231146108f057600080fd5b80635a1fe42f146107c15780635b1d8067146107e15780635c25c30e146107f75780635c9a05b81461081757600080fd5b80632e8474d5116102e25780634e6fd6c411610275578063538ba4f911610244578063538ba4f91461074c57806358877f611461076157806358c3dd2b146107815780635960e46d146107a157600080fd5b80634e6fd6c4146106bd5780634e71d92d146106d35780634f0e0ef3146106e85780635342acb41461071c57600080fd5b8063395a81e7116102b1578063395a81e7146106345780634437152a14610668578063474b46d8146106885780634b656b241461069d57600080fd5b80632e8474d5146105a2578063302fa653146105b7578063313ce567146105f2578063324cd3c91461061457600080fd5b806315bfa3c61161035a57806318d128551161032957806318d128551461052d578063214b20de1461054257806323b872dd146105625780632c1f52161461058257600080fd5b806315bfa3c6146104a557806316f0115b146104bb57806318160ddd146104f357806318a6bc321461050857600080fd5b806306fdde031161039657806306fdde0314610428578063095ea7b31461044a5780630b4575571461047a5780630cfe2f3f1461048f57600080fd5b806301339c21146103c8578063017df7f2146103df57806306b16e94146103ff57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ccd565b005b3480156103eb57600080fd5b506103dd6103fa366004613f29565b610d1f565b34801561040b57600080fd5b50610415600d5481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b5061043d61101b565b60405161041f9190613f46565b34801561045657600080fd5b5061046a610465366004613f94565b6110ad565b604051901515815260200161041f565b34801561048657600080fd5b506104156110c4565b34801561049b57600080fd5b50610415600b5481565b3480156104b157600080fd5b50610415600f5481565b3480156104c757600080fd5b506014546104db906001600160a01b031681565b6040516001600160a01b03909116815260200161041f565b3480156104ff57600080fd5b50600454610415565b34801561051457600080fd5b506011546104db9061010090046001600160a01b031681565b34801561053957600080fd5b506103dd61110d565b34801561054e57600080fd5b506103dd61055d366004613fc0565b61111c565b34801561056e57600080fd5b5061046a61057d366004613fd9565b611129565b34801561058e57600080fd5b506012546104db906001600160a01b031681565b3480156105ae57600080fd5b5061046a600181565b3480156105c357600080fd5b5061046a6105d236600461401a565b601760209081526000928352604080842090915290825290205460ff1681565b3480156105fe57600080fd5b5060035460405160ff909116815260200161041f565b34801561062057600080fd5b506103dd61062f366004613fc0565b6111c0565b34801561064057600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067457600080fd5b506103dd610683366004613f29565b611235565b34801561069457600080fd5b50601854610415565b3480156106a957600080fd5b506104156106b8366004613fc0565b6112ab565b3480156106c957600080fd5b506104db61dead81565b3480156106df57600080fd5b506103dd6114ae565b3480156106f457600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b34801561072857600080fd5b5061046a610737366004613f29565b60076020526000908152604090205460ff1681565b34801561075857600080fd5b506104db600081565b34801561076d57600080fd5b506103dd61077c3660046140b8565b611526565b34801561078d57600080fd5b5061041561079c366004613fc0565b61159b565b3480156107ad57600080fd5b506103dd6107bc366004613fc0565b6115bc565b3480156107cd57600080fd5b506103dd6107dc36600461417a565b611649565b3480156107ed57600080fd5b50610415600e5481565b34801561080357600080fd5b506104db610812366004613f94565b6118e0565b34801561082357600080fd5b5061046a610832366004613f29565b60086020526000908152604090205460ff1681565b34801561085357600080fd5b50610867610862366004613f29565b611918565b60408051948552602085019390935291830152606082015260800161041f565b34801561089357600080fd5b506108bb6108a2366004613f29565b6013602052600090815260409020805460019091015482565b6040805192835260208301919091520161041f565b3480156108dc57600080fd5b506103dd6108eb366004613fc0565b6119e4565b3480156108fc57600080fd5b5061041561090b366004613f29565b6001600160a01b031660009081526005602052604090205490565b34801561093257600080fd5b506103dd611ab6565b34801561094757600080fd5b50610415610956366004614230565b611aca565b34801561096757600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b34801561099b57600080fd5b506109af6109aa366004613f94565b611ae2565b6040805193845260208401929092529082015260600161041f565b3480156109d657600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000000081565b348015610a0a57600080fd5b506000546001600160a01b03166104db565b348015610a2857600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a5c57600080fd5b5061043d611dbc565b348015610a7157600080fd5b506103dd611dcb565b348015610a8657600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b348015610aba57600080fd5b5061041560105481565b348015610ad057600080fd5b5061046a610adf366004613f29565b60096020526000908152604090205460ff1681565b348015610b0057600080fd5b5061046a610b0f366004613f94565b611e18565b348015610b2057600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000000081565b348015610b5457600080fd5b50610415600a5481565b348015610b6a57600080fd5b506109af610b79366004613f29565b611e25565b348015610b8a57600080fd5b506103dd610b99366004614252565b61208a565b348015610baa57600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000000081565b348015610bde57600080fd5b506104db7f000000000000000000000000000000000000000000000000000000000000000081565b348015610c1257600080fd5b506104db610c21366004613f29565b6015602052600090815260409020546001600160a01b031681565b348015610c4857600080fd5b50610415610c5736600461401a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c8e57600080fd5b50610415600c5481565b348015610ca457600080fd5b506103dd610cb3366004613f29565b6121ca565b348015610cc457600080fd5b506103dd612205565b610cd5612259565b600d5415610d195760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b60448201526064015b60405180910390fd5b42600d55565b610d27612259565b6012546001600160a01b031615610d8c5760405162461bcd60e51b815260206004820152602360248201527f6469766964656e64547261636b657220616c726561647920696e697469616c696044820152621e995960ea1b6064820152608401610d10565b601280546001600160a01b0319166001600160a01b03831690811790915560405163031e79db60e41b8152600481018290526331e79db090602401600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505060125460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505060125460405163031e79db60e41b8152600060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060125460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610efb57600080fd5b505af1158015610f0f573d6000803e3d6000fd5b505060125460405163031e79db60e41b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015290911692506331e79db09150602401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505060125460405163031e79db60e41b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015290911692506331e79db09150602401600060405180830381600087803b158015610ff957600080fd5b505af115801561100d573d6000803e3d6000fd5b50506207a120601055505050565b60606001805461102a90614294565b80601f016020809104026020016040519081016040528092919081815260200182805461105690614294565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b5050505050905090565b60006110ba338484612286565b5060015b92915050565b60008060005b60185481101561110757601881815481106110e7576110e76142c8565b9060005260206000200154826110fd91906142f4565b91506001016110ca565b50919050565b611115612259565b6000600e55565b611124612259565b600f55565b60006111368484846122e8565b6001600160a01b0384166000908152600660209081526040808320338452909152902054600019146111b6576001600160a01b0384166000908152600660209081526040808320338452909152902054611191908390614307565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b5060019392505050565b6111c8612259565b4281116112305760405162461bcd60e51b815260206004820152603060248201527f6e65772076616c7565206d7573742062652067726561746572207468616e206360448201526f0757272656e742074696d657374616d760841b6064820152608401610d10565b600d55565b61123d612259565b6014546001600160a01b0316156112895760405162461bcd60e51b815260206004820152601060248201526f1c1bdbdb08185b1c9958591e481cd95d60821b6044820152606401610d10565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600480825260a082019092526000918291906020820160808036833701905050905030816000815181106112e5576112e56142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611339576113396142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160028151811061138d5761138d6142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816003815181106113e1576113e16142c8565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063d06ca61f9061143f908690859060040161431a565b600060405180830381865afa92505050801561147d57506040513d6000823e601f3d908101601f1916820160405261147a9190810190614372565b60015b61148a5750600092915050565b8060038151811061149d5761149d6142c8565b602002602001015192505050919050565b60125460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614408565b50565b61152e612259565b60005b82811015611595578160076000868685818110611550576115506142c8565b90506020020160208101906115659190613f29565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611531565b50505050565b601881815481106115ab57600080fd5b600091825260209091200154905081565b6115c4612259565b620493e081101580156115da5750621e84808111155b6116445760405162461bcd60e51b815260206004820152603560248201527f67617320666f722070726f63657373696e67206d7573742062652062657477656044820152740656e2033303030303020616e64203230303030303605c1b6064820152608401610d10565b601055565b611651612259565b6000805b83518110156115955760136000858381518110611674576116746142c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209150821561176b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082318583815181106116e5576116e56142c8565b60200260200101516040518263ffffffff1660e01b815260040161171891906001600160a01b0391909116815260200190565b602060405180830381865afa158015611735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117599190614425565b6117649060016142f4565b8255611831565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082318583815181106117ac576117ac6142c8565b60200260200101516040518263ffffffff1660e01b81526004016117df91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156117fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118209190614425565b61182b9060016142f4565b60018301555b60125484516001600160a01b039091169063e30443bc9086908490811061185a5761185a6142c8565b60200260200101518460000154856001015461187691906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156118bc57600080fd5b505af11580156118d0573d6000803e3d6000fd5b5050600190920191506116559050565b601660205281600052604060002081815481106118fc57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6040516370a0823160e01b81526001600160a01b0382811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190614425565b6001600160a01b038616600090815260136020526040902060018101549054919550925090506119db81836142f4565b92509193509193565b6012546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b919061443e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b611abe612259565b611ac86000612b67565b565b6000818310611ad95781611adb565b825b9392505050565b601454600090819081906001600160a01b03163314611b435760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920706f6f6c2063616e2063616c6c20746869732066756e6374696f6e6044820152606401610d10565b61dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba548490611b7d82600261446c565b1115611b9457600080600093509350935050611db5565b60006064611ba38360c461446c565b611bad9190614483565b905060006064611bbe84600261446c565b611bc89190614483565b905060006064611bd985600161446c565b611be39190614483565b9050611bf261dead8a85612bb7565b506012546001600160a01b031615801590611c785750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190614425565b115b15611cfb57601254611c979061dead906001600160a01b031684612bb7565b50601254604051633243c79160e01b8152600481018490526001600160a01b0390911690633243c79190602401600060405180830381600087803b158015611cde57600080fd5b505af1158015611cf2573d6000803e3d6000fd5b50505050611d0a565b611d0861dead8084612bb7565b505b600080611d156110c4565b90508a838215611da65760005b601854811015611da4576001600160a01b0380841660009081526015602052604081205490911690819003611d56575061dead5b8460188381548110611d6a57611d6a6142c8565b906000526020600020015484611d80919061446c565b611d8a9190614483565b9550611d9961dead8288612bb7565b509250600101611d22565b505b50959850939650919450505050505b9250925092565b60606002805461102a90614294565b611dd3612259565b600e5415611e125760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401610d10565b42600e55565b60006110ba3384846122e8565b600080600080849050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9391906144bc565b506001600160701b031691506001600160701b031691506000306001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f189190614501565b6001600160a01b031614611f8d57836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f889190614501565b611fef565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190614501565b9050306001600160a01b038216101561200d57829650819550612014565b8196508295505b6040516370a0823160e01b81526001600160a01b0389811660048301528216906370a0823190602401602060405180830381865afa15801561205a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207e9190614425565b96989597505050505050565b612092612259565b8067ffffffffffffffff8111156120ab576120ab61410f565b6040519080825280602002602001820160405280156120d4578160200160208202803683370190505b5080516120e991601891602090910190613eb4565b5060005b8181101561213557828282818110612107576121076142c8565b9050602002013560188281548110612121576121216142c8565b6000918252602090912001556001016120ed565b50600a54600c54600b5461214b90612710614307565b6121559190614307565b61215f9190614307565b6121676110c4565b11156121c65760405162461bcd60e51b815260206004820152602860248201527f696e7669746f72207265776172642070657263656e74206c697374206973206e6044820152671bdd081d985b1a5960c21b6064820152608401610d10565b5050565b6121d2612259565b6001600160a01b0381166121fc57604051631e4fbdf760e01b815260006004820152602401610d10565b61152381612b67565b61220d612259565b6000600d54116122525760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c9039b43aba3237bbb760811b6044820152606401610d10565b6000600d55565b6000546001600160a01b03163314611ac85760405163118cdaa760e01b8152336004820152602401610d10565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60115460ff16156122fe57611595838383612bb7565b6001600160a01b0383166000908152600560205260409020548181101561235a5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610d10565b6001600160a01b03831661dead14801561238d57506001600160a01b03841660009081526007602052604090205460ff16155b801561239857503332145b156125e5576014546001600160a01b03166123e45760405162461bcd60e51b815260206004820152600c60248201526b1c1bdbdb081b9bdd081cd95d60a21b6044820152606401610d10565b7f00000000000000000000000000000000000000000000000000000000000000008211156124485760405162461bcd60e51b8152602060048201526011602482015270195e18d95959081b585e08185b5bdd5b9d607a1b6044820152606401610d10565b601460009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614408565b156124d8576124d18461dead84612bb7565b5050505050565b6014546040516352b5677b60e11b81526001600160a01b038681166004830152602482018590529091169063a56acef690604401600060405180830381600087803b15801561252657600080fd5b505af115801561253a573d6000803e3d6000fd5b50505050601460009054906101000a90046001600160a01b03166001600160a01b031663e94eec966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561258e57600080fd5b505af192505050801561259f575060015b6125d857604051600181527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b6124d18461dead84612bb7565b60008060008060006125f8898989612c6c565b9150915060008211801561262557506001600160a01b03891660009081526007602052604090205460ff16155b1561286b576001600160a01b03891660009081526013602052604090206001935061264e612d03565b6126dc578281600001600082825461266691906142f4565b909155505080547f713fc98c9fc53e66529bdd40e935eefc27a2d627f8ae82dac3d128b5dccecd5c908b9061269c908690614307565b60018401548454604080516001600160a01b03959095168552602085019390935283830182905260608401526080830152519081900360a00190a1612768565b828160010160008282546126f091906142f4565b9091555050805460018201547f713fc98c9fc53e66529bdd40e935eefc27a2d627f8ae82dac3d128b5dccecd5c918c9161272b908790614307565b84546001860154604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00160405180910390a15b6000612773896112ab565b90506000600f541180156127895750600f548110155b1561281957601254825460018401546001600160a01b039092169163e30443bc918e916127b691906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50505050612868565b8a6001600160a01b03167f2daa35b4ade993bf8c92c47c739178641b6b98a6cf0609273b16395d5e4623b682600f5460405161285f929190918252602082015260400190565b60405180910390a25b50505b801561287657600193505b6001600160a01b03891660009081526007602052604081205460ff16806128b557506001600160a01b03891660009081526007602052604090205460ff165b6001600160a01b038b166000908152600860205260408120549192509060ff16806128f857506001600160a01b038a1660009081526008602052604090205460ff165b9050612902612d03565b6129805781158015612912575080155b156129805760196001600160a01b038b163b11156129805760405162461bcd60e51b815260206004820152602560248201527f63616e277420616464206f74686572206c70206265666f726520737461727420604482015264747261646560d81b6064820152608401610d10565b80801561298b575081155b15612a5857612998612d03565b6129ea576000600e541180156129ab5750845b6129ea5760405162461bcd60e51b815260206004820152601060248201526f1b1c0818d85b9d08189948185919195960821b6044820152606401610d10565b84158015612a1057506001600160a01b038a1660009081526008602052604090205460ff165b15612a42576001600160a01b038b166000908152600560205260409020548903612a4257612a3f60018a614307565b98505b84158015612a4e575085155b15612a5857600196505b612a698b8b8b8a85158a8c8a612d1d565b60115460ff16158015612a795750805b15612b5a576010546011805460ff191660011790556012546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015612af8575060408051601f3d908101601f19168201909252612af59181019061443e565b60015b15612b4e5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b506011805460ff191690555b5050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260056020526040812080548391908390612be1908490614307565b90915550506001600160a01b03831660009081526005602052604081208054849290612c0e9084906142f4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c5a91815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260086020526040812054819060ff168015612ca557503360009081526009602052604090205460ff165b8015612cb957506001600160a01b03851632145b15612ccd5782612cc985826137cb565b9250505b6001600160a01b03851660009081526008602052604090205460ff1615612cfb57612cf8858461385a565b90505b935093915050565b600080600d54118015612d185750600d544210155b905090565b6001600160a01b03881660009081526005602052604081208054889290612d45908490614307565b90915550600090508515612f7a576001600160a01b03891660009081526008602052604090205460ff1680612d9257506001600160a01b03881660009081526008602052604090205460ff165b15612e05576001600160a01b03891660009081526008602052604081205460ff1615612dbf575087612dc2565b50885b6000612dcc6110c4565b90506000612710612ddd838c61446c565b612de79190614483565b9050612df381856142f4565b9350612e018c828585613972565b5050505b6001600160a01b03881660009081526008602052604081205460ff16908115612e315750600c54612e36565b50600b545b6000612710612e45838c61446c565b612e4f9190614483565b90508015612f7657612e6181856142f4565b6012549094506001600160a01b031615801590612ee95750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015612ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee79190614425565b115b15612f6957601254612f06908d906001600160a01b031683613a07565b601254604051633243c79160e01b8152600481018390526001600160a01b0390911690633243c79190602401600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b50505050612f76565b612f768c61dead83613a07565b5050505b841561323257888860196001600160a01b0382163b1115612fd7576040516001600160a01b03821681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de186557906020015b60405180910390a161322f565b60196001600160a01b0383163b1115613023576040516001600160a01b03831681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de18655790602001612fca565b6001600160a01b038082166000908152601560205260409020541615801561304b5750600089115b80156130695750806001600160a01b0316826001600160a01b031614155b801561308e57506001600160a01b03811660009081526007602052604090205460ff16155b156130f8576001600160a01b03828116600081815260176020908152604080832094861680845294825291829020805460ff1916600117905590514281527f09e08c6f7101ba4fa7ea28d5d997b087fdf9b8818b9859b40a1e6a28c6d2837d910160405180910390a35b6001600160a01b03808316600090815260156020526040902054161580156131205750600089115b801561313e5750806001600160a01b0316826001600160a01b031614155b1561322f576001600160a01b0380821660009081526017602090815260408083209386168352929052205460ff16801561318e57506001600160a01b038216600090815260166020526040902054155b1561322f576001600160a01b0381161561322f576001600160a01b03828116600081815260156020908152604080832080546001600160a01b0319908116968816968717909155858452601683528184208054600181018255908552938390209093018054909316841790925590514281529192917fa8c50a298b4200fd02e706cf001585af8f63488dbd1a4e0e676ea02770a2e0f6910160405180910390a35b50505b6001600160a01b03891660009081526007602052604081205460ff168061327157506001600160a01b03891660009081526007602052604090205460ff165b905085801561327e575080155b15613443576000612710600a548a613296919061446c565b6132a09190614483565b9050801561344157600060196001600160a01b038d163b11156132c45750896132c7565b508a5b60006132d16110c4565b90506132dd83866142f4565b94506132f58d6132ee600386614483565b8484613972565b6012546001600160a01b03161580159061337a5750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614425565b115b1561342a576012546133ad908e906001600160a01b0316600361339e87600261446c565b6133a89190614483565b613a07565b6012546001600160a01b0316633243c79160036133cb86600261446c565b6133d59190614483565b6040518263ffffffff1660e01b81526004016133f391815260200190565b600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b5050505061343e565b61343e8d61dead600361339e87600261446c565b50505b505b84801561344e575080155b5083801561345a575080155b15613711576001600160a01b038916600090815260136020526040812090613480612d03565b80156134b857507f0000000000000000000000000000000000000000000000000000000000000000600d546134b591906142f4565b42105b90508482600001541061351857848260000160008282546134d99190614307565b9091555060009050816134ed5760006134f7565b6134f7858c614307565b905061350381866142f4565b94506135128d61dead83613a07565b5061362b565b6000858b846000015461352b919061446c565b6135359190614483565b90508180156135445750600081115b1561357b57600061355e613558878e614307565b83611aca565b905061356a81876142f4565b95506135798e61dead83613a07565b505b82546135879087614307565b83600101600082825461359a9190614307565b909155505060008084556127107f0000000000000000000000000000000000000000000000000000000000000000846135d45760006135d6565b835b6135e0908f614307565b6135ea919061446c565b6135f49190614483565b9050801561362857600061360b613558888f614307565b905061361781886142f4565b96506136268f61dead83613a07565b505b50505b601254825460018401546001600160a01b039092169163e30443bc918e9161365391906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b5050835460018501546040517fa1834d8fa1841c73173644b37f823b4f45c2bc3da2343961c141f5559f0d1aa8945061370693508f9291906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a150505b6137208a8a6133a8858c614307565b806137bf57601460009054906101000a90046001600160a01b03166001600160a01b031663fe9ac4156040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377557600080fd5b505af1925050508015613786575060015b6137bf57604051600281527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b50505050505050505050565b6000806000806137da86611e25565b925092509250600080841180156137f15750600083115b1561380e5782613801858861446c565b61380b9190614483565b90505b61381881856142f4565b606261382584606461446c565b61382f9190614483565b61383a9060036142f4565b106138505761384c8783888787613a7b565b5094505b5050505092915050565b60008060008061386986611e25565b92509250925082811161391d5784613896876001600160a01b031660009081526005602052604090205490565b6138a09190614307565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139029190614425565b61390c908761446c565b6139169190614483565b9350613969565b6000808411801561392e5750600083115b156138505761393d8684614307565b613947858861446c565b6139519190614483565b905061395d84826142f4565b82101561385057600080fd5b50505092915050565b81600082156139ff5760005b6018548110156139fd576001600160a01b03808416600090815260156020526040812054909116908190036139b2575061dead5b84601883815481106139c6576139c66142c8565b9060005260206000200154886139dc919061446c565b6139e69190614483565b92506139f3888285613a07565b925060010161397e565b505b505050505050565b6001600160a01b03821660009081526005602052604081208054839290613a2f9084906142f4565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122db91815260200190565b6000806000876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190614425565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b689190614501565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc99190614501565b90506000806001600160a01b0316826001600160a01b03161415905060008a6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c499190614425565b90508115613dcd578015613dcd576000613c6b613c66898b61446c565b613e4a565b90506000613c7883613e4a565b905080821115613dca576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613d1257613cd48385614307565b613cde908961446c565b613ce990600861446c565b9150613cf683600861446c565b613d0185601161446c565b613d0b91906142f4565b9050613da8565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613d7957613d618385614307565b613d6b908961446c565b915082613d0185600361446c565b613d838385614307565b613d8d908961446c565b915082613d9b85600561446c565b613da591906142f4565b90505b613db28183614483565b98508815613dc757613dc489896142f4565b97505b50505b50505b6000613dd9898c614307565b905084600003613e0b578015613e06576103e8613df9613c668c8461446c565b613e039190614307565b96505b613e3b565b613e3889613e19878461446c565b613e239190614483565b89613e2e888e61446c565b6109569190614483565b96505b50505050509550959350505050565b60006003821115613ea55750806000613e64600283614483565b613e6f9060016142f4565b90505b8181101561110757905080600281613e8a8186614483565b613e9491906142f4565b613e9e9190614483565b9050613e72565b8115613eaf575060015b919050565b828054828255906000526020600020908101928215613eef579160200282015b82811115613eef578251825591602001919060010190613ed4565b50613efb929150613eff565b5090565b5b80821115613efb5760008155600101613f00565b6001600160a01b038116811461152357600080fd5b600060208284031215613f3b57600080fd5b8135611adb81613f14565b602081526000825180602084015260005b81811015613f745760208186018101516040868401015201613f57565b506000604082850101526040601f19601f83011684010191505092915050565b60008060408385031215613fa757600080fd5b8235613fb281613f14565b946020939093013593505050565b600060208284031215613fd257600080fd5b5035919050565b600080600060608486031215613fee57600080fd5b8335613ff981613f14565b9250602084013561400981613f14565b929592945050506040919091013590565b6000806040838503121561402d57600080fd5b823561403881613f14565b9150602083013561404881613f14565b809150509250929050565b60008083601f84011261406557600080fd5b50813567ffffffffffffffff81111561407d57600080fd5b6020830191508360208260051b850101111561409857600080fd5b9250929050565b801515811461152357600080fd5b8035613eaf8161409f565b6000806000604084860312156140cd57600080fd5b833567ffffffffffffffff8111156140e457600080fd5b6140f086828701614053565b90945092505060208401356141048161409f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561414e5761414e61410f565b604052919050565b600067ffffffffffffffff8211156141705761417061410f565b5060051b60200190565b6000806040838503121561418d57600080fd5b823567ffffffffffffffff8111156141a457600080fd5b8301601f810185136141b557600080fd5b80356141c86141c382614156565b614125565b8082825260208201915060208360051b8501019250878311156141ea57600080fd5b6020840193505b8284101561421557833561420481613f14565b8252602093840193909101906141f1565b945061422792505050602084016140ad565b90509250929050565b6000806040838503121561424357600080fd5b50508035926020909101359150565b6000806020838503121561426557600080fd5b823567ffffffffffffffff81111561427c57600080fd5b61428885828601614053565b90969095509350505050565b600181811c908216806142a857607f821691505b60208210810361110757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110be576110be6142de565b818103818111156110be576110be6142de565b6000604082018483526040602084015280845180835260608501915060208601925060005b818110156143665783516001600160a01b031683526020938401939092019160010161433f565b50909695505050505050565b60006020828403121561438457600080fd5b815167ffffffffffffffff81111561439b57600080fd5b8201601f810184136143ac57600080fd5b80516143ba6141c382614156565b8082825260208201915060208360051b8501019250868311156143dc57600080fd5b6020840193505b828410156143fe5783518252602093840193909101906143e3565b9695505050505050565b60006020828403121561441a57600080fd5b8151611adb8161409f565b60006020828403121561443757600080fd5b5051919050565b60008060006060848603121561445357600080fd5b5050815160208301516040909301519094929350919050565b80820281158282048414176110be576110be6142de565b6000826144a057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b0381168114613eaf57600080fd5b6000806000606084860312156144d157600080fd5b6144da846144a5565b92506144e8602085016144a5565b9150604084015163ffffffff8116811461410457600080fd5b60006020828403121561451357600080fd5b8151611adb81613f1456fea264697066735822122081a1ad374489de477b13e2f96db8216a51ff8c003acf0f8c91db6d64ba9d431c64736f6c634300081b0033608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610161565b61003c8133600019610042565b506101e2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915160009283929087169161009e9190610191565b6000604051808303816000865af19150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081801561010a57508051158061010a57508080602001905181019061010a91906101c0565b61015a5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640160405180910390fd5b5050505050565b60006020828403121561017357600080fd5b81516001600160a01b038116811461018a57600080fd5b9392505050565b6000825160005b818110156101b25760208186018101518583015201610198565b506000920191825250919050565b6000602082840312156101d257600080fd5b8151801515811461018a57600080fd5b603f806101f06000396000f3fe6080604052600080fdfea2646970667358221220bae21208190281d54f4a3cdf76e37e171cc0623a4b6204748b746f41c1a8d64264736f6c634300081b0033
Deployed Bytecode
0x6080604052600436106103bc5760003560e01c80635a1fe42f116101f2578063992db38f1161010d578063b5028e23116100a0578063dd62ed3e1161006f578063dd62ed3e14610c3c578063de0aad5314610c82578063f2fde38b14610c98578063fc0e74d114610cb857600080fd5b8063b5028e2314610b7e578063bfc3137e14610b9e578063c31c9c0714610bd2578063ccdbd42414610c0657600080fd5b8063a9059cbb116100dc578063a9059cbb14610af4578063ac0c850814610b14578063acb2ad6f14610b48578063b340364f14610b5e57600080fd5b8063992db38f14610a655780639ab4a44514610a7a5780639c1b8af514610aae578063a1bc910f14610ac457600080fd5b8063715018a61161018557806386b0e8051161015457806386b0e805146109ca5780638da5cb5b146109fe5780639145b1c414610a1c57806395d89b4114610a5057600080fd5b8063715018a6146109265780637ae2b5c71461093b578063847164851461095b578063850ea0da1461098f57600080fd5b80636386c1c7116101c15780636386c1c7146108475780636f17d61114610887578063700bb191146108d057806370a08231146108f057600080fd5b80635a1fe42f146107c15780635b1d8067146107e15780635c25c30e146107f75780635c9a05b81461081757600080fd5b80632e8474d5116102e25780634e6fd6c411610275578063538ba4f911610244578063538ba4f91461074c57806358877f611461076157806358c3dd2b146107815780635960e46d146107a157600080fd5b80634e6fd6c4146106bd5780634e71d92d146106d35780634f0e0ef3146106e85780635342acb41461071c57600080fd5b8063395a81e7116102b1578063395a81e7146106345780634437152a14610668578063474b46d8146106885780634b656b241461069d57600080fd5b80632e8474d5146105a2578063302fa653146105b7578063313ce567146105f2578063324cd3c91461061457600080fd5b806315bfa3c61161035a57806318d128551161032957806318d128551461052d578063214b20de1461054257806323b872dd146105625780632c1f52161461058257600080fd5b806315bfa3c6146104a557806316f0115b146104bb57806318160ddd146104f357806318a6bc321461050857600080fd5b806306fdde031161039657806306fdde0314610428578063095ea7b31461044a5780630b4575571461047a5780630cfe2f3f1461048f57600080fd5b806301339c21146103c8578063017df7f2146103df57806306b16e94146103ff57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ccd565b005b3480156103eb57600080fd5b506103dd6103fa366004613f29565b610d1f565b34801561040b57600080fd5b50610415600d5481565b6040519081526020015b60405180910390f35b34801561043457600080fd5b5061043d61101b565b60405161041f9190613f46565b34801561045657600080fd5b5061046a610465366004613f94565b6110ad565b604051901515815260200161041f565b34801561048657600080fd5b506104156110c4565b34801561049b57600080fd5b50610415600b5481565b3480156104b157600080fd5b50610415600f5481565b3480156104c757600080fd5b506014546104db906001600160a01b031681565b6040516001600160a01b03909116815260200161041f565b3480156104ff57600080fd5b50600454610415565b34801561051457600080fd5b506011546104db9061010090046001600160a01b031681565b34801561053957600080fd5b506103dd61110d565b34801561054e57600080fd5b506103dd61055d366004613fc0565b61111c565b34801561056e57600080fd5b5061046a61057d366004613fd9565b611129565b34801561058e57600080fd5b506012546104db906001600160a01b031681565b3480156105ae57600080fd5b5061046a600181565b3480156105c357600080fd5b5061046a6105d236600461401a565b601760209081526000928352604080842090915290825290205460ff1681565b3480156105fe57600080fd5b5060035460405160ff909116815260200161041f565b34801561062057600080fd5b506103dd61062f366004613fc0565b6111c0565b34801561064057600080fd5b506104db7f0000000000000000000000007aaaa5b10f97321345acd76945083141be1c563181565b34801561067457600080fd5b506103dd610683366004613f29565b611235565b34801561069457600080fd5b50601854610415565b3480156106a957600080fd5b506104156106b8366004613fc0565b6112ab565b3480156106c957600080fd5b506104db61dead81565b3480156106df57600080fd5b506103dd6114ae565b3480156106f457600080fd5b506104db7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b34801561072857600080fd5b5061046a610737366004613f29565b60076020526000908152604090205460ff1681565b34801561075857600080fd5b506104db600081565b34801561076d57600080fd5b506103dd61077c3660046140b8565b611526565b34801561078d57600080fd5b5061041561079c366004613fc0565b61159b565b3480156107ad57600080fd5b506103dd6107bc366004613fc0565b6115bc565b3480156107cd57600080fd5b506103dd6107dc36600461417a565b611649565b3480156107ed57600080fd5b50610415600e5481565b34801561080357600080fd5b506104db610812366004613f94565b6118e0565b34801561082357600080fd5b5061046a610832366004613f29565b60086020526000908152604090205460ff1681565b34801561085357600080fd5b50610867610862366004613f29565b611918565b60408051948552602085019390935291830152606082015260800161041f565b34801561089357600080fd5b506108bb6108a2366004613f29565b6013602052600090815260409020805460019091015482565b6040805192835260208301919091520161041f565b3480156108dc57600080fd5b506103dd6108eb366004613fc0565b6119e4565b3480156108fc57600080fd5b5061041561090b366004613f29565b6001600160a01b031660009081526005602052604090205490565b34801561093257600080fd5b506103dd611ab6565b34801561094757600080fd5b50610415610956366004614230565b611aca565b34801561096757600080fd5b506104db7f0000000000000000000000003e2ef19ae4211c8808305306e84de715c636a13781565b34801561099b57600080fd5b506109af6109aa366004613f94565b611ae2565b6040805193845260208401929092529082015260600161041f565b3480156109d657600080fd5b506104157f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b348015610a0a57600080fd5b506000546001600160a01b03166104db565b348015610a2857600080fd5b506104db7f0000000000000000000000007aaaa5b10f97321345acd76945083141be1c563181565b348015610a5c57600080fd5b5061043d611dbc565b348015610a7157600080fd5b506103dd611dcb565b348015610a8657600080fd5b506104db7f00000000000000000000000055d398326f99059ff775485246999027b319795581565b348015610aba57600080fd5b5061041560105481565b348015610ad057600080fd5b5061046a610adf366004613f29565b60096020526000908152604090205460ff1681565b348015610b0057600080fd5b5061046a610b0f366004613f94565b611e18565b348015610b2057600080fd5b506104157f000000000000000000000000000000000000000000000000000007dba8202e8081565b348015610b5457600080fd5b50610415600a5481565b348015610b6a57600080fd5b506109af610b79366004613f29565b611e25565b348015610b8a57600080fd5b506103dd610b99366004614252565b61208a565b348015610baa57600080fd5b506104157f000000000000000000000000000000000000000000000000000000000000271081565b348015610bde57600080fd5b506104db7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b348015610c1257600080fd5b506104db610c21366004613f29565b6015602052600090815260409020546001600160a01b031681565b348015610c4857600080fd5b50610415610c5736600461401a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c8e57600080fd5b50610415600c5481565b348015610ca457600080fd5b506103dd610cb3366004613f29565b6121ca565b348015610cc457600080fd5b506103dd612205565b610cd5612259565b600d5415610d195760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b60448201526064015b60405180910390fd5b42600d55565b610d27612259565b6012546001600160a01b031615610d8c5760405162461bcd60e51b815260206004820152602360248201527f6469766964656e64547261636b657220616c726561647920696e697469616c696044820152621e995960ea1b6064820152608401610d10565b601280546001600160a01b0319166001600160a01b03831690811790915560405163031e79db60e41b8152600481018290526331e79db090602401600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505060125460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505060125460405163031e79db60e41b8152600060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610e9c57600080fd5b505af1158015610eb0573d6000803e3d6000fd5b505060125460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015610efb57600080fd5b505af1158015610f0f573d6000803e3d6000fd5b505060125460405163031e79db60e41b81526001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e8116600483015290911692506331e79db09150602401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505060125460405163031e79db60e41b81526001600160a01b037f0000000000000000000000003e2ef19ae4211c8808305306e84de715c636a1378116600483015290911692506331e79db09150602401600060405180830381600087803b158015610ff957600080fd5b505af115801561100d573d6000803e3d6000fd5b50506207a120601055505050565b60606001805461102a90614294565b80601f016020809104026020016040519081016040528092919081815260200182805461105690614294565b80156110a35780601f10611078576101008083540402835291602001916110a3565b820191906000526020600020905b81548152906001019060200180831161108657829003601f168201915b5050505050905090565b60006110ba338484612286565b5060015b92915050565b60008060005b60185481101561110757601881815481106110e7576110e76142c8565b9060005260206000200154826110fd91906142f4565b91506001016110ca565b50919050565b611115612259565b6000600e55565b611124612259565b600f55565b60006111368484846122e8565b6001600160a01b0384166000908152600660209081526040808320338452909152902054600019146111b6576001600160a01b0384166000908152600660209081526040808320338452909152902054611191908390614307565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b5060019392505050565b6111c8612259565b4281116112305760405162461bcd60e51b815260206004820152603060248201527f6e65772076616c7565206d7573742062652067726561746572207468616e206360448201526f0757272656e742074696d657374616d760841b6064820152608401610d10565b600d55565b61123d612259565b6014546001600160a01b0316156112895760405162461bcd60e51b815260206004820152601060248201526f1c1bdbdb08185b1c9958591e481cd95d60821b6044820152606401610d10565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600480825260a082019092526000918291906020820160808036833701905050905030816000815181106112e5576112e56142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007aaaa5b10f97321345acd76945083141be1c563181600181518110611339576113396142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8160028151811061138d5761138d6142c8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b3197955816003815181106113e1576113e16142c8565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e9091169063d06ca61f9061143f908690859060040161431a565b600060405180830381865afa92505050801561147d57506040513d6000823e601f3d908101601f1916820160405261147a9190810190614372565b60015b61148a5750600092915050565b8060038151811061149d5761149d6142c8565b602002602001015192505050919050565b60125460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614408565b50565b61152e612259565b60005b82811015611595578160076000868685818110611550576115506142c8565b90506020020160208101906115659190613f29565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611531565b50505050565b601881815481106115ab57600080fd5b600091825260209091200154905081565b6115c4612259565b620493e081101580156115da5750621e84808111155b6116445760405162461bcd60e51b815260206004820152603560248201527f67617320666f722070726f63657373696e67206d7573742062652062657477656044820152740656e2033303030303020616e64203230303030303605c1b6064820152608401610d10565b601055565b611651612259565b6000805b83518110156115955760136000858381518110611674576116746142c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209150821561176b577f0000000000000000000000003e2ef19ae4211c8808305306e84de715c636a1376001600160a01b03166370a082318583815181106116e5576116e56142c8565b60200260200101516040518263ffffffff1660e01b815260040161171891906001600160a01b0391909116815260200190565b602060405180830381865afa158015611735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117599190614425565b6117649060016142f4565b8255611831565b7f0000000000000000000000003e2ef19ae4211c8808305306e84de715c636a1376001600160a01b03166370a082318583815181106117ac576117ac6142c8565b60200260200101516040518263ffffffff1660e01b81526004016117df91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156117fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118209190614425565b61182b9060016142f4565b60018301555b60125484516001600160a01b039091169063e30443bc9086908490811061185a5761185a6142c8565b60200260200101518460000154856001015461187691906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156118bc57600080fd5b505af11580156118d0573d6000803e3d6000fd5b5050600190920191506116559050565b601660205281600052604060002081815481106118fc57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6040516370a0823160e01b81526001600160a01b0382811660048301526000918291829182917f0000000000000000000000003e2ef19ae4211c8808305306e84de715c636a13716906370a0823190602401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190614425565b6001600160a01b038616600090815260136020526040902060018101549054919550925090506119db81836142f4565b92509193509193565b6012546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b919061443e565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b611abe612259565b611ac86000612b67565b565b6000818310611ad95781611adb565b825b9392505050565b601454600090819081906001600160a01b03163314611b435760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920706f6f6c2063616e2063616c6c20746869732066756e6374696f6e6044820152606401610d10565b61dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba548490611b7d82600261446c565b1115611b9457600080600093509350935050611db5565b60006064611ba38360c461446c565b611bad9190614483565b905060006064611bbe84600261446c565b611bc89190614483565b905060006064611bd985600161446c565b611be39190614483565b9050611bf261dead8a85612bb7565b506012546001600160a01b031615801590611c785750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c769190614425565b115b15611cfb57601254611c979061dead906001600160a01b031684612bb7565b50601254604051633243c79160e01b8152600481018490526001600160a01b0390911690633243c79190602401600060405180830381600087803b158015611cde57600080fd5b505af1158015611cf2573d6000803e3d6000fd5b50505050611d0a565b611d0861dead8084612bb7565b505b600080611d156110c4565b90508a838215611da65760005b601854811015611da4576001600160a01b0380841660009081526015602052604081205490911690819003611d56575061dead5b8460188381548110611d6a57611d6a6142c8565b906000526020600020015484611d80919061446c565b611d8a9190614483565b9550611d9961dead8288612bb7565b509250600101611d22565b505b50959850939650919450505050505b9250925092565b60606002805461102a90614294565b611dd3612259565b600e5415611e125760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401610d10565b42600e55565b60006110ba3384846122e8565b600080600080849050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9391906144bc565b506001600160701b031691506001600160701b031691506000306001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f189190614501565b6001600160a01b031614611f8d57836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f889190614501565b611fef565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190614501565b9050306001600160a01b038216101561200d57829650819550612014565b8196508295505b6040516370a0823160e01b81526001600160a01b0389811660048301528216906370a0823190602401602060405180830381865afa15801561205a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207e9190614425565b96989597505050505050565b612092612259565b8067ffffffffffffffff8111156120ab576120ab61410f565b6040519080825280602002602001820160405280156120d4578160200160208202803683370190505b5080516120e991601891602090910190613eb4565b5060005b8181101561213557828282818110612107576121076142c8565b9050602002013560188281548110612121576121216142c8565b6000918252602090912001556001016120ed565b50600a54600c54600b5461214b90612710614307565b6121559190614307565b61215f9190614307565b6121676110c4565b11156121c65760405162461bcd60e51b815260206004820152602860248201527f696e7669746f72207265776172642070657263656e74206c697374206973206e6044820152671bdd081d985b1a5960c21b6064820152608401610d10565b5050565b6121d2612259565b6001600160a01b0381166121fc57604051631e4fbdf760e01b815260006004820152602401610d10565b61152381612b67565b61220d612259565b6000600d54116122525760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c9039b43aba3237bbb760811b6044820152606401610d10565b6000600d55565b6000546001600160a01b03163314611ac85760405163118cdaa760e01b8152336004820152602401610d10565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60115460ff16156122fe57611595838383612bb7565b6001600160a01b0383166000908152600560205260409020548181101561235a5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610d10565b6001600160a01b03831661dead14801561238d57506001600160a01b03841660009081526007602052604090205460ff16155b801561239857503332145b156125e5576014546001600160a01b03166123e45760405162461bcd60e51b815260206004820152600c60248201526b1c1bdbdb081b9bdd081cd95d60a21b6044820152606401610d10565b7f0000000000000000000000000000000000000000000000000de0b6b3a76400008211156124485760405162461bcd60e51b8152602060048201526011602482015270195e18d95959081b585e08185b5bdd5b9d607a1b6044820152606401610d10565b601460009054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614408565b156124d8576124d18461dead84612bb7565b5050505050565b6014546040516352b5677b60e11b81526001600160a01b038681166004830152602482018590529091169063a56acef690604401600060405180830381600087803b15801561252657600080fd5b505af115801561253a573d6000803e3d6000fd5b50505050601460009054906101000a90046001600160a01b03166001600160a01b031663e94eec966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561258e57600080fd5b505af192505050801561259f575060015b6125d857604051600181527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b6124d18461dead84612bb7565b60008060008060006125f8898989612c6c565b9150915060008211801561262557506001600160a01b03891660009081526007602052604090205460ff16155b1561286b576001600160a01b03891660009081526013602052604090206001935061264e612d03565b6126dc578281600001600082825461266691906142f4565b909155505080547f713fc98c9fc53e66529bdd40e935eefc27a2d627f8ae82dac3d128b5dccecd5c908b9061269c908690614307565b60018401548454604080516001600160a01b03959095168552602085019390935283830182905260608401526080830152519081900360a00190a1612768565b828160010160008282546126f091906142f4565b9091555050805460018201547f713fc98c9fc53e66529bdd40e935eefc27a2d627f8ae82dac3d128b5dccecd5c918c9161272b908790614307565b84546001860154604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a00160405180910390a15b6000612773896112ab565b90506000600f541180156127895750600f548110155b1561281957601254825460018401546001600160a01b039092169163e30443bc918e916127b691906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b50505050612868565b8a6001600160a01b03167f2daa35b4ade993bf8c92c47c739178641b6b98a6cf0609273b16395d5e4623b682600f5460405161285f929190918252602082015260400190565b60405180910390a25b50505b801561287657600193505b6001600160a01b03891660009081526007602052604081205460ff16806128b557506001600160a01b03891660009081526007602052604090205460ff165b6001600160a01b038b166000908152600860205260408120549192509060ff16806128f857506001600160a01b038a1660009081526008602052604090205460ff165b9050612902612d03565b6129805781158015612912575080155b156129805760196001600160a01b038b163b11156129805760405162461bcd60e51b815260206004820152602560248201527f63616e277420616464206f74686572206c70206265666f726520737461727420604482015264747261646560d81b6064820152608401610d10565b80801561298b575081155b15612a5857612998612d03565b6129ea576000600e541180156129ab5750845b6129ea5760405162461bcd60e51b815260206004820152601060248201526f1b1c0818d85b9d08189948185919195960821b6044820152606401610d10565b84158015612a1057506001600160a01b038a1660009081526008602052604090205460ff165b15612a42576001600160a01b038b166000908152600560205260409020548903612a4257612a3f60018a614307565b98505b84158015612a4e575085155b15612a5857600196505b612a698b8b8b8a85158a8c8a612d1d565b60115460ff16158015612a795750805b15612b5a576010546011805460ff191660011790556012546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015612af8575060408051601f3d908101601f19168201909252612af59181019061443e565b60015b15612b4e5760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b506011805460ff191690555b5050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260056020526040812080548391908390612be1908490614307565b90915550506001600160a01b03831660009081526005602052604081208054849290612c0e9084906142f4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c5a91815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260086020526040812054819060ff168015612ca557503360009081526009602052604090205460ff165b8015612cb957506001600160a01b03851632145b15612ccd5782612cc985826137cb565b9250505b6001600160a01b03851660009081526008602052604090205460ff1615612cfb57612cf8858461385a565b90505b935093915050565b600080600d54118015612d185750600d544210155b905090565b6001600160a01b03881660009081526005602052604081208054889290612d45908490614307565b90915550600090508515612f7a576001600160a01b03891660009081526008602052604090205460ff1680612d9257506001600160a01b03881660009081526008602052604090205460ff165b15612e05576001600160a01b03891660009081526008602052604081205460ff1615612dbf575087612dc2565b50885b6000612dcc6110c4565b90506000612710612ddd838c61446c565b612de79190614483565b9050612df381856142f4565b9350612e018c828585613972565b5050505b6001600160a01b03881660009081526008602052604081205460ff16908115612e315750600c54612e36565b50600b545b6000612710612e45838c61446c565b612e4f9190614483565b90508015612f7657612e6181856142f4565b6012549094506001600160a01b031615801590612ee95750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015612ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee79190614425565b115b15612f6957601254612f06908d906001600160a01b031683613a07565b601254604051633243c79160e01b8152600481018390526001600160a01b0390911690633243c79190602401600060405180830381600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b50505050612f76565b612f768c61dead83613a07565b5050505b841561323257888860196001600160a01b0382163b1115612fd7576040516001600160a01b03821681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de186557906020015b60405180910390a161322f565b60196001600160a01b0383163b1115613023576040516001600160a01b03831681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de18655790602001612fca565b6001600160a01b038082166000908152601560205260409020541615801561304b5750600089115b80156130695750806001600160a01b0316826001600160a01b031614155b801561308e57506001600160a01b03811660009081526007602052604090205460ff16155b156130f8576001600160a01b03828116600081815260176020908152604080832094861680845294825291829020805460ff1916600117905590514281527f09e08c6f7101ba4fa7ea28d5d997b087fdf9b8818b9859b40a1e6a28c6d2837d910160405180910390a35b6001600160a01b03808316600090815260156020526040902054161580156131205750600089115b801561313e5750806001600160a01b0316826001600160a01b031614155b1561322f576001600160a01b0380821660009081526017602090815260408083209386168352929052205460ff16801561318e57506001600160a01b038216600090815260166020526040902054155b1561322f576001600160a01b0381161561322f576001600160a01b03828116600081815260156020908152604080832080546001600160a01b0319908116968816968717909155858452601683528184208054600181018255908552938390209093018054909316841790925590514281529192917fa8c50a298b4200fd02e706cf001585af8f63488dbd1a4e0e676ea02770a2e0f6910160405180910390a35b50505b6001600160a01b03891660009081526007602052604081205460ff168061327157506001600160a01b03891660009081526007602052604090205460ff165b905085801561327e575080155b15613443576000612710600a548a613296919061446c565b6132a09190614483565b9050801561344157600060196001600160a01b038d163b11156132c45750896132c7565b508a5b60006132d16110c4565b90506132dd83866142f4565b94506132f58d6132ee600386614483565b8484613972565b6012546001600160a01b03161580159061337a5750601254604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015613354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133789190614425565b115b1561342a576012546133ad908e906001600160a01b0316600361339e87600261446c565b6133a89190614483565b613a07565b6012546001600160a01b0316633243c79160036133cb86600261446c565b6133d59190614483565b6040518263ffffffff1660e01b81526004016133f391815260200190565b600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b5050505061343e565b61343e8d61dead600361339e87600261446c565b50505b505b84801561344e575080155b5083801561345a575080155b15613711576001600160a01b038916600090815260136020526040812090613480612d03565b80156134b857507f000000000000000000000000000000000000000000000000000007dba8202e80600d546134b591906142f4565b42105b90508482600001541061351857848260000160008282546134d99190614307565b9091555060009050816134ed5760006134f7565b6134f7858c614307565b905061350381866142f4565b94506135128d61dead83613a07565b5061362b565b6000858b846000015461352b919061446c565b6135359190614483565b90508180156135445750600081115b1561357b57600061355e613558878e614307565b83611aca565b905061356a81876142f4565b95506135798e61dead83613a07565b505b82546135879087614307565b83600101600082825461359a9190614307565b909155505060008084556127107f0000000000000000000000000000000000000000000000000000000000002710846135d45760006135d6565b835b6135e0908f614307565b6135ea919061446c565b6135f49190614483565b9050801561362857600061360b613558888f614307565b905061361781886142f4565b96506136268f61dead83613a07565b505b50505b601254825460018401546001600160a01b039092169163e30443bc918e9161365391906142f4565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561369957600080fd5b505af11580156136ad573d6000803e3d6000fd5b5050835460018501546040517fa1834d8fa1841c73173644b37f823b4f45c2bc3da2343961c141f5559f0d1aa8945061370693508f9291906001600160a01b039390931683526020830191909152604082015260600190565b60405180910390a150505b6137208a8a6133a8858c614307565b806137bf57601460009054906101000a90046001600160a01b03166001600160a01b031663fe9ac4156040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377557600080fd5b505af1925050508015613786575060015b6137bf57604051600281527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b50505050505050505050565b6000806000806137da86611e25565b925092509250600080841180156137f15750600083115b1561380e5782613801858861446c565b61380b9190614483565b90505b61381881856142f4565b606261382584606461446c565b61382f9190614483565b61383a9060036142f4565b106138505761384c8783888787613a7b565b5094505b5050505092915050565b60008060008061386986611e25565b92509250925082811161391d5784613896876001600160a01b031660009081526005602052604090205490565b6138a09190614307565b866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139029190614425565b61390c908761446c565b6139169190614483565b9350613969565b6000808411801561392e5750600083115b156138505761393d8684614307565b613947858861446c565b6139519190614483565b905061395d84826142f4565b82101561385057600080fd5b50505092915050565b81600082156139ff5760005b6018548110156139fd576001600160a01b03808416600090815260156020526040812054909116908190036139b2575061dead5b84601883815481106139c6576139c66142c8565b9060005260206000200154886139dc919061446c565b6139e69190614483565b92506139f3888285613a07565b925060010161397e565b505b505050505050565b6001600160a01b03821660009081526005602052604081208054839290613a2f9084906142f4565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122db91815260200190565b6000806000876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190614425565b905060007f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b689190614501565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc99190614501565b90506000806001600160a01b0316826001600160a01b03161415905060008a6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c499190614425565b90508115613dcd578015613dcd576000613c6b613c66898b61446c565b613e4a565b90506000613c7883613e4a565b905080821115613dca576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601613d1257613cd48385614307565b613cde908961446c565b613ce990600861446c565b9150613cf683600861446c565b613d0185601161446c565b613d0b91906142f4565b9050613da8565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031601613d7957613d618385614307565b613d6b908961446c565b915082613d0185600361446c565b613d838385614307565b613d8d908961446c565b915082613d9b85600561446c565b613da591906142f4565b90505b613db28183614483565b98508815613dc757613dc489896142f4565b97505b50505b50505b6000613dd9898c614307565b905084600003613e0b578015613e06576103e8613df9613c668c8461446c565b613e039190614307565b96505b613e3b565b613e3889613e19878461446c565b613e239190614483565b89613e2e888e61446c565b6109569190614483565b96505b50505050509550959350505050565b60006003821115613ea55750806000613e64600283614483565b613e6f9060016142f4565b90505b8181101561110757905080600281613e8a8186614483565b613e9491906142f4565b613e9e9190614483565b9050613e72565b8115613eaf575060015b919050565b828054828255906000526020600020908101928215613eef579160200282015b82811115613eef578251825591602001919060010190613ed4565b50613efb929150613eff565b5090565b5b80821115613efb5760008155600101613f00565b6001600160a01b038116811461152357600080fd5b600060208284031215613f3b57600080fd5b8135611adb81613f14565b602081526000825180602084015260005b81811015613f745760208186018101516040868401015201613f57565b506000604082850101526040601f19601f83011684010191505092915050565b60008060408385031215613fa757600080fd5b8235613fb281613f14565b946020939093013593505050565b600060208284031215613fd257600080fd5b5035919050565b600080600060608486031215613fee57600080fd5b8335613ff981613f14565b9250602084013561400981613f14565b929592945050506040919091013590565b6000806040838503121561402d57600080fd5b823561403881613f14565b9150602083013561404881613f14565b809150509250929050565b60008083601f84011261406557600080fd5b50813567ffffffffffffffff81111561407d57600080fd5b6020830191508360208260051b850101111561409857600080fd5b9250929050565b801515811461152357600080fd5b8035613eaf8161409f565b6000806000604084860312156140cd57600080fd5b833567ffffffffffffffff8111156140e457600080fd5b6140f086828701614053565b90945092505060208401356141048161409f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561414e5761414e61410f565b604052919050565b600067ffffffffffffffff8211156141705761417061410f565b5060051b60200190565b6000806040838503121561418d57600080fd5b823567ffffffffffffffff8111156141a457600080fd5b8301601f810185136141b557600080fd5b80356141c86141c382614156565b614125565b8082825260208201915060208360051b8501019250878311156141ea57600080fd5b6020840193505b8284101561421557833561420481613f14565b8252602093840193909101906141f1565b945061422792505050602084016140ad565b90509250929050565b6000806040838503121561424357600080fd5b50508035926020909101359150565b6000806020838503121561426557600080fd5b823567ffffffffffffffff81111561427c57600080fd5b61428885828601614053565b90969095509350505050565b600181811c908216806142a857607f821691505b60208210810361110757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110be576110be6142de565b818103818111156110be576110be6142de565b6000604082018483526040602084015280845180835260608501915060208601925060005b818110156143665783516001600160a01b031683526020938401939092019160010161433f565b50909695505050505050565b60006020828403121561438457600080fd5b815167ffffffffffffffff81111561439b57600080fd5b8201601f810184136143ac57600080fd5b80516143ba6141c382614156565b8082825260208201915060208360051b8501019250868311156143dc57600080fd5b6020840193505b828410156143fe5783518252602093840193909101906143e3565b9695505050505050565b60006020828403121561441a57600080fd5b8151611adb8161409f565b60006020828403121561443757600080fd5b5051919050565b60008060006060848603121561445357600080fd5b5050815160208301516040909301519094929350919050565b80820281158282048414176110be576110be6142de565b6000826144a057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b0381168114613eaf57600080fd5b6000806000606084860312156144d157600080fd5b6144da846144a5565b92506144e8602085016144a5565b9150604084015163ffffffff8116811461410457600080fd5b60006020828403121561451357600080fd5b8151611adb81613f1456fea264697066735822122081a1ad374489de477b13e2f96db8216a51ff8c003acf0f8c91db6d64ba9d431c64736f6c634300081b0033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)