Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- NerdTest
- Optimization enabled
- true
- Compiler version
- v0.8.13+commit.abaa5c0e
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2022-04-05T23:47:00.298323Z
Contract source code
//SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; library SafeMath { function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } } interface IBEP20 { function approve(address spender, uint256 amount) external returns (bool); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function name() external view returns (string memory); function getOwner() external view returns (address); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { function WETH() external pure returns (address); function factory() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); } abstract contract Ownable { address public owner; constructor(address owner_) { owner = owner_; } modifier onlyOwner() { require(isOwner(msg.sender), "Ownership required."); _; } function isOwner(address account) public view returns (bool) { return account == owner; } function transferOwnership(address payable adr) public onlyOwner { address oldOwner = owner; owner = adr; emit OwnershipTransferred(oldOwner, owner); } function renouceOwnership() public onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } event OwnershipTransferred(address from, address to); } interface IDividendDistributor { function setShare(address shareholder, uint256 amount) external; function process(uint256 gas) external; function claimDividend() external; function deposit() external payable; function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; IBEP20 CRO = IBEP20(0x4fea4C520f9c4a02993d64994280C24790444576); address WCRO = 0x4fea4C520f9c4a02993d64994280C24790444576; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IDEXRouter router; mapping (address => Share) public shares; mapping (address => uint256) shareholderIndexes; uint256 public totalShares; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; address[] shareholderList; mapping (address => uint256) shareholderClaims; uint256 public minPeriod = 1 hours; // min 1 hour delay uint256 public minDistribution = 1 * (10 ** 18); // 1 croReward minimum auto send uint256 public totalDividends; uint256 public totalDistributed; uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x085d8C985C73Fbb425398209d864Addd062fF3c1); // TestNet // : IDEXRouter(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3); // Testnet _token = msg.sender; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 balanceBefore = CRO.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = WCRO; path[1] = address(CRO); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = CRO.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholderList.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholderList[currentIndex])){ distributeDividend(shareholderList[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); CRO.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external override { distributeDividend(msg.sender); } function removeShareholder(address shareholder) internal { shareholderList[shareholderIndexes[shareholder]] = shareholderList[shareholderList.length-1]; shareholderIndexes[shareholderList[shareholderList.length-1]] = shareholderIndexes[shareholder]; shareholderList.pop(); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholderList.length; shareholderList.push(shareholder); } } contract NerdTest is IBEP20, Ownable { using SafeMath for uint256; string constant _name = "NerdTest"; string constant _symbol = "NerdTest"; uint8 constant _decimals = 9; uint256 _totalSupply = 10 ** 9 * (10 ** _decimals); uint256 private _liquidityFee = 4; uint256 private _reflectionFee = 4; uint256 private _marketingFee = 4; uint256 private _maxWallet = _totalSupply / 20; address public marketingFeeReceiver = 0x000000000000000000000000000000000000dEaD; address routerAddress = 0x085d8C985C73Fbb425398209d864Addd062fF3c1; // heraswap testnet address croReward = 0x4fea4C520f9c4a02993d64994280C24790444576; // Testnet address WBNB = 0x4fea4C520f9c4a02993d64994280C24790444576; // Testnet address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isMaxWalletExempt; mapping (address => bool) isFeeExempt; mapping (address => bool) isDividendExempt; uint256 private _feeDenominator = 100; uint256 public _totalFee = _liquidityFee + _reflectionFee + _marketingFee; address public autoLiquidityReceiver; address[] public pairs; IDEXRouter public router; address pancakeV2BNBPair; DividendDistributor distributor; uint256 distributorGas = 600000; uint256 public launchedAt; bool public liquifyEnabled = true; bool public swapEnabled = true; bool inSwap; uint256 public swapThreshold = _totalSupply / 1000; // 0.1% modifier swapping() { inSwap = true; _; inSwap = false; } event SwapBackSuccess(uint256 amount); event Launched(uint256 blockNumber, uint256 timestamp); event SwapBackFailed(string message); event AutoLiquify(uint256 amountBNB, uint256 amountBOG); event MarketTransfer(bool status); constructor () Ownable(msg.sender) { // router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); // Mainnet router = IDEXRouter(0x085d8C985C73Fbb425398209d864Addd062fF3c1); // Testnet autoLiquidityReceiver = DEAD; pancakeV2BNBPair = IDEXFactory(router.factory()).createPair(WBNB, address(this)); _allowances[address(this)][address(router)] = ~uint256(0); pairs.push(pancakeV2BNBPair); distributor = new DividendDistributor(address(router)); address owner_ = msg.sender; isDividendExempt[DEAD] = true; isMaxWalletExempt[DEAD] = true; isMaxWalletExempt[pancakeV2BNBPair] = true; isDividendExempt[pancakeV2BNBPair] = true; isMaxWalletExempt[address(this)] = true; isFeeExempt[address(this)] = true; isDividendExempt[address(this)] = true; isFeeExempt[owner_] = true; isMaxWalletExempt[owner_] = true; _balances[owner_] = _totalSupply; emit Transfer(address(0), owner_, _totalSupply); } receive() external payable { } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function decimals() external pure override returns (uint8) { return _decimals; } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function getOwner() external view override returns (address) { return owner; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function totalSupply() external view override returns (uint256) { return _totalSupply; } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != ~uint256(0)){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { uint256 amountReceived; if(!launched() && recipient == pancakeV2BNBPair){ require(_balances[sender] > 0); launch(); } if(!isMaxWalletExempt[recipient]){ require(_balances[recipient] + amount <= _maxWallet, "Wallet cannot hold more than 1%"); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); if((recipient == pancakeV2BNBPair || recipient == address(router)) || (sender == pancakeV2BNBPair || sender == address(router) ) ) { // trade transaction amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, _getTotalFee(), amount) : amount; } else{ // basic transfer _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } if(shouldSwapBack()){ swapBack(); } _balances[recipient] = _balances[recipient].add(amountReceived); if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, ~uint256(0)); } function _getTotalFee() private view returns (uint fee){ return (_liquidityFee + _reflectionFee + _marketingFee ); } function getTotalFees() public view returns( uint256 liquidityFee, uint256 reflectionFee, uint256 marketingFee, uint256 feeDenominator){ return (_liquidityFee, _reflectionFee, _marketingFee, _feeDenominator ); } function getcroReward() public view returns (address) { return croReward; } function shouldTakeFee(address sender, address recipient) internal view returns (bool) { if (isFeeExempt[sender] || isFeeExempt[recipient] || !launched()) return false; address[] memory liqPairs = pairs; for (uint256 i = 0; i < liqPairs.length; i++) { if (sender == liqPairs[i] || recipient == liqPairs[i]) return true; } // normal transfer return false; } function takeFee(address sender, uint256 fee, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(fee).div(_feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function setIsMaxWalletExempt(address holder, bool exempt) public onlyOwner() { isMaxWalletExempt[holder] = exempt; } function shouldSwapBack() internal view returns (bool) { return msg.sender != pancakeV2BNBPair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function launch() internal { launchedAt = block.number; emit Launched(block.number, block.timestamp); } function setIsDividendExempt(address holder, bool exempt) public onlyOwner() { require(holder != address(this) && holder != pancakeV2BNBPair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } function launched() internal view returns (bool) { return launchedAt != 0; } function setIsFeeExempt(address holder, bool exempt) public onlyOwner() { isFeeExempt[holder] = exempt; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) public onlyOwner() { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } function setDistributorSettings(uint256 gas) public onlyOwner() { require(gas <= 1000000); distributorGas = gas; } function setTotalFees(uint256 liquidityFee, uint256 reflectionFee, uint256 marketingFee, uint256 feeDenominator ) public onlyOwner() { _liquidityFee = liquidityFee; _reflectionFee = reflectionFee; _marketingFee = marketingFee; _totalFee = liquidityFee.add(_reflectionFee).add(_marketingFee); _feeDenominator = feeDenominator; } function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) public onlyOwner() { autoLiquidityReceiver = _autoLiquidityReceiver; marketingFeeReceiver = _marketingFeeReceiver; } function setSwapBackSettings(bool _enabled, uint256 _amount) public onlyOwner() { swapEnabled = _enabled; swapThreshold = _amount; } function manualContractSwap() public onlyOwner{ swapBack(); } function setLiquifyEnabled(bool _enabled) public onlyOwner() { liquifyEnabled = _enabled; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function addPair(address pair) public onlyOwner() { pairs.push(pair); } function claimDividend() external { distributor.claimDividend(); } function clearStuckBNB() external { payable(marketingFeeReceiver).transfer(address(this).balance); } function setMaxWalletPercentage(uint256 percent) public onlyOwner() { _maxWallet = (_totalSupply / 100) * percent; } function setLaunchedAt(uint256 launched_) public onlyOwner() { launchedAt = launched_; } function removeLastPair() public onlyOwner() { pairs.pop(); } function swapBack() internal swapping { uint256 swapLiquidityFee = liquifyEnabled ? _liquidityFee : 0; uint256 amountToLiquify = swapThreshold.mul(swapLiquidityFee).div(_totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WBNB; uint256 balanceBefore = address(this).balance; try router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ) { uint256 amountBNB = address(this).balance.sub(balanceBefore); uint256 totalBNBFee = _totalFee.sub(swapLiquidityFee.div(2)); uint256 amountBNBLiquidity = amountBNB.mul(swapLiquidityFee).div(totalBNBFee).div(2); uint256 amountBNBReflection = amountBNB.mul(_reflectionFee).div(totalBNBFee); uint256 amountBNBMarketing = amountBNB.mul(_marketingFee).div(totalBNBFee); try distributor.deposit{value: amountBNBReflection}() {} catch {} (bool marketSuccess, ) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}(""); emit MarketTransfer(marketSuccess); if(amountToLiquify > 0){ try router.addLiquidityETH{ value: amountBNBLiquidity }( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ) { emit AutoLiquify(amountToLiquify, amountBNBLiquidity); } catch { emit AutoLiquify(0, 0); } } emit SwapBackSuccess(amountToSwap); } catch Error(string memory e) { emit SwapBackFailed(string(abi.encodePacked("SwapBack failed with error ", e))); } catch { emit SwapBackFailed("SwapBack failed without an error message from pancakeSwap"); } } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountBNB","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Launched","inputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"MarketTransfer","inputs":[{"type":"bool","name":"status","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"from","internalType":"address","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"SwapBackFailed","inputs":[{"type":"string","name":"message","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"SwapBackSuccess","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addPair","inputs":[{"type":"address","name":"pair","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimDividend","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBNB","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"liquidityFee","internalType":"uint256"},{"type":"uint256","name":"reflectionFee","internalType":"uint256"},{"type":"uint256","name":"marketingFee","internalType":"uint256"},{"type":"uint256","name":"feeDenominator","internalType":"uint256"}],"name":"getTotalFees","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getcroReward","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"launchedAt","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"liquifyEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manualContractSwap","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pairs","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeLastPair","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renouceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsMaxWalletExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLaunchedAt","inputs":[{"type":"uint256","name":"launched_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLiquifyEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletPercentage","inputs":[{"type":"uint256","name":"percent","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTotalFees","inputs":[{"type":"uint256","name":"liquidityFee","internalType":"uint256"},{"type":"uint256","name":"reflectionFee","internalType":"uint256"},{"type":"uint256","name":"marketingFee","internalType":"uint256"},{"type":"uint256","name":"feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x6080604052620000126009600a62000547565b6200002290633b9aca006200055f565b6001556004600255600460035560048055601460015462000044919062000581565b600555600680546001600160a01b031990811661dead90811790925560078054821673085d8c985c73fbb425398209d864addd062ff3c1179055600880548216734fea4c520f9c4a02993d64994280c247904445769081179091556009805483169091179055600a80548216909217909155600b805490911690556064601155600454600354600254620000d99190620005a4565b620000e59190620005a4565b601255620927c0601855601a805461ffff191661010117905560015462000110906103e89062000581565b601b553480156200012057600080fd5b50600080546001600160a01b0319908116331790915560158054821673085d8c985c73fbb425398209d864addd062ff3c1908117909155600a54601380549093166001600160a01b0391909116179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d39190620005bf565b6009546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b9190620005bf565b601680546001600160a01b039283166001600160a01b0319918216178255306000908152600d6020908152604080832060158054881685529252808320600019905593546014805460018101825593527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec909201805490931691851691909117909155549051911690620002df9062000424565b6001600160a01b039091168152602001604051809103906000f0801580156200030c573d6000803e3d6000fd5b50601780546001600160a01b0319166001600160a01b03928316179055600a805482166000908152601060208181526040808420805460ff199081166001908117909255955487168552600e80845282862080548816831790556016805489168752838720805489168417905554909716855283835281852080548716821790553085528683528185208054871682179055600f80845282862080548816831790559383528185208054871682179055338086529383528185208054871682179055958252808420805490951686179094559354600c855283832081905592519283529283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620005ea565b61101280620029f083390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004895781600019048211156200046d576200046d62000432565b808516156200047b57918102915b93841c93908002906200044d565b509250929050565b600082620004a25750600162000541565b81620004b15750600062000541565b8160018114620004ca5760028114620004d557620004f5565b600191505062000541565b60ff841115620004e957620004e962000432565b50506001821b62000541565b5060208310610133831016604e8410600b84101617156200051a575081810a62000541565b62000526838362000448565b80600019048211156200053d576200053d62000432565b0290505b92915050565b60006200055860ff84168362000491565b9392505050565b60008160001904831182151516156200057c576200057c62000432565b500290565b6000826200059f57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620005ba57620005ba62000432565b500190565b600060208284031215620005d257600080fd5b81516001600160a01b03811681146200055857600080fd5b6123f680620005fa6000396000f3fe60806040526004361061025f5760003560e01c80637a845ece11610144578063c2b7bbb6116100b6578063e96fada21161007a578063e96fada214610736578063ed5792d714610756578063f0fc6bca14610770578063f2fde38b14610785578063f708a64f146107a5578063f887ea40146107c557600080fd5b8063c2b7bbb614610670578063ca33e64c14610690578063da1cdbe4146106b0578063dd62ed3e146106d0578063df20fd491461071657600080fd5b80639d1944f5116101085780639d1944f5146105ba578063a4b45c00146105da578063a9059cbb146105fa578063b91ac7881461061a578063bf56b3711461063a578063c04a78ad1461065057600080fd5b80637a845ece14610547578063893d20e8146105675780638da5cb5b146105855780638edbbee3146105a557806395d89b41146102ab57600080fd5b80632f54bf6e116101dd578063588dcc83116101a1578063588dcc8314610452578063626e1ae714610467578063637661b3146104a0578063658d4b7f146104d25780636ddd1713146104f257806370a082311461051157600080fd5b80632f54bf6e146103b2578063313ce567146103e15780633611fd9c146103fd57806339e67c8a14610412578063571ac8b01461043257600080fd5b806318160ddd1161022457806318160ddd1461033257806323b872dd14610347578063283f7820146103675780632b112e491461037d5780632d48e8961461039257600080fd5b806293dc141461026b5780630445b6671461028257806306fdde03146102ab578063095ea7b3146102e257806315d890321461031257600080fd5b3661026657005b600080fd5b34801561027757600080fd5b506102806107e5565b005b34801561028e57600080fd5b50610298601b5481565b6040519081526020015b60405180910390f35b3480156102b757600080fd5b50604080518082018252600881526713995c9915195cdd60c21b602082015290516102a29190611f0a565b3480156102ee57600080fd5b506103026102fd366004611f52565b61084d565b60405190151581526020016102a2565b34801561031e57600080fd5b5061028061032d366004611f7e565b6108ba565b34801561033e57600080fd5b50600154610298565b34801561035357600080fd5b50610302610362366004611fb0565b610912565b34801561037357600080fd5b5061029860125481565b34801561038957600080fd5b506102986109d4565b34801561039e57600080fd5b506102806103ad366004611ff1565b610a26565b3480156103be57600080fd5b506103026103cd366004612013565b6000546001600160a01b0391821691161490565b3480156103ed57600080fd5b50604051600981526020016102a2565b34801561040957600080fd5b50610280610aba565b34801561041e57600080fd5b5061028061042d366004612030565b610af6565b34801561043e57600080fd5b5061030261044d366004612013565b610b25565b34801561045e57600080fd5b50610280610b33565b34801561047357600080fd5b506002546003546004546011546040805194855260208501939093529183015260608201526080016102a2565b3480156104ac57600080fd5b506008546001600160a01b03165b6040516001600160a01b0390911681526020016102a2565b3480156104de57600080fd5b506102806104ed36600461205e565b610b67565b3480156104fe57600080fd5b50601a5461030290610100900460ff1681565b34801561051d57600080fd5b5061029861052c366004612013565b6001600160a01b03166000908152600c602052604090205490565b34801561055357600080fd5b50610280610562366004612030565b610bbc565b34801561057357600080fd5b506000546001600160a01b03166104ba565b34801561059157600080fd5b506000546104ba906001600160a01b031681565b3480156105b157600080fd5b50610280610c06565b3480156105c657600080fd5b506102806105d5366004612030565b610c8a565b3480156105e657600080fd5b506102806105f5366004612093565b610cc9565b34801561060657600080fd5b50610302610615366004611f52565b610d21565b34801561062657600080fd5b506104ba610635366004612030565b610d2e565b34801561064657600080fd5b5061029860195481565b34801561065c57600080fd5b5061028061066b36600461205e565b610d58565b34801561067c57600080fd5b5061028061068b366004612013565b610dad565b34801561069c57600080fd5b506013546104ba906001600160a01b031681565b3480156106bc57600080fd5b506102806106cb3660046120cc565b610e29565b3480156106dc57600080fd5b506102986106eb366004612093565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b34801561072257600080fd5b506102806107313660046120e7565b610e66565b34801561074257600080fd5b506006546104ba906001600160a01b031681565b34801561076257600080fd5b50601a546103029060ff1681565b34801561077c57600080fd5b50610280610eae565b34801561079157600080fd5b506102806107a0366004612013565b610f18565b3480156107b157600080fd5b506102806107c036600461205e565b610fa3565b3480156107d157600080fd5b506015546104ba906001600160a01b031681565b6000546001600160a01b031633146108185760405162461bcd60e51b815260040161080f90612103565b60405180910390fd5b601480548061082957610829612130565b600082815260209020810160001990810180546001600160a01b0319169055019055565b336000818152600d602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108a89086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146108e45760405162461bcd60e51b815260040161080f90612103565b6002849055600383905560048290556109078261090186866110ac565b906110ac565b601255601155505050565b6001600160a01b0383166000908152600d60209081526040808320338452909152812054600019146109bf576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600d8252838120338252909152919091205461099a91849061110b565b6001600160a01b0385166000908152600d602090815260408083203384529091529020555b6109ca848484611145565b90505b9392505050565b600b546001600160a01b03166000908152600c6020526040812054610a2190600a546001600160a01b03166000908152600c6020526040902054610a1b90600154906115d4565b906115d4565b905090565b6000546001600160a01b03163314610a505760405162461bcd60e51b815260040161080f90612103565b6017546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b505050505050565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610af3573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610b205760405162461bcd60e51b815260040161080f90612103565b601955565b60006108b48260001961084d565b6000546001600160a01b03163314610b5d5760405162461bcd60e51b815260040161080f90612103565b610b65611616565b565b6000546001600160a01b03163314610b915760405162461bcd60e51b815260040161080f90612103565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610be65760405162461bcd60e51b815260040161080f90612103565b806064600154610bf6919061215c565b610c00919061217e565b60055550565b6000546001600160a01b03163314610c305760405162461bcd60e51b815260040161080f90612103565b60008054604080516001600160a01b03909216825260208201929092527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb45760405162461bcd60e51b815260040161080f90612103565b620f4240811115610cc457600080fd5b601855565b6000546001600160a01b03163314610cf35760405162461bcd60e51b815260040161080f90612103565b601380546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b60006109cd338484611145565b60148181548110610d3e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610d825760405162461bcd60e51b815260040161080f90612103565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610dd75760405162461bcd60e51b815260040161080f90612103565b601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e535760405162461bcd60e51b815260040161080f90612103565b601a805460ff1916911515919091179055565b6000546001600160a01b03163314610e905760405162461bcd60e51b815260040161080f90612103565b601a80549215156101000261ff001990931692909217909155601b55565b601760009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610efe57600080fd5b505af1158015610f12573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b815260040161080f90612103565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a15050565b6000546001600160a01b03163314610fcd5760405162461bcd60e51b815260040161080f90612103565b6001600160a01b0382163014801590610ff457506016546001600160a01b03838116911614155b610ffd57600080fd5b6001600160a01b0382166000908152601060205260409020805460ff1916821580159190911790915561106357601754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610a84565b6017546001600160a01b038381166000818152600c602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610a84565b6000806110b9838561219d565b9050838110156109cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161080f565b6000818484111561112f5760405162461bcd60e51b815260040161080f9190611f0a565b50600061113c84866121b5565b95945050505050565b600080611153601954151590565b15801561116d57506016546001600160a01b038581169116145b1561119c576001600160a01b0385166000908152600c602052604090205461119457600080fd5b61119c611b4a565b6001600160a01b0384166000908152600e602052604090205460ff16611231576005546001600160a01b0385166000908152600c60205260409020546111e390859061219d565b11156112315760405162461bcd60e51b815260206004820152601f60248201527f57616c6c65742063616e6e6f7420686f6c64206d6f7265207468616e20312500604482015260640161080f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600c909152919091205461128391859061110b565b6001600160a01b038087166000908152600c6020526040902091909155601654858216911614806112c157506015546001600160a01b038581169116145b806112f057506016546001600160a01b03868116911614806112f057506015546001600160a01b038681169116145b15611322576112ff8585611b8a565b611309578261131b565b61131b85611315611cdc565b85611cfb565b90506113ab565b6001600160a01b0384166000908152600c602052604090205461134590846110ac565b6001600160a01b038086166000818152600c602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113999087815260200190565b60405180910390a360019150506109cd565b6113b3611d97565b156113c0576113c0611616565b6001600160a01b0384166000908152600c60205260409020546113e390826110ac565b6001600160a01b038086166000908152600c602090815260408083209490945591881681526010909152205460ff16611487576017546001600160a01b038681166000818152600c602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561147457600080fd5b505af1925050508015611485575060015b505b6001600160a01b03841660009081526010602052604090205460ff16611518576017546001600160a01b038581166000818152600c602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561150557600080fd5b505af1925050508015611516575060015b505b6017546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916115509160040190815260200190565b600060405180830381600087803b15801561156a57600080fd5b505af192505050801561157b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115c191815260200190565b60405180910390a3506001949350505050565b60006109cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061110b565b601a805462ff0000198116620100001790915560009060ff1661163a57600061163e565b6002545b90506000611668600261166260125461166286601b54611df190919063ffffffff16565b90611e73565b9050600061168182601b546115d490919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106116bb576116bb6121cc565b6001600160a01b0392831660209182029290920101526009548251911690829060019081106116ec576116ec6121cc565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b81524792919091169063791ac947906117369086906000908790309042906004016121e2565b600060405180830381600087803b15801561175057600080fd5b505af1925050508015611761575060015b61187a5761176d612253565b806308c379a0036117e657506117816122aa565b8061178c57506117e8565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e02816040516020016117be9190612334565b60408051601f19818403018152908290526117d891611f0a565b60405180910390a150611b37565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e0260405161186d9060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a1611b37565b600061188647836115d4565b905060006118a1611898886002611e73565b601254906115d4565b905060006118b660026116628481878d611df1565b905060006118d38361166260035487611df190919063ffffffff16565b905060006118f08461166260045488611df190919063ffffffff16565b9050601760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561194257600080fd5b505af193505050508015611954575060015b506006546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146119a7576040519150601f19603f3d011682016040523d82523d6000602084013e6119ac565b606091505b505090507fd04b0e25336eeca616d3b76a107b101372b843df55c376dba4e7f34b0d19f735816040516119e3911515815260200190565b60405180910390a18915611afd5760155460135460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af193505050508015611a7e575060408051601f3d908101601f19168201909252611a7b91810190612379565b60015b611ac05760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a1611afd565b5050604080518c8152602081018790527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518981527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a15050505050505b5050601a805462ff000019169055505050565b436019819055604080519182524260208301527f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b19001910160405180910390a1565b6001600160a01b0382166000908152600f602052604081205460ff1680611bc957506001600160a01b0382166000908152600f602052604090205460ff165b80611bd45750601954155b15611be1575060006108b4565b60006014805480602002602001604051908101604052809291908181526020018280548015611c3957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c1b575b5050505050905060005b8151811015611cd157818181518110611c5e57611c5e6121cc565b60200260200101516001600160a01b0316856001600160a01b03161480611caf5750818181518110611c9257611c926121cc565b60200260200101516001600160a01b0316846001600160a01b0316145b15611cbf576001925050506108b4565b80611cc9816123a7565b915050611c43565b506000949350505050565b6000600454600354600254611cf1919061219d565b610a21919061219d565b600080611d176011546116628686611df190919063ffffffff16565b306000908152600c6020526040902054909150611d3490826110ac565b306000818152600c6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d859085815260200190565b60405180910390a361113c83826115d4565b6016546000906001600160a01b03163314801590611dbe5750601a5462010000900460ff16155b8015611dd15750601a54610100900460ff165b8015610a21575050601b54306000908152600c6020526040902054101590565b600082600003611e03575060006108b4565b6000611e0f838561217e565b905082611e1c858361215c565b146109cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161080f565b60006109cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183611ed15760405162461bcd60e51b815260040161080f9190611f0a565b50600061113c848661215c565b60005b83811015611ef9578181015183820152602001611ee1565b83811115610f125750506000910152565b6020815260008251806020840152611f29816040850160208701611ede565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610af357600080fd5b60008060408385031215611f6557600080fd5b8235611f7081611f3d565b946020939093013593505050565b60008060008060808587031215611f9457600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215611fc557600080fd5b8335611fd081611f3d565b92506020840135611fe081611f3d565b929592945050506040919091013590565b6000806040838503121561200457600080fd5b50508035926020909101359150565b60006020828403121561202557600080fd5b81356109cd81611f3d565b60006020828403121561204257600080fd5b5035919050565b8035801515811461205957600080fd5b919050565b6000806040838503121561207157600080fd5b823561207c81611f3d565b915061208a60208401612049565b90509250929050565b600080604083850312156120a657600080fd5b82356120b181611f3d565b915060208301356120c181611f3d565b809150509250929050565b6000602082840312156120de57600080fd5b6109cd82612049565b600080604083850312156120fa57600080fd5b611f7083612049565b60208082526013908201527227bbb732b939b434b8103932b8bab4b932b21760691b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261217957634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561219857612198612146565b500290565b600082198211156121b0576121b0612146565b500190565b6000828210156121c7576121c7612146565b500390565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122325784516001600160a01b03168352938301939183019160010161220d565b50506001600160a01b03969096166060850152505050608001529392505050565b600060033d111561226c5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156122a357634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156122b85790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156122e857505050505090565b82850191508151818111156123005750505050505090565b843d870101602082850101111561231a5750505050505090565b6123296020828601018761226f565b509095945050505050565b7f537761704261636b206661696c65642077697468206572726f7220000000000081526000825161236c81601b850160208701611ede565b91909101601b0192915050565b60008060006060848603121561238e57600080fd5b8351925060208401519150604084015190509250925092565b6000600182016123b9576123b9612146565b506001019056fea264697066735822122054560e4f33b2fcbb5f77b255b8e461b718ea03ecb61d40121ddb49fe8f06df9864736f6c634300080d0033608060405260018054734fea4c520f9c4a02993d64994280c247904445766001600160a01b031991821681179092556002805490911690911790556ec097ce7bc90715b34b9f1000000000600855610e10600b55670de0b6b3a7640000600c5534801561006b57600080fd5b5060405161101238038061101283398101604081905261008a916100e4565b6001600160a01b0381166100b25773085d8c985c73fbb425398209d864addd062ff3c16100b4565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610114565b6000602082840312156100f657600080fd5b81516001600160a01b038116811461010d57600080fd5b9392505050565b610eef806101236000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f860085481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610c74565b610285565b005b34801561013957600080fd5b506100f8610148366004610c9e565b6103fd565b34801561015957600080fd5b5061012b610168366004610cb9565b610488565b34801561017957600080fd5b506100f860065481565b34801561018f57600080fd5b506100f8600c5481565b3480156101a557600080fd5b506100f8600d5481565b3480156101bb57600080fd5b506101eb6101ca366004610c9e565b60046020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104aa565b34801561021a57600080fd5b506100f860075481565b34801561023057600080fd5b506100f8600e5481565b34801561024657600080fd5b5061012b6106d9565b34801561025b57600080fd5b5061012b61026a366004610cdb565b6106e4565b34801561027b57600080fd5b506100f8600b5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260046020526040902054156102c3576102c3826107e8565b6000811180156102e957506001600160a01b038216600090815260046020526040902054155b1561034f57600980546001600160a01b0384166000818152600560205260408120839055600183018455929092527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526004602052604090205415155b156103825761038282610906565b6001600160a01b0382166000908152600460205260409020546006546103b39183916103ad91610a1b565b90610a66565b6006556001600160a01b03821660009081526004602052604090208190556103da81610aca565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6001600160a01b038116600090815260046020526040812054810361042457506000919050565b6001600160a01b03821660009081526004602052604081205461044690610aca565b6001600160a01b038416600090815260046020526040902060010154909150808211610476575060009392505050565b6104808282610a1b565b949350505050565b6000546001600160a01b0316331461049f57600080fd5b600b91909155600c55565b6000546001600160a01b031633146104c157600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190610cf4565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061057457610574610d0d565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105a4576105a4610d0d565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906105ea90600090869030904290600401610d23565b6000604051808303818588803b15801561060357600080fd5b505af1158015610617573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061069793508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190610cf4565b90610a1b565b600d549091506106a79082610a66565b600d556006546008546106d1916106c8916106c29085610ae7565b90610b69565b60075490610a66565b600755505050565b6106e2336107e8565b565b6000546001600160a01b031633146106fb57600080fd5b600954600081900361070b575050565b6000805a905060005b848310801561072257508381105b156107e15783600f5410610736576000600f555b6107686009600f548154811061074e5761074e610d0d565b6000918252602090912001546001600160a01b0316610bab565b1561079f5761079f6009600f548154811061078557610785610d0d565b6000918252602090912001546001600160a01b03166107e8565b6107b46107ad5a8490610a1b565b8490610a66565b92505a600f805491935060006107c983610da3565b919050555080806107d990610da3565b915050610714565b5050505050565b6001600160a01b038116600090815260046020526040812054900361080a5750565b6000610815826103fd565b9050801561090257600e5461082a9082610a66565b600e5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190610dbc565b506001600160a01b0382166000908152600a6020908152604080832042905560049091529020600201546108d89082610a66565b6001600160a01b03831660009081526004602052604090206002810191909155546103da90610aca565b5050565b6009805461091690600190610dde565b8154811061092657610926610d0d565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460098054929093169291811061096457610964610d0d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460098054919392916109b090600190610dde565b815481106109c0576109c0610d0d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560098054806109f6576109f6610df5565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a5d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bf0565b90505b92915050565b600080610a738385610e0b565b905083811015610a5d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a606008546106c260075485610ae790919063ffffffff16565b600082600003610af957506000610a60565b6000610b058385610e23565b905082610b128583610e42565b14610a5d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac1565b6000610a5d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c2a565b600b546001600160a01b0382166000908152600a602052604081205490914291610bd59190610e0b565b108015610a605750600c54610be9836103fd565b1192915050565b60008184841115610c145760405162461bcd60e51b8152600401610ac19190610e64565b506000610c218486610dde565b95945050505050565b60008183610c4b5760405162461bcd60e51b8152600401610ac19190610e64565b506000610c218486610e42565b80356001600160a01b0381168114610c6f57600080fd5b919050565b60008060408385031215610c8757600080fd5b610c9083610c58565b946020939093013593505050565b600060208284031215610cb057600080fd5b610a5d82610c58565b60008060408385031215610ccc57600080fd5b50508035926020909101359150565b600060208284031215610ced57600080fd5b5035919050565b600060208284031215610d0657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d6d5784516001600160a01b031683529383019391830191600101610d48565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610db557610db5610d8d565b5060010190565b600060208284031215610dce57600080fd5b81518015158114610a5d57600080fd5b600082821015610df057610df0610d8d565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610e1e57610e1e610d8d565b500190565b6000816000190483118215151615610e3d57610e3d610d8d565b500290565b600082610e5f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610e9157858101830151858201604001528201610e75565b81811115610ea3576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212207ee78e8259fb45731bf27fd5637feb0d7e8225a490ac2a7aa80809f2074ad63f64736f6c634300080d0033
Deployed ByteCode
0x