Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- MILKYCOWS
- Optimization enabled
- true
- Compiler version
- v0.8.10+commit.fc410830
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2022-04-11T07:57:50.634904Z
Contract source code
// Telegram: https://t.me/milkycowsofficial // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address{ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; } contract MILKYCOWS is Context, IERC20, Ownable { using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping(address => bool) public isBot; address[] private _excluded; bool public swapEnabled = true; bool private swapping; IRouter public router; address public pair; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1_000_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public swapTokensAtAmount = _tTotal; uint256 public maxTxAmount = _tTotal * 10 / 1000; uint256 public maxWalletAmount = _tTotal * 10 / 1000; address public constant deadAddress = 0x000000000000000000000000000000000000dEaD; address public marketingWallet = msg.sender; address public LiquidityReceiver = msg.sender; string private constant _name = "Milky Cows"; string private constant _symbol = "MILKYCOWS"; struct Taxes { uint256 rfi; uint256 marketing; uint256 liquidity; uint256 burn; } Taxes public taxes = Taxes(0,97,2,0); //Max tax at deployment. will reduce after launch struct TotFeesPaidStruct{ uint256 rfi; uint256 marketing; uint256 liquidity; uint256 burn; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rMarketing; uint256 rLiquidity; uint256 rBurn; uint256 tTransferAmount; uint256 tRfi; uint256 tMarketing; uint256 tLiquidity; uint256 tBurn; } event UpdatedRouter(address oldRouter, address newRouter); modifier lockTheSwap { swapping = true; _; swapping = false; } constructor () { IRouter _router = IRouter(0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WETH()); router = _router; pair = _pair; excludeFromReward(pair); excludeFromReward(deadAddress); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingWallet]=true; _isExcludedFromFee[LiquidityReceiver]=true; _isExcludedFromFee[deadAddress] = false; emit Transfer(address(0), owner(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _burn) public onlyOwner { taxes = Taxes(_rfi, _marketing, _liquidity, _burn); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi +=tRfi; } function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private { totFeesPaid.liquidity +=tLiquidity; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tLiquidity; } _rOwned[address(this)] +=rLiquidity; } function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private { totFeesPaid.marketing +=tMarketing; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tMarketing; } _rOwned[address(this)] +=rMarketing; } function _takeBurn(uint256 rBurn, uint256 tBurn) private{ totFeesPaid.burn +=tBurn; if(_isExcluded[deadAddress]) { _tOwned[deadAddress]+=tBurn; } _rOwned[deadAddress] +=rBurn; } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity, to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = tAmount*taxes.rfi/100; s.tMarketing = tAmount*taxes.marketing/100; s.tLiquidity = tAmount*taxes.liquidity/100; s.tBurn = tAmount*taxes.burn/100; s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tBurn; return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rMarketing, uint256 rLiquidity, uint256 rBurn) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount, 0,0,0,0); } rRfi = s.tRfi*currentRate; rMarketing = s.tMarketing*currentRate; rLiquidity = s.tLiquidity*currentRate; rBurn = s.rBurn*currentRate; rTransferAmount = rAmount-rRfi-rMarketing-rLiquidity-rBurn; return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity, rBurn); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBot[from], "ERC20: address is a bot"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"You are trying to transfer more than your balance"); if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ if(to != pair) require(balanceOf(to) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount"); require(amount <= maxTxAmount, "You are esceeding maxTxAmount"); } bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount; if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ swapAndLiquify(swapTokensAtAmount); } _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to])); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender] ) { //from excluded _tOwned[sender] = _tOwned[sender]-tAmount; } if (_isExcluded[recipient]) { //to excluded _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount; } _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi); if(s.rLiquidity > 0 || s.tLiquidity > 0) { _takeLiquidity(s.rLiquidity,s.tLiquidity); } if(s.rMarketing > 0 || s.tMarketing > 0){ _takeMarketing(s.rMarketing, s.tMarketing); } if(s.rBurn > 0 || s.tBurn > 0){ _takeBurn(s.rBurn, s.tBurn); emit Transfer(sender, deadAddress, s.tBurn); } emit Transfer(sender, recipient, s.tTransferAmount); emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing); } function swapAndLiquify(uint256 tokens) private lockTheSwap{ // Split the contract balance into halves uint256 denominator = (taxes.liquidity + taxes.marketing ) * 2; uint256 tokensToAddLiquidityWith = tokens * taxes.liquidity / denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForCRO(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance= deltaBalance / (denominator - taxes.liquidity); uint256 CROToAddLiquidityWith = unitBalance * taxes.liquidity; if(CROToAddLiquidityWith > 0){ addLiquidity(tokensToAddLiquidityWith, CROToAddLiquidityWith); } uint256 marketingAmt = unitBalance * 2 * taxes.marketing; if(marketingAmt > 0){ payable(marketingWallet).sendValue(marketingAmt); } } function addLiquidity(uint256 tokenAmount, uint256 CROAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityETH{value: CROAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable LiquidityReceiver, block.timestamp ); } function swapTokensForCRO(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function updateWallet(address newMarketingWallet, address newLiquidityWallet) external onlyOwner{ marketingWallet = newMarketingWallet; _isExcludedFromFee[marketingWallet] = true; LiquidityReceiver = newLiquidityWallet; } function updateMaxTxAmount(uint256 amount) external onlyOwner{ maxTxAmount = amount; } function updateMaxWalletBalance(uint256 amount) external onlyOwner{ maxWalletAmount = amount; } function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{ swapTokensAtAmount = amount; } function updateSwapEnabled(bool _enabled) external onlyOwner{ swapEnabled = _enabled; } function manualSwap(uint256 amount) external onlyOwner{ uint256 toSwap = _tTotal * amount / 1000; swapAndLiquify(toSwap); } function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{ router = IRouter(newRouter); pair = newPair; } function rescuetoken() external { payable(LiquidityReceiver).transfer(address(this).balance); } function isBots(address botAddress, bool status) external onlyOwner { isBot[botAddress] = status; } // Function to allow admin to claim *other* BEP20 tokens sent to this contract (by mistake) // Owner cannot transfer out native coin from this smart contract function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } receive() external payable{ } }
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":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"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":"event","name":"UpdatedRouter","inputs":[{"type":"address","name":"oldRouter","internalType":"address","indexed":false},{"type":"address","name":"newRouter","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"LiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","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":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deadAddress","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBot","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"isBots","inputs":[{"type":"address","name":"botAddress","internalType":"address"},{"type":"bool","name":"status","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manualSwap","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWalletAmount","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":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFromToken","inputs":[{"type":"uint256","name":"tAmount","internalType":"uint256"},{"type":"bool","name":"deductTransferRfi","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueAnyBEP20Tokens","inputs":[{"type":"address","name":"_tokenAddr","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescuetoken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTaxes","inputs":[{"type":"uint256","name":"_rfi","internalType":"uint256"},{"type":"uint256","name":"_marketing","internalType":"uint256"},{"type":"uint256","name":"_liquidity","internalType":"uint256"},{"type":"uint256","name":"_burn","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":"swapTokensAtAmount","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"rfi","internalType":"uint256"},{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"burn","internalType":"uint256"}],"name":"taxes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenFromReflection","inputs":[{"type":"uint256","name":"rAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"rfi","internalType":"uint256"},{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"burn","internalType":"uint256"}],"name":"totFeesPaid","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":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxTxAmount","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxWalletBalance","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateRouterAndPair","inputs":[{"type":"address","name":"newRouter","internalType":"address"},{"type":"address","name":"newPair","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSwapEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSwapTokensAtAmount","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateWallet","inputs":[{"type":"address","name":"newMarketingWallet","internalType":"address"},{"type":"address","name":"newLiquidityWallet","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Deployed ByteCode
0x6080604052600436106102765760003560e01c8063715018a61161014f578063a457c2d7116100c1578063d257b34f1161007a578063d257b34f146107ea578063dd62ed3e1461080a578063e2f4560514610850578063ea2f0b3714610866578063f2fde38b14610886578063f887ea40146108a657600080fd5b8063a457c2d714610734578063a8aa1b3114610754578063a9059cbb14610774578063aa4bde2814610794578063b70143c9146107aa578063d05b5a00146107ca57600080fd5b80638c0b5e22116101135780638c0b5e221461066b5780638da5cb5b14610681578063924de9b71461069f57806395d89b41146106bf5780639ba5e4d5146106f1578063a12a7d611461071457600080fd5b8063715018a6146105a5578063728f8eea146105ba57806373880790146105fd57806375f0a8741461061257806388f820201461063257600080fd5b80633fd16d13116101e85780634a6bb4a5116101ac5780634a6bb4a5146104d257806352390c02146104f25780635342acb4146105125780636256d1811461054b5780636ddd17131461056b57806370a082311461058557600080fd5b80633fd16d131461043257806340b28c2f14610452578063437823ec146104725780634549b0391461049257806347c23092146104b257600080fd5b806327c8f8351161023a57806327c8f835146103585780632d83811914610386578063313ce567146103a65780633685d419146103c257806339509351146103e25780633bbac5791461040257600080fd5b806306fdde0314610282578063095ea7b3146102c757806318160ddd146102f7578063188b1bf11461031657806323b872dd1461033857600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5060408051808201909152600a8152694d696c6b7920436f777360b01b60208201525b6040516102be9190612643565b60405180910390f35b3480156102d357600080fd5b506102e76102e23660046126ad565b6108cc565b60405190151581526020016102be565b34801561030357600080fd5b50600a545b6040519081526020016102be565b34801561032257600080fd5b506103366103313660046126d9565b6108e3565b005b34801561034457600080fd5b506102e76103533660046126f2565b61091b565b34801561036457600080fd5b5061036e61dead81565b6040516001600160a01b0390911681526020016102be565b34801561039257600080fd5b506103086103a13660046126d9565b6109cc565b3480156103b257600080fd5b50604051600981526020016102be565b3480156103ce57600080fd5b506103366103dd366004612733565b610a50565b3480156103ee57600080fd5b506102e76103fd3660046126ad565b610c07565b34801561040e57600080fd5b506102e761041d366004612733565b60066020526000908152604090205460ff1681565b34801561043e57600080fd5b5060105461036e906001600160a01b031681565b34801561045e57600080fd5b5061033661046d366004612750565b610c3e565b34801561047e57600080fd5b5061033661048d366004612733565b610ca2565b34801561049e57600080fd5b506103086104ad366004612797565b610cf0565b3480156104be57600080fd5b506103366104cd3660046126f2565b610d7a565b3480156104de57600080fd5b506103366104ed366004612750565b610e1d565b3480156104fe57600080fd5b5061033661050d366004612733565b610e90565b34801561051e57600080fd5b506102e761052d366004612733565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561055757600080fd5b506103366105663660046126d9565b610fe3565b34801561057757600080fd5b506008546102e79060ff1681565b34801561059157600080fd5b506103086105a0366004612733565b611012565b3480156105b157600080fd5b50610336611071565b3480156105c657600080fd5b506011546012546013546014546105dd9392919084565b6040805194855260208501939093529183015260608201526080016102be565b34801561060957600080fd5b506103366110a7565b34801561061e57600080fd5b50600f5461036e906001600160a01b031681565b34801561063e57600080fd5b506102e761064d366004612733565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561067757600080fd5b50610308600d5481565b34801561068d57600080fd5b506000546001600160a01b031661036e565b3480156106ab57600080fd5b506103366106ba3660046127bc565b6110e3565b3480156106cb57600080fd5b506040805180820190915260098152684d494c4b59434f575360b81b60208201526102b1565b3480156106fd57600080fd5b506015546016546017546018546105dd9392919084565b34801561072057600080fd5b5061033661072f3660046127d9565b611120565b34801561074057600080fd5b506102e761074f3660046126ad565b61117e565b34801561076057600080fd5b5060095461036e906001600160a01b031681565b34801561078057600080fd5b506102e761078f3660046126ad565b611219565b3480156107a057600080fd5b50610308600e5481565b3480156107b657600080fd5b506103366107c53660046126d9565b611226565b3480156107d657600080fd5b506103366107e536600461280b565b611278565b3480156107f657600080fd5b506103366108053660046126d9565b6112cd565b34801561081657600080fd5b50610308610825366004612750565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561085c57600080fd5b50610308600c5481565b34801561087257600080fd5b50610336610881366004612733565b6112fc565b34801561089257600080fd5b506103366108a1366004612733565b611347565b3480156108b257600080fd5b5060085461036e906201000090046001600160a01b031681565b60006108d93384846113df565b5060015b92915050565b6000546001600160a01b031633146109165760405162461bcd60e51b815260040161090d90612839565b60405180910390fd5b600e55565b6000610928848484611503565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156109ad5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161090d565b6109c185336109bc8685612884565b6113df565b506001949350505050565b6000600b54821115610a335760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161090d565b6000610a3d61191c565b9050610a49818461289b565b9392505050565b6000546001600160a01b03163314610a7a5760405162461bcd60e51b815260040161090d90612839565b6001600160a01b03811660009081526005602052604090205460ff16610ae25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161090d565b60005b600754811015610c0357816001600160a01b031660078281548110610b0c57610b0c6128bd565b6000918252602090912001546001600160a01b03161415610bf15760078054610b3790600190612884565b81548110610b4757610b476128bd565b600091825260209091200154600780546001600160a01b039092169183908110610b7357610b736128bd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556007805480610bcb57610bcb6128d3565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610bfb816128e9565b915050610ae5565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108d99185906109bc908690612904565b6000546001600160a01b03163314610c685760405162461bcd60e51b815260040161090d90612839565b6008805462010000600160b01b031916620100006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b6000546001600160a01b03163314610ccc5760405162461bcd60e51b815260040161090d90612839565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600a54831115610d445760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161090d565b81610d60576000610d5684600161193f565b5191506108dd9050565b6000610d6d84600161193f565b6020015191506108dd9050565b6000546001600160a01b03163314610da45760405162461bcd60e51b815260040161090d90612839565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e17919061291c565b50505050565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260040161090d90612839565b600f80546001600160a01b039384166001600160a01b03199182168117909255600091825260046020526040909120805460ff1916600117905560108054929093169116179055565b6000546001600160a01b03163314610eba5760405162461bcd60e51b815260040161090d90612839565b6001600160a01b03811660009081526005602052604090205460ff1615610f235760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161090d565b6001600160a01b03811660009081526001602052604090205415610f7d576001600160a01b038116600090815260016020526040902054610f63906109cc565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b0316331461100d5760405162461bcd60e51b815260040161090d90612839565b600d55565b6001600160a01b03811660009081526005602052604081205460ff161561104f57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546108dd906109cc565b6000546001600160a01b0316331461109b5760405162461bcd60e51b815260040161090d90612839565b6110a56000611987565b565b6010546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156110e0573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461110d5760405162461bcd60e51b815260040161090d90612839565b6008805460ff1916911515919091179055565b6000546001600160a01b0316331461114a5760405162461bcd60e51b815260040161090d90612839565b6040805160808101825285815260208101859052908101839052606001819052601193909355601291909155601355601455565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156112005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090d565b61120f33856109bc8685612884565b5060019392505050565b60006108d9338484611503565b6000546001600160a01b031633146112505760405162461bcd60e51b815260040161090d90612839565b60006103e882600a546112639190612939565b61126d919061289b565b9050610c03816119d7565b6000546001600160a01b031633146112a25760405162461bcd60e51b815260040161090d90612839565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112f75760405162461bcd60e51b815260040161090d90612839565b600c55565b6000546001600160a01b031633146113265760405162461bcd60e51b815260040161090d90612839565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146113715760405162461bcd60e51b815260040161090d90612839565b6001600160a01b0381166113d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090d565b6110e081611987565b6001600160a01b0383166114415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090d565b6001600160a01b0382166114a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115675760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161090d565b6001600160a01b0382166115c95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161090d565b6001600160a01b03831660009081526006602052604090205460ff16156116325760405162461bcd60e51b815260206004820152601760248201527f45524332303a2061646472657373206973206120626f74000000000000000000604482015260640161090d565b600081116116945760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161090d565b61169d83611012565b8111156117065760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161090d565b6001600160a01b03831660009081526004602052604090205460ff1615801561174857506001600160a01b03821660009081526004602052604090205460ff16155b15611823576009546001600160a01b038381169116146117d157600e548161176f84611012565b6117799190612904565b11156117d15760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b606482015260840161090d565b600d548111156118235760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657363656564696e67206d61785478416d6f756e74000000604482015260640161090d565b6000600c5461183130611012565b6008549111159150610100900460ff16158015611850575060085460ff165b80156118595750805b801561187357506009546001600160a01b03858116911614155b801561189857506001600160a01b03841660009081526004602052604090205460ff16155b80156118bd57506001600160a01b03831660009081526004602052604090205460ff16155b156118cd576118cd600c546119d7565b6001600160a01b038416600090815260046020526040902054610e179085908590859060ff168061191657506001600160a01b03871660009081526004602052604090205460ff165b15611ada565b6000806000611929611de9565b9092509050611938818361289b565b9250505090565b6119476125e9565b6119518383611f6c565b905061196681848461196161191c565b61204a565b60a08701526080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff0019166101001790556012546013546000916119f891612904565b611a03906002612939565b905060008160116002015484611a199190612939565b611a23919061289b565b90506000611a318285612884565b905047611a3d826120fb565b6000611a498247612884565b601354909150600090611a5c9087612884565b611a66908361289b565b601354909150600090611a799083612939565b90508015611a8b57611a8b868261227a565b601254600090611a9c846002612939565b611aa69190612939565b90508015611ac457600f54611ac4906001600160a01b03168261233a565b50506008805461ff001916905550505050505050565b6000611ae6838361193f565b6001600160a01b03861660009081526005602052604090205490915060ff1615611b48576001600160a01b038516600090815260026020526040902054611b2e908490612884565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff1615611bab5760c08101516001600160a01b038516600090815260026020526040902054611b919190612904565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b038616600090815260016020526040902054611bd09190612884565b6001600160a01b0380871660009081526001602090815260408083209490945584015191871681529190912054611c079190612904565b6001600160a01b0385166000908152600160205260409081902091909155810151151580611c39575060008160e00151115b15611c5057611c5081604001518260e00151612458565b600081608001511180611c6857506000816101200151115b15611c8057611c80816080015182610120015161248d565b600081606001511180611c9857506000816101000151115b15611cb057611cb08160600151826101000151612503565b60008160a001511180611cc857506000816101400151115b15611d3557611ce08160a00151826101400151612518565b61dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151604051611d2c91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611d7e91815260200190565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151846101200151611dd19190612904565b60405190815260200160405180910390a35050505050565b600b54600a546000918291825b600754811015611f3b57826001600060078481548110611e1857611e186128bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e835750816002600060078481548110611e5c57611e5c6128bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611e9957600b54600a54945094505050509091565b6001600060078381548110611eb057611eb06128bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611edf9084612884565b92506002600060078381548110611ef857611ef86128bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f279083612884565b915080611f33816128e9565b915050611df6565b50600a54600b54611f4c919061289b565b821015611f6357600b54600a549350935050509091565b90939092509050565b611f746125e9565b81611f855760c081018390526108dd565b601154606490611f959085612939565b611f9f919061289b565b60e0820152601254606490611fb49085612939565b611fbe919061289b565b610100820152601354606490611fd49085612939565b611fde919061289b565b610120820152601454606490611ff49085612939565b611ffe919061289b565b610140820181905261012082015161010083015160e08401516120219087612884565b61202b9190612884565b6120359190612884565b61203f9190612884565b60c082015292915050565b6000808080808061205b878a612939565b955087612076575084935060009250829150819050806120ee565b868a60e001516120869190612939565b9350868a61010001516120999190612939565b9250868a61012001516120ac9190612939565b9150868a60a001516120be9190612939565b90508082846120cd878a612884565b6120d79190612884565b6120e19190612884565b6120eb9190612884565b94505b9499939850945094509450565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612130576121306128bd565b60200260200101906001600160a01b031690816001600160a01b031681525050600860029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190612958565b816001815181106121da576121da6128bd565b6001600160a01b03928316602091820292909201015260085461220691309162010000900416846113df565b60085460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790612244908590600090869030904290600401612975565b600060405180830381600087803b15801561225e57600080fd5b505af1158015612272573d6000803e3d6000fd5b505050505050565b6008546122989030906201000090046001600160a01b0316846113df565b60085460105460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015262010000909204169063f305d71990839060c40160606040518083038185885af115801561230e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061233391906129e6565b5050505050565b8047101561238a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161090d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123d7576040519150601f19603f3d011682016040523d82523d6000602084013e6123dc565b606091505b50509050806124535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161090d565b505050565b81600b600082825461246a9190612884565b909155505060158054829190600090612484908490612904565b90915550505050565b80601560020160008282546124a29190612904565b90915550503060009081526005602052604090205460ff16156124e45730600090815260026020526040812080548392906124de908490612904565b90915550505b3060009081526001602052604081208054849290612484908490612904565b80601560010160008282546124a29190612904565b806015600301600082825461252d9190612904565b909155505061dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba5460ff16156125ab5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80548392906125a5908490612904565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612484908490612904565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561267057858101830151858201604001528201612654565b81811115612682576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146110e057600080fd5b600080604083850312156126c057600080fd5b82356126cb81612698565b946020939093013593505050565b6000602082840312156126eb57600080fd5b5035919050565b60008060006060848603121561270757600080fd5b833561271281612698565b9250602084013561272281612698565b929592945050506040919091013590565b60006020828403121561274557600080fd5b8135610a4981612698565b6000806040838503121561276357600080fd5b823561276e81612698565b9150602083013561277e81612698565b809150509250929050565b80151581146110e057600080fd5b600080604083850312156127aa57600080fd5b82359150602083013561277e81612789565b6000602082840312156127ce57600080fd5b8135610a4981612789565b600080600080608085870312156127ef57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561281e57600080fd5b823561282981612698565b9150602083013561277e81612789565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000828210156128965761289661286e565b500390565b6000826128b857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156128fd576128fd61286e565b5060010190565b600082198211156129175761291761286e565b500190565b60006020828403121561292e57600080fd5b8151610a4981612789565b60008160001904831182151516156129535761295361286e565b500290565b60006020828403121561296a57600080fd5b8151610a4981612698565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129c55784516001600160a01b0316835293830193918301916001016129a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129fb57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202c30a5864ecec1c7b6dc2a9b90fa07efcc6eca0db5a07e1503b46277fe36b1bb64736f6c634300080a0033