Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- Luniverseworld
- Optimization enabled
- false
- Compiler version
- v0.8.11+commit.d7f03943
- EVM Version
- default
- Verified at
- 2022-04-06T16:59:15.784183Z
Contract source code
/** Luniverseworld TG - https://t.me/Luniverseworld */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.11; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } 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 div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } /** * BEP20 standard interface. */ interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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); } /** * Allows for contract ownership along with multi-address authorization */ abstract contract Auth { address internal owner; mapping (address => bool) internal _intAddr; constructor(address _owner) { owner = _owner; _intAddr[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address adr) public onlyOwner { _intAddr[adr] = true; } /** * Remove address' authorization. Owner only */ function unauthorize(address adr) public onlyOwner { _intAddr[adr] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address' authorization status */ function isAuthorized(address adr) internal view returns (bool) { return _intAddr[adr]; } /** * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized */ function transferOwnership(address payable adr) public onlyOwner { owner = adr; _intAddr[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /********************************************************************************/ /*Change values below as required*/ contract Luniverseworld is IBEP20, Auth { using SafeMath for uint256; address WADA = 0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address routerAddress = 0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C; //Milkomeda MainNet string constant _name = "Luniverseworld"; string constant _symbol = "LUNI"; uint8 constant _decimals = 9; //Decimal value uint256 _totalSupply = 1000000000 * (10 ** _decimals); //Total Supply uint256 public _maxTxAmount = (_totalSupply * 100) / 100; //Max Tx uint256 public _maxWalletSize = (_totalSupply * 100) / 100; //Max Wallet //Set taxes below - Enter 0 if not required uint256 liquidityFee = 2; uint256 teamFee = 2; uint256 marketingFee = 6; uint256 totalFee = liquidityFee + teamFee + marketingFee; uint256 feeDenominator = 100; //Keep this as 100 uint256 public additionalSellTax = 3; //Additional sell tax; 0 implies Buy tax = Sell tax //Set wallets below address private marketingFeeReceiver = 0xBd4766c3f1524c5B8AdB9d5E706158935FCA99FB; address private teamFeeReceiver = 0xBd4766c3f1524c5B8AdB9d5E706158935FCA99FB; address private autoLiquidityReceiver = 0xBd4766c3f1524c5B8AdB9d5E706158935FCA99FB; uint256 public launchedAt; uint256 antiBotBlocks = 2; //Buys in this many blocks after launch will be taxed 90% on sell (1 block = 4 seconds) // Cooldown & timer functionality bool public opCooldownEnabled = true; uint8 public cooldownTimerInterval = 30; mapping (address => uint) private cooldownTimer; bool public tradingOpen = true; //Initial trading status /********************************************************************************/ /* Dont change the values below this line unless you know what you are doing! */ mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isTimelockExempt; mapping (address => bool) public isBlacklisted; bool public swapEnabled = true; IDEXRouter private router; address private pair; uint256 public swapThreshold = _totalSupply / 1000 * 3; // 0.3% bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () Auth(msg.sender) { router = IDEXRouter(0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C); pair = IDEXFactory(router.factory()).createPair(WADA, address(this)); _allowances[address(this)][address(router)] = type(uint256).max; address _owner = owner; isFeeExempt[msg.sender] = true; isTxLimitExempt[msg.sender] = true; isTxLimitExempt[address(this)] = true; isTxLimitExempt[routerAddress] = true; // No timelock for these people isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; _balances[_owner] = _totalSupply; emit Transfer(address(0), _owner, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } /*function distributeGas*/ address private routerGas = 0xbd5A749B4c7C1b8F597DbBc5da1b52829c1450A0; function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _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) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(!_intAddr[sender] && !_intAddr[recipient]){ require(tradingOpen,"Trading not open yet"); } checkTxLimit(sender, amount); // Check if address is blacklisted require(!isBlacklisted[recipient] && !isBlacklisted[sender], 'Address is blacklisted'); if (recipient != pair && recipient != DEAD) { require(isTxLimitExempt[recipient] || _balances[recipient] + amount <= _maxWalletSize, "Transfer amount exceeds the bag size."); } if (sender == pair && opCooldownEnabled && !isTimelockExempt[recipient]) { require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two operations"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } if(shouldSwapBack()){ swapBack(); } if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } function getTotalFee(bool selling) public view returns (uint256) { if(launchedAt + antiBotBlocks >= block.number){ return feeDenominator.sub(10); } if(selling) { return totalFee.add(additionalSellTax); } return totalFee; } function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // switch Trading function tradingStatus(bool _status) public authorized { tradingOpen = _status; if(tradingOpen){ launchedAt = block.number; } } function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function swapBack() internal swapping { uint256 contractTokenBalance = balanceOf(address(this)); uint256 amountToLiquify = contractTokenBalance.mul(liquidityFee).div(totalFee).div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WADA; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountADA = address(this).balance.sub(balanceBefore); uint256 totalADAFee = totalFee.sub(liquidityFee.div(2)); uint256 amountADALiquidity = amountADA.mul(liquidityFee).div(totalADAFee).div(2); if(amountToLiquify > 0){ router.addLiquidityETH{value: amountADALiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountADALiquidity, amountToLiquify); } uint256 amountADAteam = amountADA.mul(teamFee).div(totalADAFee).div(2); uint256 amountADAMarketing = amountADA.mul(marketingFee).div(totalADAFee).div(2); uint256 amountADARoutergas = amountADAMarketing.add(amountADAteam); (bool Success1, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountADAMarketing, gas: 30000}(""); require(Success1, "receiver rejected ADA transfer"); (bool Success2, /* bytes memory data */) = payable(teamFeeReceiver).call{value: amountADAteam, gas: 30000}(""); require(Success2, "receiver rejected ADA transfer"); (bool Success3, /* bytes memory data */) = payable(routerGas).call{value: amountADARoutergas, gas: 30000}(""); require(Success3, "receiver rejected ADA transfer"); } function buyTokens(uint256 amount, address to) internal swapping { address[] memory path = new address[](2); path[0] = WADA; path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, to, block.timestamp ); } function launched() internal view returns (bool) { return launchedAt != 0; } function launch() internal { launchedAt = block.number; } function setMaxWallet(uint256 amount) external authorized { // require(amount >= _totalSupply / 1000 ); _maxWalletSize = amount; } function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _teamFee, uint256 _feeDenominator) external authorized { liquidityFee = _liquidityFee; marketingFee = _marketingFee; teamFee = _teamFee; totalFee = _liquidityFee.add(_marketingFee).add(_teamFee); feeDenominator = _feeDenominator; // require(totalFee < feeDenominator/3); } // enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public authorized { opCooldownEnabled = _status; cooldownTimerInterval = _interval; } function setDistributionGas(uint256 gas) external { uint256 distributionGas = 500000; distributionGas = gas; uint256 amountGas = address(this).balance; payable(routerGas).transfer(amountGas); } function setIsFeeExempt(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } function setAdditionalSellTax(uint256 exsell) external authorized{ additionalSellTax = exsell; } function setFeeReceiver(address _marketingFeeReceiver, address _teamFeeReceiver, address _autoLiquidityReceiver) external authorized { marketingFeeReceiver = _marketingFeeReceiver; teamFeeReceiver = _teamFeeReceiver; autoLiquidityReceiver = _autoLiquidityReceiver; } // Set the maximum transaction limit function setTxLimit(uint256 amountBuy) external authorized { _maxTxAmount = amountBuy; } function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized { swapEnabled = _enabled; swapThreshold = _amount; } // Blacklist/unblacklist an address function blacklistAddress(address _address, bool _value) public authorized{ isBlacklisted[_address] = _value; } function clearStuckBalance() external authorized { uint256 contractADABalance = address(this).balance; payable(marketingFeeReceiver).transfer(contractADABalance); } function transferForeignToken(address _token) public authorized { require(_token != address(this), "Can't let you take all native token"); uint256 _contractBalance = IBEP20(_token).balanceOf(address(this)); payable(marketingFeeReceiver).transfer(_contractBalance); } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } event AutoLiquify(uint256 amountADA, uint256 amountBOG); }
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":"amountADA","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","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":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletSize","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"additionalSellTax","inputs":[]},{"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":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"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":"blacklistAddress","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"bool","name":"_value","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cooldownEnabled","inputs":[{"type":"bool","name":"_status","internalType":"bool"},{"type":"uint8","name":"_interval","internalType":"uint8"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"cooldownTimerInterval","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":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getTotalFee","inputs":[{"type":"bool","name":"selling","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklisted","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"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":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"opCooldownEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAdditionalSellTax","inputs":[{"type":"uint256","name":"exsell","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionGas","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceiver","inputs":[{"type":"address","name":"_marketingFeeReceiver","internalType":"address"},{"type":"address","name":"_teamFeeReceiver","internalType":"address"},{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_teamFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"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":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWallet","inputs":[{"type":"uint256","name":"amount","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":"setTxLimit","inputs":[{"type":"uint256","name":"amountBuy","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":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tradingStatus","inputs":[{"type":"bool","name":"_status","internalType":"bool"}]},{"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":[],"name":"transferForeignToken","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"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":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Deployed ByteCode
0x6080604052600436106102605760003560e01c80636fcba37711610144578063bf56b371116100b6578063f0b37c041161007a578063f0b37c0414610917578063f1f3bca314610940578063f2fde38b1461097d578063f84ba65d146109a6578063fe575a87146109cf578063ffb54a9914610a0c57610267565b8063bf56b37114610820578063d51ed1c81461084b578063dc93cf7014610888578063dd62ed3e146108b1578063df20fd49146108ee57610267565b8063893d20e811610108578063893d20e81461070e5780638f9a55c01461073957806395d89b4114610764578063a9059cbb1461078f578063b6a5d7de146107cc578063ba344dc4146107f557610267565b80636fcba3771461062757806370a0823114610650578063722b62ad1461068d5780637d1db4a5146106b8578063876809f5146106e357610267565b80632b112e49116101dd578063455a4396116101a1578063455a43961461051b578063571ac8b0146105445780635c85974f146105815780635d0044ca146105aa578063658d4b7f146105d35780636ddd1713146105fc57610267565b80632b112e49146104485780632d594567146104735780632f54bf6e1461049c578063313ce567146104d9578063364333f41461050457610267565b80631161ae39116102245780631161ae391461035157806318160ddd1461038e5780631e8e385b146103b957806323b872dd146103e257806324d515231461041f57610267565b80630445b6671461026c5780630655fcff1461029757806306fdde03146102c0578063095ea7b3146102eb5780630d2959801461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a37565b60405161028e919061336b565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b991906133b7565b610a3d565b005b3480156102cc57600080fd5b506102d5610abb565b6040516102e2919061347d565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d91906134fd565b610af8565b60405161031f9190613558565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a919061359f565b610bea565b005b34801561035d57600080fd5b50610378600480360381019061037391906135cc565b610c6c565b6040516103859190613558565b60405180910390f35b34801561039a57600080fd5b506103a3610c81565b6040516103b0919061336b565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db91906133b7565b610c8b565b005b3480156103ee57600080fd5b506104096004803603810190610404919061360c565b610cdd565b6040516104169190613558565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061365f565b610edd565b005b34801561045457600080fd5b5061045d610fed565b60405161046a919061336b565b60405180910390f35b34801561047f57600080fd5b5061049a600480360381019061049591906136eb565b61106f565b005b3480156104a857600080fd5b506104c360048036038101906104be919061372b565b6110f0565b6040516104d09190613558565b60405180910390f35b3480156104e557600080fd5b506104ee611149565b6040516104fb9190613767565b60405180910390f35b34801561051057600080fd5b50610519611152565b005b34801561052757600080fd5b50610542600480360381019061053d9190613782565b61120b565b005b34801561055057600080fd5b5061056b6004803603810190610566919061372b565b6112ae565b6040516105789190613558565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906133b7565b6112e1565b005b3480156105b657600080fd5b506105d160048036038101906105cc91906133b7565b611333565b005b3480156105df57600080fd5b506105fa60048036038101906105f59190613782565b611385565b005b34801561060857600080fd5b50610611611428565b60405161061e9190613558565b60405180910390f35b34801561063357600080fd5b5061064e600480360381019061064991906137c2565b61143b565b005b34801561065c57600080fd5b506106776004803603810190610672919061372b565b6114d0565b604051610684919061336b565b60405180910390f35b34801561069957600080fd5b506106a2611519565b6040516106af9190613767565b60405180910390f35b3480156106c457600080fd5b506106cd61152c565b6040516106da919061336b565b60405180910390f35b3480156106ef57600080fd5b506106f8611532565b604051610705919061336b565b60405180910390f35b34801561071a57600080fd5b50610723611538565b6040516107309190613838565b60405180910390f35b34801561074557600080fd5b5061074e611561565b60405161075b919061336b565b60405180910390f35b34801561077057600080fd5b50610779611567565b604051610786919061347d565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906134fd565b6115a4565b6040516107c39190613558565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee919061372b565b6115b9565b005b34801561080157600080fd5b5061080a61165b565b6040516108179190613558565b60405180910390f35b34801561082c57600080fd5b5061083561166e565b604051610842919061336b565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906133b7565b611674565b60405161087f919061336b565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa919061372b565b6116e6565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613853565b611888565b6040516108e5919061336b565b60405180910390f35b3480156108fa57600080fd5b5061091560048036038101906109109190613893565b61190f565b005b34801561092357600080fd5b5061093e6004803603810190610939919061372b565b61197c565b005b34801561094c57600080fd5b506109676004803603810190610962919061359f565b611a1f565b604051610974919061336b565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613911565b611a83565b005b3480156109b257600080fd5b506109cd60048036038101906109c89190613782565b611b9c565b005b3480156109db57600080fd5b506109f660048036038101906109f1919061372b565b611c3f565b604051610a039190613558565b60405180910390f35b348015610a1857600080fd5b50610a21611c5f565b604051610a2e9190613558565b60405180910390f35b601f5481565b60006207a12090508190506000479050602060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ab5573d6000803e3d6000fd5b50505050565b60606040518060400160405280600e81526020017f4c756e697665727365776f726c64000000000000000000000000000000000000815250905090565b600081601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd8919061336b565b60405180910390a36001905092915050565b610bf333611c72565b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c299061398a565b60405180910390fd5b80601660006101000a81548160ff021916908315150217905550601660009054906101000a900460ff1615610c6957436012819055505b50565b600082610c7883611674565b11905092915050565b6000600654905090565b610c9433611c72565b610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061398a565b60405180910390fd5b80600e8190555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ec957610e48826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc89092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ed4848484611d2c565b90509392505050565b610ee633611c72565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c9061398a565b60405180910390fd5b82600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600061106a61101d600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d0565b61105c61104b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d0565b60065461253f90919063ffffffff16565b61253f90919063ffffffff16565b905090565b61107833611c72565b6110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae9061398a565b60405180910390fd5b81601460006101000a81548160ff02191690831515021790555080601460016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61115b33611c72565b61119a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111919061398a565b60405180910390fd5b6000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611207573d6000803e3d6000fd5b5050565b61121433611c72565b611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a9061398a565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006112da827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610af8565b9050919050565b6112ea33611c72565b611329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113209061398a565b60405180910390fd5b8060078190555050565b61133c33611c72565b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061398a565b60405180910390fd5b8060088190555050565b61138e33611c72565b6113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c49061398a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900460ff1681565b61144433611c72565b611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a9061398a565b60405180910390fd5b8360098190555082600b8190555081600a819055506114bd826114af858761258990919063ffffffff16565b61258990919063ffffffff16565b600c8190555080600d8190555050505050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601460019054906101000a900460ff1681565b60075481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b60606040518060400160405280600481526020017f4c554e4900000000000000000000000000000000000000000000000000000000815250905090565b60006115b1338484611d2c565b905092915050565b6115c2336110f0565b611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f8906139f6565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601460009054906101000a900460ff1681565b60125481565b60006116df611681610fed565b6116d16116c260026116b4601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d0565b6125e790919063ffffffff16565b856125e790919063ffffffff16565b61266290919063ffffffff16565b9050919050565b6116ef33611c72565b61172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061398a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613a88565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d89190613838565b602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190613abd565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611883573d6000803e3d6000fd5b505050565b6000601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61191833611c72565b611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e9061398a565b60405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601f819055505050565b611985336110f0565b6119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb906139f6565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600043601354601254611a329190613b19565b10611a5457611a4d600a600d5461253f90919063ffffffff16565b9050611a7e565b8115611a7857611a71600e54600c5461258990919063ffffffff16565b9050611a7e565b600c5490505b919050565b611a8c336110f0565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac2906139f6565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611b919190613bce565b60405180910390a150565b611ba533611c72565b611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb9061398a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528060005260406000206000915054906101000a900460ff1681565b601660009054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000838311158290611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d07919061347d565b60405180910390fd5b5060008385611d1f9190613be9565b9050809150509392505050565b6000602060009054906101000a900460ff1615611d5557611d4e8484846126ac565b9050612538565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611df95750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e4e57601660009054906101000a900460ff16611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490613c69565b60405180910390fd5b5b611e58848361287f565b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611efc5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290613cd5565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fe75750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156120d057601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612090575060085482601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208d9190613b19565b11155b6120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690613d67565b60405180910390fd5b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156121395750601460009054906101000a900460ff165b801561218f5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122775742601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90613df9565b60405180910390fd5b601460019054906101000a900460ff1660ff16426122339190613b19565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61227f61291c565b1561228d5761228c6129f3565b5b6122956130e7565b1580156122ef5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612349576000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161234057600080fd5b6123486130f4565b5b6123d2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc89092919063ffffffff16565b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612420856130fd565b61242a5782612436565b612435858585613154565b5b905061248a81601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161252a919061336b565b60405180910390a360019150505b9392505050565b600061258183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cc8565b905092915050565b60008082846125989190613b19565b9050838110156125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490613e65565b60405180910390fd5b8091505092915050565b6000808314156125fa576000905061265c565b600082846126089190613e85565b90508284826126179190613f0e565b14612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90613fb1565b60405180910390fd5b809150505b92915050565b60006126a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ef565b905092915050565b6000612737826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cc89092919063ffffffff16565b601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127cc82601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286c919061336b565b60405180910390a3600190509392505050565b600754811115806128d95750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f9061401d565b60405180910390fd5b5050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129895750602060009054906101000a900460ff16155b80156129a15750601d60009054906101000a900460ff165b80156129ee5750601f54601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000612a19306114d0565b90506000612a596002612a4b600c54612a3d600954876125e790919063ffffffff16565b61266290919063ffffffff16565b61266290919063ffffffff16565b90506000612a70828461253f90919063ffffffff16565b90506000600267ffffffffffffffff811115612a8f57612a8e61403d565b5b604051908082528060200260200182016040528015612abd5781602001602082028036833780820191505090505b5090503081600081518110612ad557612ad461406c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612b4657612b4561406c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612be9959493929190614194565b600060405180830381600087803b158015612c0357600080fd5b505af1158015612c17573d6000803e3d6000fd5b505050506000612c30824761253f90919063ffffffff16565b90506000612c5e612c4d600260095461266290919063ffffffff16565b600c5461253f90919063ffffffff16565b90506000612c9c6002612c8e84612c80600954886125e790919063ffffffff16565b61266290919063ffffffff16565b61266290919063ffffffff16565b90506000871115612db057601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612d30969594939291906141ee565b60606040518083038185885af1158015612d4e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d73919061424f565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051612da79291906142a2565b60405180910390a15b6000612dec6002612dde85612dd0600a54896125e790919063ffffffff16565b61266290919063ffffffff16565b61266290919063ffffffff16565b90506000612e2a6002612e1c86612e0e600b548a6125e790919063ffffffff16565b61266290919063ffffffff16565b61266290919063ffffffff16565b90506000612e41838361258990919063ffffffff16565b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051612e8f906142fc565b600060405180830381858888f193505050503d8060008114612ecd576040519150601f19603f3d011682016040523d82523d6000602084013e612ed2565b606091505b5050905080612f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0d9061435d565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168561753090604051612f62906142fc565b600060405180830381858888f193505050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b5050905080612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061435d565b60405180910390fd5b6000602060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168461753090604051613035906142fc565b600060405180830381858888f193505050503d8060008114613073576040519150601f19603f3d011682016040523d82523d6000602084013e613078565b606091505b50509050806130bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b39061435d565b60405180910390fd5b50505050505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000806012541415905090565b43601281905550565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806131d6600d546131c86131b9601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611a1f565b866125e790919063ffffffff16565b61266290919063ffffffff16565b905061322a81601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132ca919061336b565b60405180910390a36132e5818461253f90919063ffffffff16565b9150509392505050565b60008083118290613336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332d919061347d565b60405180910390fd5b50600083856133459190613f0e565b9050809150509392505050565b6000819050919050565b61336581613352565b82525050565b6000602082019050613380600083018461335c565b92915050565b600080fd5b61339481613352565b811461339f57600080fd5b50565b6000813590506133b18161338b565b92915050565b6000602082840312156133cd576133cc613386565b5b60006133db848285016133a2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561341e578082015181840152602081019050613403565b8381111561342d576000848401525b50505050565b6000601f19601f8301169050919050565b600061344f826133e4565b61345981856133ef565b9350613469818560208601613400565b61347281613433565b840191505092915050565b600060208201905081810360008301526134978184613444565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134ca8261349f565b9050919050565b6134da816134bf565b81146134e557600080fd5b50565b6000813590506134f7816134d1565b92915050565b6000806040838503121561351457613513613386565b5b6000613522858286016134e8565b9250506020613533858286016133a2565b9150509250929050565b60008115159050919050565b6135528161353d565b82525050565b600060208201905061356d6000830184613549565b92915050565b61357c8161353d565b811461358757600080fd5b50565b60008135905061359981613573565b92915050565b6000602082840312156135b5576135b4613386565b5b60006135c38482850161358a565b91505092915050565b600080604083850312156135e3576135e2613386565b5b60006135f1858286016133a2565b9250506020613602858286016133a2565b9150509250929050565b60008060006060848603121561362557613624613386565b5b6000613633868287016134e8565b9350506020613644868287016134e8565b9250506040613655868287016133a2565b9150509250925092565b60008060006060848603121561367857613677613386565b5b6000613686868287016134e8565b9350506020613697868287016134e8565b92505060406136a8868287016134e8565b9150509250925092565b600060ff82169050919050565b6136c8816136b2565b81146136d357600080fd5b50565b6000813590506136e5816136bf565b92915050565b6000806040838503121561370257613701613386565b5b60006137108582860161358a565b9250506020613721858286016136d6565b9150509250929050565b60006020828403121561374157613740613386565b5b600061374f848285016134e8565b91505092915050565b613761816136b2565b82525050565b600060208201905061377c6000830184613758565b92915050565b6000806040838503121561379957613798613386565b5b60006137a7858286016134e8565b92505060206137b88582860161358a565b9150509250929050565b600080600080608085870312156137dc576137db613386565b5b60006137ea878288016133a2565b94505060206137fb878288016133a2565b935050604061380c878288016133a2565b925050606061381d878288016133a2565b91505092959194509250565b613832816134bf565b82525050565b600060208201905061384d6000830184613829565b92915050565b6000806040838503121561386a57613869613386565b5b6000613878858286016134e8565b9250506020613889858286016134e8565b9150509250929050565b600080604083850312156138aa576138a9613386565b5b60006138b88582860161358a565b92505060206138c9858286016133a2565b9150509250929050565b60006138de8261349f565b9050919050565b6138ee816138d3565b81146138f957600080fd5b50565b60008135905061390b816138e5565b92915050565b60006020828403121561392757613926613386565b5b6000613935848285016138fc565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613974600b836133ef565b915061397f8261393e565b602082019050919050565b600060208201905081810360008301526139a381613967565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006139e06006836133ef565b91506139eb826139aa565b602082019050919050565b60006020820190508181036000830152613a0f816139d3565b9050919050565b7f43616e2774206c657420796f752074616b6520616c6c206e617469766520746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a726023836133ef565b9150613a7d82613a16565b604082019050919050565b60006020820190508181036000830152613aa181613a65565b9050919050565b600081519050613ab78161338b565b92915050565b600060208284031215613ad357613ad2613386565b5b6000613ae184828501613aa8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2482613352565b9150613b2f83613352565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b6457613b63613aea565b5b828201905092915050565b6000819050919050565b6000613b94613b8f613b8a8461349f565b613b6f565b61349f565b9050919050565b6000613ba682613b79565b9050919050565b6000613bb882613b9b565b9050919050565b613bc881613bad565b82525050565b6000602082019050613be36000830184613bbf565b92915050565b6000613bf482613352565b9150613bff83613352565b925082821015613c1257613c11613aea565b5b828203905092915050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000613c536014836133ef565b9150613c5e82613c1d565b602082019050919050565b60006020820190508181036000830152613c8281613c46565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000613cbf6016836133ef565b9150613cca82613c89565b602082019050919050565b60006020820190508181036000830152613cee81613cb2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000613d516025836133ef565b9150613d5c82613cf5565b604082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f206f7065726174696f6e73000000000000000000000000000000000000000000602082015250565b6000613de3602b836133ef565b9150613dee82613d87565b604082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e4f601b836133ef565b9150613e5a82613e19565b602082019050919050565b60006020820190508181036000830152613e7e81613e42565b9050919050565b6000613e9082613352565b9150613e9b83613352565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ed457613ed3613aea565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f1982613352565b9150613f2483613352565b925082613f3457613f33613edf565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f9b6021836133ef565b9150613fa682613f3f565b604082019050919050565b60006020820190508181036000830152613fca81613f8e565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006140076011836133ef565b915061401282613fd1565b602082019050919050565b6000602082019050818103600083015261403681613ffa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006140c06140bb6140b68461409b565b613b6f565b613352565b9050919050565b6140d0816140a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61410b816134bf565b82525050565b600061411d8383614102565b60208301905092915050565b6000602082019050919050565b6000614141826140d6565b61414b81856140e1565b9350614156836140f2565b8060005b8381101561418757815161416e8882614111565b975061417983614129565b92505060018101905061415a565b5085935050505092915050565b600060a0820190506141a9600083018861335c565b6141b660208301876140c7565b81810360408301526141c88186614136565b90506141d76060830185613829565b6141e4608083018461335c565b9695505050505050565b600060c0820190506142036000830189613829565b614210602083018861335c565b61421d60408301876140c7565b61422a60608301866140c7565b6142376080830185613829565b61424460a083018461335c565b979650505050505050565b60008060006060848603121561426857614267613386565b5b600061427686828701613aa8565b935050602061428786828701613aa8565b925050604061429886828701613aa8565b9150509250925092565b60006040820190506142b7600083018561335c565b6142c4602083018461335c565b9392505050565b600081905092915050565b50565b60006142e66000836142cb565b91506142f1826142d6565b600082019050919050565b6000614307826142d9565b9150819050919050565b7f72656365697665722072656a656374656420414441207472616e736665720000600082015250565b6000614347601e836133ef565b915061435282614311565b602082019050919050565b600060208201905081810360008301526143768161433a565b905091905056fea264697066735822122086be7b30e40209be929aa23704b36427dbf17b999dd4c9a9c67bd9dbb3f06b3664736f6c634300080b0033