ERC-20
Overview
Max Total Supply
43,096,664.360479554337064599 MVPTTRACKER
Holders
1,388
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
485.059858916102982328 MVPTTRACKERValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MAGAVPDividendTracker
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-10 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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 ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual 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); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { 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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } 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) { 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public payable override { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add( msg.value ); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal virtual returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); (bool success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedDividendCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare .mul(value) .toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from] .add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub( _magCorrection ); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } contract MAGAVP is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public DEAD = 0x000000000000000000000000000000000000dEaD; bool private swapping; bool public tradingEnabled = false; uint256 public sellAmount = 1; uint256 public buyAmount = 1; uint256 private totalSellFees; uint256 private totalBuyFees; MAGAVPDividendTracker public dividendTracker; address payable public marketingWallet; address payable public buybackWallet; // Max tx, dividend threshold and tax variables uint256 public maxWallet; uint256 public swapTokensAtAmount; uint256 public sellRewardsFee; uint256 public sellMarketingFees; uint256 public buyMarketingFees; uint256 public buyRewardsFee; uint256 public buyBuyBackFee; uint256 public sellBuyBackFee; // gas for processing auto claim dividends uint256 public gasForProcessing = 300000; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; //for allowing specific address to trade while trading has not been enabled yet mapping(address => bool) private canTransferBeforeTradingIsEnabled; event updateMarketingWallet(address wallet); event updatebuybackWallet(address wallet); event UpdateDividendTracker( address indexed newAddress, address indexed oldAddress ); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event TradingEnabled(); event UpdateFees( uint256 sellMarketingFees, uint256 sellRewardsFee, uint256 buyMarketingFees, uint256 buyRewardsFee, uint256 buyBuyBackFee, uint256 sellBuyBackFee ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated( uint256 indexed newValue, uint256 indexed oldValue ); event SendDividends(uint256 amount, uint256 opAmount, bool success); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); event UpdatePayoutToken(address token); constructor() ERC20("MAGA VP", "MVP") { marketingWallet = payable(0x2b486FE86f88EA5a29Ab9c53dD70Da38b043B137); buybackWallet = payable(0xD53cF51AF3280BEaa3eb95BE6Ba983B6B6982b5c); address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; buyMarketingFees = 50; sellMarketingFees = 50; buyRewardsFee = 100; sellRewardsFee = 100; buyBuyBackFee = 50; sellBuyBackFee = 50; totalBuyFees = buyRewardsFee .add(buyMarketingFees) .add(buyBuyBackFee); totalSellFees = sellRewardsFee .add(sellMarketingFees) .add(sellBuyBackFee); dividendTracker = new MAGAVPDividendTracker( payable(this), router, 0x576e2BeD8F7b46D34016198911Cdf9886f78bea7, "MAGAVPTRACKER", "MVPTTRACKER" ); uniswapV2Router = IUniswapV2Router02(router); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _setAutomatedMarketMakerPair(uniswapV2Pair, true); // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(DEAD); dividendTracker.excludedFromDividends(address(0)); dividendTracker.excludeFromDividends(router); dividendTracker.excludeFromDividends(marketingWallet); dividendTracker.excludeFromDividends(owner()); // exclude from paying fees or having max transaction amount _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(dividendTracker)] = true; _isExcludedFromFees[address(marketingWallet)] = true; _isExcludedFromFees[address(buybackWallet)] = true; _isExcludedFromFees[msg.sender] = true; uint256 totalTokenSupply = (50_000_000) * (10**18); _mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply maxWallet = totalTokenSupply / 50; // 2% swapTokensAtAmount = totalTokenSupply / 1000; // 0.1%; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(this)] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} function enableTrading() external onlyOwner { require(!tradingEnabled); tradingEnabled = true; emit TradingEnabled(); } // set new marketing wallet function setMarketingWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; marketingWallet = payable(wallet); emit updateMarketingWallet(wallet); } //set new buyback wallet function setBuybackWallet(address wallet) external onlyOwner { _isExcludedFromFees[wallet] = true; buybackWallet = payable(wallet); emit updatebuybackWallet(wallet); } // exclude a wallet from fees function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } // exclude from dividends (rewards) function setExcludeDividends(address account) public onlyOwner { dividendTracker.excludeFromDividends(account); } // include in dividends function setIncludeDividends(address account) public onlyOwner { dividendTracker.includeFromDividends(account); dividendTracker.setBalance(account, 0); } //allow a wallet to trade before trading enabled function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } // set max wallet, can not be lower than 0.05% of supply function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%"); maxWallet = value; } // rewards threshold function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function setAllowCustomTokens(bool allow) public onlyOwner { dividendTracker.setAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) public onlyOwner { dividendTracker.setAllowAutoReinvest(allow); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 1000000); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function transferAdmin(address newOwner) public onlyOwner { dividendTracker.excludeFromDividends(newOwner); _isExcludedFromFees[newOwner] = true; transferOwnership(newOwner); } function updateFees( uint256 marketingBuy, uint256 marketingSell, uint256 RewardsBuy, uint256 RewardsSell, uint256 buybackBuy, uint256 buybackSell ) public onlyOwner { buyMarketingFees = marketingBuy; buyRewardsFee = RewardsBuy; sellMarketingFees = marketingSell; sellRewardsFee = RewardsSell; buyBuyBackFee = buybackBuy; sellBuyBackFee = buybackSell; totalSellFees = sellRewardsFee .add(sellMarketingFees) .add(sellBuyBackFee); totalBuyFees = buyRewardsFee .add(buyMarketingFees) .add(buyBuyBackFee); require(totalSellFees <= 500 && totalBuyFees <= 500, "total fees cannot exceed 5% sell or buy"); emit UpdateFees( sellMarketingFees, sellRewardsFee, buyMarketingFees, buyRewardsFee, buyBuyBackFee, sellBuyBackFee ); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function withdrawableDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) = dividendTracker.process(gas); emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, false, gas, tx.origin ); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function getLastProcessedIndex() external view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function setAutoClaim(bool value) external { dividendTracker.setAutoClaim(msg.sender, value); } function setReinvest(bool value) external { dividendTracker.setReinvest(msg.sender, value); } function setDividendsPaused(bool value) external onlyOwner { dividendTracker.setDividendsPaused(value); } function isExcludedFromAutoClaim(address account) external view returns (bool) { return dividendTracker.isExcludedFromAutoClaim(account); } function isReinvest(address account) external view returns (bool) { return dividendTracker.isReinvest(account); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 RewardsFee; uint256 marketingFees; uint256 buybackFee; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (amount == 0) { super._transfer(from, to, 0); return; } if (to == DEAD) { _burn(from, amount); return; } else if ( !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { bool isSelling = automatedMarketMakerPairs[to]; bool isBuying = automatedMarketMakerPairs[from]; if (!isBuying && !isSelling) { super._transfer(from, to, amount); dividendTracker.setBalance(from, balanceOf(from)); dividendTracker.setBalance(to, balanceOf(to)); return; } else if (isSelling) { RewardsFee = sellRewardsFee; marketingFees = sellMarketingFees; buybackFee = sellBuyBackFee; } else if (isBuying) { RewardsFee = buyRewardsFee; marketingFees = buyMarketingFees; buybackFee = buyBuyBackFee; uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet,"Exceeds maximum wallet token amount." ); } uint256 totalFees = RewardsFee .add(marketingFees + buybackFee); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !automatedMarketMakerPairs[from]) { swapping = true; uint256 remainingBalance = balanceOf(address(this)); swapAndSendDividends(remainingBalance); buyAmount = 1; sellAmount = 1; swapping = false; } uint256 fees = amount.mul(totalFees).div(10000); amount = amount.sub(fees); if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); } super._transfer(from, to, amount); dividendTracker.setBalance(from, balanceOf(from)); dividendTracker.setBalance(to, balanceOf(to)); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function updatePayoutToken(address token) public onlyOwner { dividendTracker.updatePayoutToken(token); emit UpdatePayoutToken(token); } function getPayoutToken() public view returns (address) { return dividendTracker.getPayoutToken(); } function getMinimumTokenBalanceForAutoDividends() public view returns (uint256) { return dividendTracker.getMinimumTokenBalanceForAutoDividends(); } function getMinimumTokenBalanceForDividends() public view returns (uint256) { return dividendTracker.getMinimumTokenBalanceForDividends(); } function setMinimumTokenBalanceForAutoDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForAutoDividends(value); } function setMinimumTokenBalanceForDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForDividends(value); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); uint256 totalAmount = buyAmount.add(sellAmount); bool success = true; bool successOp1 = true; bool successOp2 = true; uint256 dividends; uint256 dividendsFromBuy; uint256 dividendsFromSell; if (buyRewardsFee > 0) { dividendsFromBuy = address(this) .balance .mul(buyAmount) .div(totalAmount) .mul(buyRewardsFee) .div(buyRewardsFee + buyMarketingFees + buyBuyBackFee); } if (sellRewardsFee > 0) { dividendsFromSell = address(this) .balance .mul(sellAmount) .div(totalAmount) .mul(sellRewardsFee) .div(sellRewardsFee + sellMarketingFees + sellBuyBackFee); } dividends = dividendsFromBuy.add(dividendsFromSell); if (dividends > 0) { (success, ) = address(dividendTracker).call{value: dividends}(""); } uint256 _completeFees = sellMarketingFees.add(sellBuyBackFee) + buyMarketingFees.add(buyBuyBackFee); uint256 feePortions; if (_completeFees > 0) { feePortions = address(this).balance.div(_completeFees); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 buybackPayout = buyBuyBackFee.add(sellBuyBackFee) * feePortions; if (marketingPayout > 0) { (successOp1, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (buybackPayout > 0) { (successOp2, ) = address(buybackWallet).call{value: buybackPayout}(""); } emit SendDividends( dividends, marketingPayout + buybackPayout, success && successOp1 && successOp2 ); } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length,"Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); dividendTracker.setBalance(payable(wallet), balanceOf(wallet)); } } } contract MAGAVPDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping(address => bool) public excludedFromDividends; mapping(address => bool) public excludedFromAutoClaim; mapping(address => bool) public autoReinvest; address public defaultToken; bool public allowCustomTokens; bool public allowAutoReinvest; bool public dividendsPaused = false; string private trackerName; string private trackerTicker; IUniswapV2Router02 public uniswapV2Router; MAGAVP public MAGAVPContract; mapping(address => uint256) public lastClaimTimes; uint256 private minimumTokenBalanceForAutoDividends; uint256 private minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event DividendReinvested( address indexed acount, uint256 value, bool indexed automatic ); event Claim( address indexed account, uint256 amount, bool indexed automatic ); event DividendsPaused(bool paused); event SetAllowCustomTokens(bool allow); event SetAllowAutoReinvest(bool allow); constructor( address payable mainContract, address router, address token, string memory _name, string memory _ticker ) DividendPayingToken(_name, _ticker) { trackerName = _name; trackerTicker = _ticker; defaultToken = token; MAGAVPContract = MAGAVP(mainContract); minimumTokenBalanceForAutoDividends = 50_000_000 * (10**18); minimumTokenBalanceForDividends = 100 * (10**18); uniswapV2Router = IUniswapV2Router02(router); allowCustomTokens = true; allowAutoReinvest = false; } function decimals() public view virtual override returns (uint8) { return 18; } function name() public view virtual override returns (string memory) { return trackerName; } function symbol() public view virtual override returns (string memory) { return trackerTicker; } function _transfer( address, address, uint256 ) internal pure override { require(false, "MAGAVP_Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public pure override { require( false, "MAGAVP_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main MAGAVP contract." ); } function isExcludedFromAutoClaim(address account) external view onlyOwner returns (bool) { return excludedFromAutoClaim[account]; } function isReinvest(address account) external view onlyOwner returns (bool) { return autoReinvest[account]; } function setAllowCustomTokens(bool allow) external onlyOwner { require(allowCustomTokens != allow); allowCustomTokens = allow; emit SetAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) external onlyOwner { require(allowAutoReinvest != allow); allowAutoReinvest = allow; emit SetAllowAutoReinvest(allow); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeFromDividends(address account) external onlyOwner { excludedFromDividends[account] = false; } function setAutoClaim(address account, bool value) external onlyOwner { excludedFromAutoClaim[account] = value; } function setReinvest(address account, bool value) external onlyOwner { autoReinvest[account] = value; } function setMinimumTokenBalanceForAutoDividends(uint256 value) external onlyOwner { minimumTokenBalanceForAutoDividends = value * (10**18); } function setMinimumTokenBalanceForDividends(uint256 value) external onlyOwner { minimumTokenBalanceForDividends = value * (10**18); } function setDividendsPaused(bool value) external onlyOwner { require(dividendsPaused != value); dividendsPaused = value; emit DividendsPaused(value); } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime ) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub( int256(lastProcessedIndex) ); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add( int256(processesUntilEndOfArray) ); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256 ) { if (index >= tokenHoldersMap.size()) { return ( 0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0 ); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function setBalance(address account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance < minimumTokenBalanceForDividends) { tokenHoldersMap.remove(account); _setBalance(account, 0); return; } _setBalance(account, newBalance); if (newBalance >= minimumTokenBalanceForAutoDividends) { tokenHoldersMap.set(account, newBalance); } else { tokenHoldersMap.remove(account); } } function process(uint256 gas) public returns ( uint256, uint256, uint256 ) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0 || dividendsPaused) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= numberOfTokenHolders) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (!excludedFromAutoClaim[account]) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { if (dividendsPaused) { return false; } bool reinvest = autoReinvest[account]; if (automatic && reinvest && !allowAutoReinvest) { return false; } uint256 amount = reinvest ? _reinvestDividendOfUser(account) : _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; if (reinvest) { emit DividendReinvested(account, amount, automatic); } else { emit Claim(account, amount, automatic); } return true; } return false; } function updatePayoutToken(address token) public onlyOwner { defaultToken = token; } function getPayoutToken() public view returns (address) { return defaultToken; } function getMinimumTokenBalanceForAutoDividends() public view returns (uint256) { return minimumTokenBalanceForAutoDividends; } function getMinimumTokenBalanceForDividends() public view returns (uint256) { return minimumTokenBalanceForDividends; } function _reinvestDividendOfUser(address account) private returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { bool success; withdrawnDividends[account] = withdrawnDividends[account].add( _withdrawableDividend ); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(MAGAVPContract); uint256 prevBalance = MAGAVPContract.balanceOf(address(this)); // make the swap try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, address(this), block.timestamp ) { uint256 received = MAGAVPContract .balanceOf(address(this)) .sub(prevBalance); if (received > 0) { success = true; MAGAVPContract.transfer(account, received); } else { success = false; } } catch { success = false; } if (!success) { withdrawnDividends[account] = withdrawnDividends[account].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function _withdrawDividendOfUser(address payable user) internal override returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); address tokenAddress = defaultToken; bool success; if (tokenAddress == address(0)) { (success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); } else { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, user, block.timestamp ) { success = true; } catch { success = false; } } if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } else { emit DividendWithdrawn(user, _withdrawableDividend); } return _withdrawableDividend; } return 0; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) internal view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) internal view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) internal view returns (address) { return map.keys[index]; } function size(Map storage map) internal view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) internal { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) internal { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"mainContract","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"acount","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"DividendReinvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"DividendsPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"allow","type":"bool"}],"name":"SetAllowAutoReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"allow","type":"bool"}],"name":"SetAllowCustomTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAGAVPContract","outputs":[{"internalType":"contract MAGAVP","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowAutoReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowCustomTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"autoReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumTokenBalanceForAutoDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526012805460ff60b01b191690553480156200001e57600080fd5b506040516200307938038062003079833981016040819052620000419162000243565b8181818160036200005383826200037d565b5060046200006282826200037d565b50505050506000620000796200016160201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d583826200037d565b506014620000e482826200037d565b505060128054601680546001600160a01b03199081166001600160a01b03988916179091556a295be96e6406697200000060185568056bc75e2d631000006019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b19169091555062000449565b3390565b6001600160a01b03811681146200017b57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a657600080fd5b81516001600160401b0380821115620001c357620001c36200017e565b604051601f8301601f19908116603f01168101908282118183101715620001ee57620001ee6200017e565b816040528381526020925086838588010111156200020b57600080fd5b600091505b838210156200022f578582018301518183018401529082019062000210565b600093810190920192909252949350505050565b600080600080600060a086880312156200025c57600080fd5b8551620002698162000165565b60208701519095506200027c8162000165565b60408701519094506200028f8162000165565b60608701519093506001600160401b0380821115620002ad57600080fd5b620002bb89838a0162000194565b93506080880151915080821115620002d257600080fd5b50620002e18882890162000194565b9150509295509295909350565b600181811c908216806200030357607f821691505b6020821081036200032457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037857600081815260208120601f850160051c81016020861015620003535750805b601f850160051c820191505b8181101562000374578281556001016200035f565b5050505b505050565b81516001600160401b038111156200039957620003996200017e565b620003b181620003aa8454620002ee565b846200032a565b602080601f831160018114620003e95760008415620003d05750858301515b600019600386901b1c1916600185901b17855562000374565b600085815260208120601f198616915b828110156200041a57888601518255948401946001909101908401620003f9565b5085821015620004395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c2080620004596000396000f3fe6080604052600436106103395760003560e01c806370a08231116101ab578063a9059cbb116100f7578063dd62ed3e11610095578063e7cb7f871161006f578063e7cb7f8714610a12578063f2fde38b14610a27578063fbcbc0f114610a47578063ffb2c47914610a6757600080fd5b8063dd62ed3e14610997578063e30443bc146109dd578063e7841ec0146109fd57600080fd5b8063ba079d49116100d1578063ba079d4914610922578063bc4c4b3714610942578063bdd4f29f14610962578063d8032ed31461097757600080fd5b8063a9059cbb146108ac578063aafd847a146108cc578063b22f8a041461090257600080fd5b806391b89fba116101645780639eec101e1161013e5780639eec101e1461082a578063a42340691461084b578063a457c2d71461086c578063a8b9d2401461088c57600080fd5b806391b89fba146107d557806395d89b41146107f55780639c3372ea1461080a57600080fd5b806370a0823114610716578063715018a61461074c57806374c13fda1461076157806385a6b3ae146107815780638bc1d639146107975780638da5cb5b146107b757600080fd5b8063313ce567116102855780635183d6fd1161022357806369aaae40116101fd57806369aaae40146106915780636a474002146106b15780636b69163b146106c65780636d48467b146106f657600080fd5b80635183d6fd146105fa5780635a84c5eb146106515780635ebf4db91461067157600080fd5b8063395093511161025f578063395093511461056957806340ffdd801461058957806341808904146105a95780634e7b827f146105ca57600080fd5b8063313ce5671461050d57806331e79db0146105295780633599bb171461054957600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461049957806325cd3598146104b957806327ce0147146104d75780633009a609146104f757600080fd5b806318160ddd146104275780631d4ff89a1461043c578063226cfa3d1461046c57600080fd5b806303c833021461034d57806306fdde03146103555780630928847114610380578063095ea7b3146103a057806309bbedde146103d05780631694505e146103ef57600080fd5b3661034857610346610aa2565b005b600080fd5b610346610aa2565b34801561036157600080fd5b5061036a610b35565b604051610377919061279c565b60405180910390f35b34801561038c57600080fd5b5061034661039b366004612802565b610bc7565b3480156103ac57600080fd5b506103c06103bb36600461281f565b610c1b565b6040519015158152602001610377565b3480156103dc57600080fd5b50600a545b604051908152602001610377565b3480156103fb57600080fd5b5060155461040f906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b34801561043357600080fd5b506002546103e1565b34801561044857600080fd5b506103c0610457366004612802565b60116020526000908152604090205460ff1681565b34801561047857600080fd5b506103e1610487366004612802565b60176020526000908152604090205481565b3480156104a557600080fd5b506103c06104b436600461284b565b610c32565b3480156104c557600080fd5b506012546001600160a01b031661040f565b3480156104e357600080fd5b506103e16104f2366004612802565b610c9b565b34801561050357600080fd5b506103e1600e5481565b34801561051957600080fd5b5060405160128152602001610377565b34801561053557600080fd5b50610346610544366004612802565b610cf7565b34801561055557600080fd5b5061034661056436600461289a565b610d91565b34801561057557600080fd5b506103c061058436600461281f565b610e32565b34801561059557600080fd5b506103466105a436600461289a565b610e68565b3480156105b557600080fd5b506012546103c090600160a81b900460ff1681565b3480156105d657600080fd5b506103c06105e5366004612802565b600f6020526000908152604090205460ff1681565b34801561060657600080fd5b5061061a6106153660046128b7565b610efe565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610377565b34801561065d57600080fd5b5061034661066c3660046128b7565b610f5e565b34801561067d57600080fd5b5061034661068c3660046128b7565b610fa0565b34801561069d57600080fd5b5060165461040f906001600160a01b031681565b3480156106bd57600080fd5b50610346610fe2565b3480156106d257600080fd5b506103c06106e1366004612802565b60106020526000908152604090205460ff1681565b34801561070257600080fd5b506103c0610711366004612802565b611088565b34801561072257600080fd5b506103e1610731366004612802565b6001600160a01b031660009081526020819052604090205490565b34801561075857600080fd5b506103466110d4565b34801561076d57600080fd5b5060125461040f906001600160a01b031681565b34801561078d57600080fd5b506103e160085481565b3480156107a357600080fd5b506103466107b23660046128d0565b611148565b3480156107c357600080fd5b506009546001600160a01b031661040f565b3480156107e157600080fd5b506103e16107f0366004612802565b61119d565b34801561080157600080fd5b5061036a6111a8565b34801561081657600080fd5b5061034661082536600461289a565b6111b7565b34801561083657600080fd5b506012546103c090600160a01b900460ff1681565b34801561085757600080fd5b506012546103c090600160b01b900460ff1681565b34801561087857600080fd5b506103c061088736600461281f565b61124d565b34801561089857600080fd5b506103e16108a7366004612802565b61129c565b3480156108b857600080fd5b506103c06108c736600461281f565b6112c8565b3480156108d857600080fd5b506103e16108e7366004612802565b6001600160a01b031660009081526007602052604090205490565b34801561090e57600080fd5b5061034661091d3660046128d0565b6112d5565b34801561092e57600080fd5b506103c061093d366004612802565b61132a565b34801561094e57600080fd5b506103c061095d3660046128d0565b611376565b34801561096e57600080fd5b506019546103e1565b34801561098357600080fd5b50610346610992366004612802565b6114f7565b3480156109a357600080fd5b506103e16109b2366004612909565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e957600080fd5b506103466109f836600461281f565b611543565b348015610a0957600080fd5b50600e546103e1565b348015610a1e57600080fd5b506018546103e1565b348015610a3357600080fd5b50610346610a42366004612802565b6115db565b348015610a5357600080fd5b5061061a610a62366004612802565b6116c6565b348015610a7357600080fd5b50610a87610a823660046128b7565b611775565b60408051938452602084019290925290820152606001610377565b6000610aad60025490565b11610ab757600080fd5b3415610b3357610aea610ac960025490565b610ad734600160801b61189b565b610ae1919061294d565b60055490611924565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b2f9034611924565b6008555b565b606060138054610b449061296f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b709061296f565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bf1906129a9565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c28338484611983565b5060015b92915050565b6000610c3f848484611aa7565b610c918433610c8c85604051806060016040528060288152602001612b9e602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b0a565b611983565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610ced92610ce892610ce291610cdd919061189b565b611b44565b90611b54565b611b92565b610c2c919061294d565b6009546001600160a01b03163314610d215760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d4f908290611ba5565b610d5a600a82611c04565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610bf1906129a9565b801515601260169054906101000a900460ff16151503610dda57600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e2790831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c28918590610c8c9086611924565b6009546001600160a01b03163314610e925760405162461bcd60e51b8152600401610bf1906129a9565b801515601260159054906101000a900460ff16151503610eb157600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e2790831515815260200190565b600080600080600080610f10600a5490565b8710610f2f575060009450600019935083925084915081905080610f55565b6000610f3c600a89611d3f565b9050610f47816116c6565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f885760405162461bcd60e51b8152600401610bf1906129a9565b610f9a81670de0b6b3a76400006129de565b60185550565b6009546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610bf1906129a9565b610fdc81670de0b6b3a76400006129de565b60195550565b60405162461bcd60e51b815260206004820152606960248201527f4d41474156505f4469766964656e645f547261636b65723a207769746864726160448201527f774469766964656e642064697361626c65642e20557365207468652027636c6160648201527f696d272066756e6374696f6e206f6e20746865206d61696e204d41474156502060848201526831b7b73a3930b1ba1760b91b60a482015260c401610bf1565b6009546000906001600160a01b031633146110b55760405162461bcd60e51b8152600401610bf1906129a9565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bf1906129a9565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b031633146111725760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c2c8261129c565b606060148054610b449061296f565b6009546001600160a01b031633146111e15760405162461bcd60e51b8152600401610bf1906129a9565b801515601260149054906101000a900460ff1615150361120057600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e2790831515815260200190565b6000610c283384610c8c85604051806060016040528060258152602001612bc6602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b0a565b6001600160a01b038116600090815260076020526040812054610c2c906112c284610c9b565b90611d72565b6000610c28338484611aa7565b6009546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113575760405162461bcd60e51b8152600401610bf1906129a9565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113a35760405162461bcd60e51b8152600401610bf1906129a9565b601254600160b01b900460ff16156113bd57506000610c2c565b6001600160a01b03831660009081526011602052604090205460ff168280156113e35750805b80156113f95750601254600160a81b900460ff16155b15611408576000915050610c2c565b60008161141d5761141885611db4565b611426565b6114268561206d565b905080156114ec576001600160a01b0385166000908152601760205260409020429055811561149a57831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c8360405161148d91815260200190565b60405180910390a36114e1565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114d891815260200190565b60405180910390a35b600192505050610c2c565b506000949350505050565b6009546001600160a01b031633146115215760405162461bcd60e51b8152600401610bf1906129a9565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b0382166000908152600f602052604090205460ff166115ad576019548110156115b1576115a2600a83611c04565b6115ad826000611ba5565b5050565b6115bb8282611ba5565b60185481106115d0576115ad600a83836123e0565b6115ad600a83611c04565b6009546001600160a01b031633146116055760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03811661166a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bf1565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116d8600a87612489565b945060001993506000851261173a57600e5485111561170657600e546116ff9086906124d4565b935061173a565b600e54600a546000911061171b57600061172a565b600e54600a5461172a91611d72565b90506117368682611b54565b9450505b6117438661129c565b925061174e86610c9b565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117955750601254600160b01b900460ff165b156117ab575050600e5460009250829150611894565b600e546000805a90506000805b89841080156117c657508582105b1561188357846117d5816129f5565b9550508585106117e457600094505b6000600a60000186815481106117fc576117fc612a0e565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661184957611836816001611376565b156118495781611845816129f5565b9250505b82611853816129f5565b93505060005a90508085111561187a576118776118708683611d72565b8790611924565b95505b93506117b89050565b600e85905590975095509193505050505b9193909250565b6000826000036118ad57506000610c2c565b60006118b983856129de565b9050826118c6858361294d565b1461191d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bf1565b9392505050565b6000806119318385612a24565b90508381101561191d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bf1565b6001600160a01b0383166119e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf1565b6001600160a01b038216611a465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602d60248201527f4d41474156505f4469766964656e645f547261636b65723a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b6064820152608401610bf1565b505050565b60008184841115611b2e5760405162461bcd60e51b8152600401610bf1919061279c565b506000611b3b8486612a37565b95945050505050565b60008181811215610c2c57600080fd5b600080611b618385612a4a565b905060008312158015611b745750838112155b80611b895750600083128015611b8957508381125b61191d57600080fd5b600080821215611ba157600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611be4576000611bd28383611d72565b9050611bde8482612511565b50505050565b80821015611b05576000611bf88284611d72565b9050611bde8482612575565b6001600160a01b038116600090815260038301602052604090205460ff16611c2a575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c7491612a37565b90506000846000018281548110611c8d57611c8d612a0e565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cdc57611cdc612a0e565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d1657611d16612a72565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d5657611d56612a0e565b6000918252602090912001546001600160a01b03169392505050565b600061191d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b0a565b600080611dc08361129c565b90508015612064576001600160a01b038316600090815260076020526040902054611deb9082611924565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e70576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e60576040519150601f19603f3d011682016040523d82523d6000602084013e611e65565b606091505b505080915050611fca565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efe9190612a88565b81600081518110611f1157611f11612a0e565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f4557611f45612a0e565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611f8b9060009086908c904290600401612ae9565b6000604051808303818588803b158015611fa457600080fd5b505af193505050508015611fb6575060015b611fc35760009150611fc8565b600191505b505b80612018576001600160a01b038516600090815260076020526040902054611ff29084611d72565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161205391815260200190565b60405180910390a250909392505050565b50600092915050565b6000806120798361129c565b90508015612064576001600160a01b0383166000908152600760205260408120546120a49083611924565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190612a88565b8160008151811061216357612163612a0e565b6001600160a01b03928316602091820292909201015260165482519116908290600190811061219457612194612a0e565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122129190612b1e565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061224c90600090879030904290600401612ae9565b6000604051808303818588803b15801561226557600080fd5b505af193505050508015612277575060015b6122845760009250612387565b6016546040516370a0823160e01b81523060048201526000916122f79184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190612b1e565b905080156123805760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612b37565b50612385565b600093505b505b826123d6576001600160a01b0386166000908152600760205260409020546123af9085611d72565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612425576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124b45750600019610c2c565b506001600160a01b03166000908152600291909101602052604090205490565b6000806124e18385612b54565b9050600083121580156124f45750838113155b80611b895750600083128015611b89575083811361191d57600080fd5b61251b82826125b9565b612555612536610cdd8360055461189b90919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124d4565b6001600160a01b0390921660009081526006602052604090209190915550565b61257f8282612698565b61255561259a610cdd8360055461189b90919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b54565b6001600160a01b03821661260f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bf1565b60025461261c9082611924565b6002556001600160a01b0382166000908152602081905260409020546126429082611924565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166126f85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bf1565b61273581604051806060016040528060228152602001612b7c602291396001600160a01b0385166000908152602081905260409020549190611b0a565b6001600160a01b03831660009081526020819052604090205560025461275b9082611d72565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161268c565b600060208083528351808285015260005b818110156127c9578581018301518582016040015282016127ad565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127ff57600080fd5b50565b60006020828403121561281457600080fd5b813561191d816127ea565b6000806040838503121561283257600080fd5b823561283d816127ea565b946020939093013593505050565b60008060006060848603121561286057600080fd5b833561286b816127ea565b9250602084013561287b816127ea565b929592945050506040919091013590565b80151581146127ff57600080fd5b6000602082840312156128ac57600080fd5b813561191d8161288c565b6000602082840312156128c957600080fd5b5035919050565b600080604083850312156128e357600080fd5b82356128ee816127ea565b915060208301356128fe8161288c565b809150509250929050565b6000806040838503121561291c57600080fd5b8235612927816127ea565b915060208301356128fe816127ea565b634e487b7160e01b600052601160045260246000fd5b60008261296a57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061298357607f821691505b6020821081036129a357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c2c57610c2c612937565b600060018201612a0757612a07612937565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c2c57610c2c612937565b81810381811115610c2c57610c2c612937565b8082018281126000831280158216821582161715612a6a57612a6a612937565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a9a57600080fd5b815161191d816127ea565b600081518084526020808501945080840160005b83811015612ade5781516001600160a01b031687529582019590820190600101612ab9565b509495945050505050565b848152608060208201526000612b026080830186612aa5565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b3057600080fd5b5051919050565b600060208284031215612b4957600080fd5b815161191d8161288c565b8181036000831280158383131683831282161715612b7457612b74612937565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dc8ba06d694f13c3b73a01233220b58dd03cc55a385877431e46f702d1024d0464736f6c63430008110033000000000000000000000000766d2fcece1e3eef32aae8711ab886ee95fd5b2a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000576e2bed8f7b46d34016198911cdf9886f78bea700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d4d4147415650545241434b455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d565054545241434b4552000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103395760003560e01c806370a08231116101ab578063a9059cbb116100f7578063dd62ed3e11610095578063e7cb7f871161006f578063e7cb7f8714610a12578063f2fde38b14610a27578063fbcbc0f114610a47578063ffb2c47914610a6757600080fd5b8063dd62ed3e14610997578063e30443bc146109dd578063e7841ec0146109fd57600080fd5b8063ba079d49116100d1578063ba079d4914610922578063bc4c4b3714610942578063bdd4f29f14610962578063d8032ed31461097757600080fd5b8063a9059cbb146108ac578063aafd847a146108cc578063b22f8a041461090257600080fd5b806391b89fba116101645780639eec101e1161013e5780639eec101e1461082a578063a42340691461084b578063a457c2d71461086c578063a8b9d2401461088c57600080fd5b806391b89fba146107d557806395d89b41146107f55780639c3372ea1461080a57600080fd5b806370a0823114610716578063715018a61461074c57806374c13fda1461076157806385a6b3ae146107815780638bc1d639146107975780638da5cb5b146107b757600080fd5b8063313ce567116102855780635183d6fd1161022357806369aaae40116101fd57806369aaae40146106915780636a474002146106b15780636b69163b146106c65780636d48467b146106f657600080fd5b80635183d6fd146105fa5780635a84c5eb146106515780635ebf4db91461067157600080fd5b8063395093511161025f578063395093511461056957806340ffdd801461058957806341808904146105a95780634e7b827f146105ca57600080fd5b8063313ce5671461050d57806331e79db0146105295780633599bb171461054957600080fd5b806318160ddd116102f257806323b872dd116102cc57806323b872dd1461049957806325cd3598146104b957806327ce0147146104d75780633009a609146104f757600080fd5b806318160ddd146104275780631d4ff89a1461043c578063226cfa3d1461046c57600080fd5b806303c833021461034d57806306fdde03146103555780630928847114610380578063095ea7b3146103a057806309bbedde146103d05780631694505e146103ef57600080fd5b3661034857610346610aa2565b005b600080fd5b610346610aa2565b34801561036157600080fd5b5061036a610b35565b604051610377919061279c565b60405180910390f35b34801561038c57600080fd5b5061034661039b366004612802565b610bc7565b3480156103ac57600080fd5b506103c06103bb36600461281f565b610c1b565b6040519015158152602001610377565b3480156103dc57600080fd5b50600a545b604051908152602001610377565b3480156103fb57600080fd5b5060155461040f906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b34801561043357600080fd5b506002546103e1565b34801561044857600080fd5b506103c0610457366004612802565b60116020526000908152604090205460ff1681565b34801561047857600080fd5b506103e1610487366004612802565b60176020526000908152604090205481565b3480156104a557600080fd5b506103c06104b436600461284b565b610c32565b3480156104c557600080fd5b506012546001600160a01b031661040f565b3480156104e357600080fd5b506103e16104f2366004612802565b610c9b565b34801561050357600080fd5b506103e1600e5481565b34801561051957600080fd5b5060405160128152602001610377565b34801561053557600080fd5b50610346610544366004612802565b610cf7565b34801561055557600080fd5b5061034661056436600461289a565b610d91565b34801561057557600080fd5b506103c061058436600461281f565b610e32565b34801561059557600080fd5b506103466105a436600461289a565b610e68565b3480156105b557600080fd5b506012546103c090600160a81b900460ff1681565b3480156105d657600080fd5b506103c06105e5366004612802565b600f6020526000908152604090205460ff1681565b34801561060657600080fd5b5061061a6106153660046128b7565b610efe565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610377565b34801561065d57600080fd5b5061034661066c3660046128b7565b610f5e565b34801561067d57600080fd5b5061034661068c3660046128b7565b610fa0565b34801561069d57600080fd5b5060165461040f906001600160a01b031681565b3480156106bd57600080fd5b50610346610fe2565b3480156106d257600080fd5b506103c06106e1366004612802565b60106020526000908152604090205460ff1681565b34801561070257600080fd5b506103c0610711366004612802565b611088565b34801561072257600080fd5b506103e1610731366004612802565b6001600160a01b031660009081526020819052604090205490565b34801561075857600080fd5b506103466110d4565b34801561076d57600080fd5b5060125461040f906001600160a01b031681565b34801561078d57600080fd5b506103e160085481565b3480156107a357600080fd5b506103466107b23660046128d0565b611148565b3480156107c357600080fd5b506009546001600160a01b031661040f565b3480156107e157600080fd5b506103e16107f0366004612802565b61119d565b34801561080157600080fd5b5061036a6111a8565b34801561081657600080fd5b5061034661082536600461289a565b6111b7565b34801561083657600080fd5b506012546103c090600160a01b900460ff1681565b34801561085757600080fd5b506012546103c090600160b01b900460ff1681565b34801561087857600080fd5b506103c061088736600461281f565b61124d565b34801561089857600080fd5b506103e16108a7366004612802565b61129c565b3480156108b857600080fd5b506103c06108c736600461281f565b6112c8565b3480156108d857600080fd5b506103e16108e7366004612802565b6001600160a01b031660009081526007602052604090205490565b34801561090e57600080fd5b5061034661091d3660046128d0565b6112d5565b34801561092e57600080fd5b506103c061093d366004612802565b61132a565b34801561094e57600080fd5b506103c061095d3660046128d0565b611376565b34801561096e57600080fd5b506019546103e1565b34801561098357600080fd5b50610346610992366004612802565b6114f7565b3480156109a357600080fd5b506103e16109b2366004612909565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e957600080fd5b506103466109f836600461281f565b611543565b348015610a0957600080fd5b50600e546103e1565b348015610a1e57600080fd5b506018546103e1565b348015610a3357600080fd5b50610346610a42366004612802565b6115db565b348015610a5357600080fd5b5061061a610a62366004612802565b6116c6565b348015610a7357600080fd5b50610a87610a823660046128b7565b611775565b60408051938452602084019290925290820152606001610377565b6000610aad60025490565b11610ab757600080fd5b3415610b3357610aea610ac960025490565b610ad734600160801b61189b565b610ae1919061294d565b60055490611924565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b2f9034611924565b6008555b565b606060138054610b449061296f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b709061296f565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bfa5760405162461bcd60e51b8152600401610bf1906129a9565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c28338484611983565b5060015b92915050565b6000610c3f848484611aa7565b610c918433610c8c85604051806060016040528060288152602001612b9e602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b0a565b611983565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610ced92610ce892610ce291610cdd919061189b565b611b44565b90611b54565b611b92565b610c2c919061294d565b6009546001600160a01b03163314610d215760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d4f908290611ba5565b610d5a600a82611c04565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610bf1906129a9565b801515601260169054906101000a900460ff16151503610dda57600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e2790831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c28918590610c8c9086611924565b6009546001600160a01b03163314610e925760405162461bcd60e51b8152600401610bf1906129a9565b801515601260159054906101000a900460ff16151503610eb157600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e2790831515815260200190565b600080600080600080610f10600a5490565b8710610f2f575060009450600019935083925084915081905080610f55565b6000610f3c600a89611d3f565b9050610f47816116c6565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f885760405162461bcd60e51b8152600401610bf1906129a9565b610f9a81670de0b6b3a76400006129de565b60185550565b6009546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610bf1906129a9565b610fdc81670de0b6b3a76400006129de565b60195550565b60405162461bcd60e51b815260206004820152606960248201527f4d41474156505f4469766964656e645f547261636b65723a207769746864726160448201527f774469766964656e642064697361626c65642e20557365207468652027636c6160648201527f696d272066756e6374696f6e206f6e20746865206d61696e204d41474156502060848201526831b7b73a3930b1ba1760b91b60a482015260c401610bf1565b6009546000906001600160a01b031633146110b55760405162461bcd60e51b8152600401610bf1906129a9565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bf1906129a9565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b031633146111725760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c2c8261129c565b606060148054610b449061296f565b6009546001600160a01b031633146111e15760405162461bcd60e51b8152600401610bf1906129a9565b801515601260149054906101000a900460ff1615150361120057600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e2790831515815260200190565b6000610c283384610c8c85604051806060016040528060258152602001612bc6602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b0a565b6001600160a01b038116600090815260076020526040812054610c2c906112c284610c9b565b90611d72565b6000610c28338484611aa7565b6009546001600160a01b031633146112ff5760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113575760405162461bcd60e51b8152600401610bf1906129a9565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113a35760405162461bcd60e51b8152600401610bf1906129a9565b601254600160b01b900460ff16156113bd57506000610c2c565b6001600160a01b03831660009081526011602052604090205460ff168280156113e35750805b80156113f95750601254600160a81b900460ff16155b15611408576000915050610c2c565b60008161141d5761141885611db4565b611426565b6114268561206d565b905080156114ec576001600160a01b0385166000908152601760205260409020429055811561149a57831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c8360405161148d91815260200190565b60405180910390a36114e1565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114d891815260200190565b60405180910390a35b600192505050610c2c565b506000949350505050565b6009546001600160a01b031633146115215760405162461bcd60e51b8152600401610bf1906129a9565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b0382166000908152600f602052604090205460ff166115ad576019548110156115b1576115a2600a83611c04565b6115ad826000611ba5565b5050565b6115bb8282611ba5565b60185481106115d0576115ad600a83836123e0565b6115ad600a83611c04565b6009546001600160a01b031633146116055760405162461bcd60e51b8152600401610bf1906129a9565b6001600160a01b03811661166a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bf1565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116d8600a87612489565b945060001993506000851261173a57600e5485111561170657600e546116ff9086906124d4565b935061173a565b600e54600a546000911061171b57600061172a565b600e54600a5461172a91611d72565b90506117368682611b54565b9450505b6117438661129c565b925061174e86610c9b565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117955750601254600160b01b900460ff165b156117ab575050600e5460009250829150611894565b600e546000805a90506000805b89841080156117c657508582105b1561188357846117d5816129f5565b9550508585106117e457600094505b6000600a60000186815481106117fc576117fc612a0e565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661184957611836816001611376565b156118495781611845816129f5565b9250505b82611853816129f5565b93505060005a90508085111561187a576118776118708683611d72565b8790611924565b95505b93506117b89050565b600e85905590975095509193505050505b9193909250565b6000826000036118ad57506000610c2c565b60006118b983856129de565b9050826118c6858361294d565b1461191d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bf1565b9392505050565b6000806119318385612a24565b90508381101561191d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bf1565b6001600160a01b0383166119e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf1565b6001600160a01b038216611a465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602d60248201527f4d41474156505f4469766964656e645f547261636b65723a204e6f207472616e60448201526c1cd9995c9cc8185b1b1bddd959609a1b6064820152608401610bf1565b505050565b60008184841115611b2e5760405162461bcd60e51b8152600401610bf1919061279c565b506000611b3b8486612a37565b95945050505050565b60008181811215610c2c57600080fd5b600080611b618385612a4a565b905060008312158015611b745750838112155b80611b895750600083128015611b8957508381125b61191d57600080fd5b600080821215611ba157600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611be4576000611bd28383611d72565b9050611bde8482612511565b50505050565b80821015611b05576000611bf88284611d72565b9050611bde8482612575565b6001600160a01b038116600090815260038301602052604090205460ff16611c2a575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c7491612a37565b90506000846000018281548110611c8d57611c8d612a0e565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cdc57611cdc612a0e565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d1657611d16612a72565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d5657611d56612a0e565b6000918252602090912001546001600160a01b03169392505050565b600061191d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b0a565b600080611dc08361129c565b90508015612064576001600160a01b038316600090815260076020526040902054611deb9082611924565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e70576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e60576040519150601f19603f3d011682016040523d82523d6000602084013e611e65565b606091505b505080915050611fca565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efe9190612a88565b81600081518110611f1157611f11612a0e565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f4557611f45612a0e565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611f8b9060009086908c904290600401612ae9565b6000604051808303818588803b158015611fa457600080fd5b505af193505050508015611fb6575060015b611fc35760009150611fc8565b600191505b505b80612018576001600160a01b038516600090815260076020526040902054611ff29084611d72565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161205391815260200190565b60405180910390a250909392505050565b50600092915050565b6000806120798361129c565b90508015612064576001600160a01b0383166000908152600760205260408120546120a49083611924565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190612a88565b8160008151811061216357612163612a0e565b6001600160a01b03928316602091820292909201015260165482519116908290600190811061219457612194612a0e565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122129190612b1e565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061224c90600090879030904290600401612ae9565b6000604051808303818588803b15801561226557600080fd5b505af193505050508015612277575060015b6122845760009250612387565b6016546040516370a0823160e01b81523060048201526000916122f79184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190612b1e565b905080156123805760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612b37565b50612385565b600093505b505b826123d6576001600160a01b0386166000908152600760205260409020546123af9085611d72565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612425576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124b45750600019610c2c565b506001600160a01b03166000908152600291909101602052604090205490565b6000806124e18385612b54565b9050600083121580156124f45750838113155b80611b895750600083128015611b89575083811361191d57600080fd5b61251b82826125b9565b612555612536610cdd8360055461189b90919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124d4565b6001600160a01b0390921660009081526006602052604090209190915550565b61257f8282612698565b61255561259a610cdd8360055461189b90919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b54565b6001600160a01b03821661260f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bf1565b60025461261c9082611924565b6002556001600160a01b0382166000908152602081905260409020546126429082611924565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166126f85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bf1565b61273581604051806060016040528060228152602001612b7c602291396001600160a01b0385166000908152602081905260409020549190611b0a565b6001600160a01b03831660009081526020819052604090205560025461275b9082611d72565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161268c565b600060208083528351808285015260005b818110156127c9578581018301518582016040015282016127ad565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127ff57600080fd5b50565b60006020828403121561281457600080fd5b813561191d816127ea565b6000806040838503121561283257600080fd5b823561283d816127ea565b946020939093013593505050565b60008060006060848603121561286057600080fd5b833561286b816127ea565b9250602084013561287b816127ea565b929592945050506040919091013590565b80151581146127ff57600080fd5b6000602082840312156128ac57600080fd5b813561191d8161288c565b6000602082840312156128c957600080fd5b5035919050565b600080604083850312156128e357600080fd5b82356128ee816127ea565b915060208301356128fe8161288c565b809150509250929050565b6000806040838503121561291c57600080fd5b8235612927816127ea565b915060208301356128fe816127ea565b634e487b7160e01b600052601160045260246000fd5b60008261296a57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061298357607f821691505b6020821081036129a357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c2c57610c2c612937565b600060018201612a0757612a07612937565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c2c57610c2c612937565b81810381811115610c2c57610c2c612937565b8082018281126000831280158216821582161715612a6a57612a6a612937565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a9a57600080fd5b815161191d816127ea565b600081518084526020808501945080840160005b83811015612ade5781516001600160a01b031687529582019590820190600101612ab9565b509495945050505050565b848152608060208201526000612b026080830186612aa5565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b3057600080fd5b5051919050565b600060208284031215612b4957600080fd5b815161191d8161288c565b8181036000831280158383131683831282161715612b7457612b74612937565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dc8ba06d694f13c3b73a01233220b58dd03cc55a385877431e46f702d1024d0464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000766d2fcece1e3eef32aae8711ab886ee95fd5b2a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000576e2bed8f7b46d34016198911cdf9886f78bea700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d4d4147415650545241434b455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4d565054545241434b4552000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : mainContract (address): 0x766d2fcECe1E3eeF32aae8711ab886eE95fd5B2A
Arg [1] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : token (address): 0x576e2BeD8F7b46D34016198911Cdf9886f78bea7
Arg [3] : _name (string): MAGAVPTRACKER
Arg [4] : _ticker (string): MVPTTRACKER
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000766d2fcece1e3eef32aae8711ab886ee95fd5b2a
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000576e2bed8f7b46d34016198911cdf9886f78bea7
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [6] : 4d4147415650545241434b455200000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [8] : 4d565054545241434b4552000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
45100:13851:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21328:21;:19;:21::i;:::-;45100:13851;;;;;21365:471;;;:::i;47274:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49013:123;;;;;;;;;;-1:-1:-1;49013:123:0;;;;;:::i;:::-;;:::i;6643:210::-;;;;;;;;;;-1:-1:-1;6643:210:0;;;;;:::i;:::-;;:::i;:::-;;;1440:14:1;;1433:22;1415:41;;1403:2;1388:18;6643:210:0;1275:187:1;50076:120:0;;;;;;;;;;-1:-1:-1;50161:15:0;:27;50076:120;;;1613:25:1;;;1601:2;1586:18;50076:120:0;1467:177:1;45776:41:0;;;;;;;;;;-1:-1:-1;45776:41:0;;;;-1:-1:-1;;;;;45776:41:0;;;;;;-1:-1:-1;;;;;1840:32:1;;;1822:51;;1810:2;1795:18;45776:41:0;1649:230:1;5909:108:0;;;;;;;;;;-1:-1:-1;5997:12:0;;5909:108;;45504:44;;;;;;;;;;-1:-1:-1;45504:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45863:49;;;;;;;;;;-1:-1:-1;45863:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;6861:454;;;;;;;;;;-1:-1:-1;6861:454:0;;;;;:::i;:::-;;:::i;55040:94::-;;;;;;;;;;-1:-1:-1;55114:12:0;;-1:-1:-1;;;;;55114:12:0;55040:94;;23381:372;;;;;;;;;;-1:-1:-1;23381:372:0;;;;;:::i;:::-;;:::i;45342:33::-;;;;;;;;;;;;;;;;47173:93;;;;;;;;;;-1:-1:-1;47173:93:0;;47256:2;2695:36:1;;2683:2;2668:18;47173:93:0;2553:184:1;48705:300:0;;;;;;;;;;-1:-1:-1;48705:300:0;;;;;:::i;:::-;;:::i;49768:183::-;;;;;;;;;;-1:-1:-1;49768:183:0;;;;;:::i;:::-;;:::i;7323:300::-;;;;;;;;;;-1:-1:-1;7323:300:0;;;;;:::i;:::-;;:::i;48503:194::-;;;;;;;;;;-1:-1:-1;48503:194:0;;;;;:::i;:::-;;:::i;45626:29::-;;;;;;;;;;-1:-1:-1;45626:29:0;;;;-1:-1:-1;;;45626:29:0;;;;;;45384:53;;;;;;;;;;-1:-1:-1;45384:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;51461:609;;;;;;;;;;-1:-1:-1;51461:609:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3597:32:1;;;3579:51;;3661:2;3646:18;;3639:34;;;;3689:18;;;3682:34;;;;3747:2;3732:18;;3725:34;3790:3;3775:19;;3768:35;3617:3;3819:19;;3812:35;3566:3;3551:19;51461:609:0;3296:557:1;49404:178:0;;;;;;;;;;-1:-1:-1;49404:178:0;;;;;:::i;:::-;;:::i;49590:170::-;;;;;;;;;;-1:-1:-1;49590:170:0;;;;;:::i;:::-;;:::i;45826:28::-;;;;;;;;;;-1:-1:-1;45826:28:0;;;;-1:-1:-1;;;;;45826:28:0;;;47699:228;;;;;;;;;;;;;:::i;45444:53::-;;;;;;;;;;-1:-1:-1;45444:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;47935:186;;;;;;;;;;-1:-1:-1;47935:186:0;;;;;:::i;:::-;;:::i;6025:177::-;;;;;;;;;;-1:-1:-1;6025:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;6176:18:0;6144:7;6176:18;;;;;;;;;;;;6025:177;13002:148;;;;;;;;;;;;;:::i;45555:27::-;;;;;;;;;;-1:-1:-1;45555:27:0;;;;-1:-1:-1;;;;;45555:27:0;;;21139:40;;;;;;;;;;;;;;;;49144:127;;;;;;;;;;-1:-1:-1;49144:127:0;;;;;:::i;:::-;;:::i;12788:79::-;;;;;;;;;;-1:-1:-1;12853:6:0;;-1:-1:-1;;;;;12853:6:0;12788:79;;22833:131;;;;;;;;;;-1:-1:-1;22833:131:0;;;;;:::i;:::-;;:::i;47388:110::-;;;;;;;;;;;;;:::i;48301:194::-;;;;;;;;;;-1:-1:-1;48301:194:0;;;;;:::i;:::-;;:::i;45590:29::-;;;;;;;;;;-1:-1:-1;45590:29:0;;;;-1:-1:-1;;;45590:29:0;;;;;;45662:35;;;;;;;;;;-1:-1:-1;45662:35:0;;;;-1:-1:-1;;;45662:35:0;;;;;;7631:400;;;;;;;;;;-1:-1:-1;7631:400:0;;;;;:::i;:::-;;:::i;22972:216::-;;;;;;;;;;-1:-1:-1;22972:216:0;;;;;:::i;:::-;;:::i;6210:::-;;;;;;;;;;-1:-1:-1;6210:216:0;;;;;:::i;:::-;;:::i;23196:177::-;;;;;;;;;;-1:-1:-1;23196:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;23339:26:0;23307:7;23339:26;;;:18;:26;;;;;;;23196:177;49279:117;;;;;;;;;;-1:-1:-1;49279:117:0;;;;;:::i;:::-;;:::i;48129:164::-;;;;;;;;;;-1:-1:-1;48129:164:0;;;;;:::i;:::-;;:::i;54095:831::-;;;;;;;;;;-1:-1:-1;54095:831:0;;;;;:::i;:::-;;:::i;55291:133::-;;;;;;;;;;-1:-1:-1;55385:31:0;;55291:133;;54934:98;;;;;;;;;;-1:-1:-1;54934:98:0;;;;;:::i;:::-;;:::i;6434:201::-;;;;;;;;;;-1:-1:-1;6434:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6600:18:0;;;6568:7;6600:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6434:201;52078:610;;;;;;;;;;-1:-1:-1;52078:610:0;;;;;:::i;:::-;;:::i;49959:109::-;;;;;;;;;;-1:-1:-1;50042:18:0;;49959:109;;55142:141;;;;;;;;;;-1:-1:-1;55240:35:0;;55142:141;;13158:281;;;;;;;;;;-1:-1:-1;13158:281:0;;;;;:::i;:::-;;:::i;50204:1249::-;;;;;;;;;;-1:-1:-1;50204:1249:0;;;;;:::i;:::-;;:::i;52696:1391::-;;;;;;;;;;-1:-1:-1;52696:1391:0;;;;;:::i;:::-;;:::i;:::-;;;;5466:25:1;;;5522:2;5507:18;;5500:34;;;;5550:18;;;5543:34;5454:2;5439:18;52696:1391:0;5264:319:1;21365:471:0;21455:1;21439:13;5997:12;;;5909:108;21439:13;:17;21431:26;;;;;;21474:9;:13;21470:359;;21532:105;21609:13;5997:12;;;5909:108;21609:13;21580:26;21581:9;-1:-1:-1;;;21580:15:0;:26::i;:::-;:42;;;;:::i;:::-;21532:25;;;:29;:105::i;:::-;21504:25;:133;21657:43;;21690:9;1613:25:1;;21678:10:0;;21657:43;;1601:2:1;1586:18;21657:43:0;;;;;;;21745:25;;:72;;21793:9;21745:29;:72::i;:::-;21717:25;:100;21470:359;21365:471::o;47274:106::-;47328:13;47361:11;47354:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47274:106;:::o;49013:123::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;49090:30:0::1;49123:5;49090:30:::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;49090:38:0::1;::::0;;49013:123::o;6643:210::-;6762:4;6784:39;174:10;6807:7;6816:6;6784:8;:39::i;:::-;-1:-1:-1;6841:4:0;6643:210;;;;;:::o;6861:454::-;7001:4;7018:36;7028:6;7036:9;7047:6;7018:9;:36::i;:::-;7065:220;7088:6;174:10;7136:138;7192:6;7136:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7136:19:0;;;;;;:11;:19;;;;;;;;174:10;7136:33;;;;;;;;;;:37;:138::i;:::-;7065:8;:220::i;:::-;-1:-1:-1;7303:4:0;6861:454;;;;;:::o;23381:372::-;-1:-1:-1;;;;;23662:36:0;;23495:7;23662:36;;;:28;:36;;;;;;;;;6176:18;;;;;;;23540:25;;-1:-1:-1;;;20938:6:0;23540:193;;:159;;:99;;:66;;:25;:47;:66::i;:::-;:97;:99::i;:::-;:121;;:159::i;:::-;:191;:193::i;:::-;:205;;;;:::i;48705:300::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48835:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;48835:37:0::1;48868:4;48835:37;::::0;;48885:23:::1;::::0;48857:7;;48885:11:::1;:23::i;:::-;48919:31;:15;48942:7:::0;48919:22:::1;:31::i;:::-;48968:29;::::0;-1:-1:-1;;;;;48968:29:0;::::1;::::0;::::1;::::0;;;::::1;48705:300:::0;:::o;49768:183::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;49865:5:::1;49846:24;;:15;;;;;;;;;;;:24;;::::0;49838:33:::1;;;::::0;::::1;;49882:15;:23:::0;;;::::1;;-1:-1:-1::0;;;49882:23:0::1;-1:-1:-1::0;;;;49882:23:0;;::::1;;::::0;;49921:22:::1;::::0;::::1;::::0;::::1;::::0;49900:5;1440:14:1;1433:22;1415:41;;1403:2;1388:18;;1275:187;49921:22:0::1;;;;;;;;49768:183:::0;:::o;7323:300::-;174:10;7438:4;7532:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7532:34:0;;;;;;;;;;7438:4;;7460:133;;7510:7;;7532:50;;7571:10;7532:38;:50::i;48503:194::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;48604:5:::1;48583:26;;:17;;;;;;;;;;;:26;;::::0;48575:35:::1;;;::::0;::::1;;48621:17;:25:::0;;;::::1;;-1:-1:-1::0;;;48621:25:0::1;-1:-1:-1::0;;;;48621:25:0;;::::1;;::::0;;48662:27:::1;::::0;::::1;::::0;::::1;::::0;48641:5;1440:14:1;1433:22;1415:41;;1403:2;1388:18;;1275:187;51461:609:0;51565:7;51587:6;51608;51629:7;51651;51673;51721:22;:15;59837;;59756:104;51721:22;51712:5;:31;51708:249;;-1:-1:-1;51786:42:0;;-1:-1:-1;;;51847:2:0;-1:-1:-1;51847:2:0;;-1:-1:-1;51786:42:0;;-1:-1:-1;51786:42:0;;-1:-1:-1;51786:42:0;51760:185;;51708:249;51969:15;51987:36;:15;52017:5;51987:29;:36::i;:::-;51969:54;;52043:19;52054:7;52043:10;:19::i;:::-;52036:26;;;;;;;;;;;;;51461:609;;;;;;;;:::o;49404:178::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;49558:16:::1;:5:::0;49567:6:::1;49558:16;:::i;:::-;49520:35;:54:::0;-1:-1:-1;49404:178:0:o;49590:170::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;49736:16:::1;:5:::0;49745:6:::1;49736:16;:::i;:::-;49702:31;:50:::0;-1:-1:-1;49590:170:0:o;47699:228::-;47759:160;;-1:-1:-1;;;47759:160:0;;7063:2:1;47759:160:0;;;7045:21:1;7102:3;7082:18;;;7075:31;7142:34;7122:18;;;7115:62;7213:34;7193:18;;;7186:62;7285:34;7264:19;;;7257:63;-1:-1:-1;;;7336:19:1;;;7329:40;7386:19;;47759:160:0;6861:550:1;47935:186:0;12915:6;;48054:4;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48083:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;::::0;47935:186::o;13002:148::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;13093:6:::1;::::0;13072:40:::1;::::0;13109:1:::1;::::0;-1:-1:-1;;;;;13093:6:0::1;::::0;13072:40:::1;::::0;13109:1;;13072:40:::1;13123:6;:19:::0;;-1:-1:-1;;;;;;13123:19:0::1;::::0;;13002:148::o;49144:127::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49225:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;49225:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49144:127::o;22833:131::-;22899:7;22926:30;22949:6;22926:22;:30::i;47388:110::-;47444:13;47477;47470:20;;;;;:::i;48301:194::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;48402:5:::1;48381:26;;:17;;;;;;;;;;;:26;;::::0;48373:35:::1;;;::::0;::::1;;48419:17;:25:::0;;;::::1;;-1:-1:-1::0;;;48419:25:0::1;-1:-1:-1::0;;;;48419:25:0;;::::1;;::::0;;48460:27:::1;::::0;::::1;::::0;::::1;::::0;48439:5;1440:14:1;1433:22;1415:41;;1403:2;1388:18;;1275:187;7631:400:0;7751:4;7773:228;174:10;7823:7;7845:145;7902:15;7845:145;;;;;;;;;;;;;;;;;174:10;7845:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7845:34:0;;;;;;;;;;;;:38;:145::i;22972:216::-;-1:-1:-1;;;;;23153:26:0;;23086:7;23153:26;;;:18;:26;;;;;;23118:62;;:30;23172:6;23118:22;:30::i;:::-;:34;;:62::i;6210:216::-;6332:4;6354:42;174:10;6378:9;6389:6;6354:9;:42::i;49279:117::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49359:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;49359:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49279:117::o;48129:164::-;12915:6;;48235:4;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48264:21:0::1;;::::0;;;:12:::1;:21;::::0;;;;;::::1;;::::0;48129:164::o;54095:831::-;12915:6;;54213:4;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;54239:15:::1;::::0;-1:-1:-1;;;54239:15:0;::::1;;;54235:60;;;-1:-1:-1::0;54278:5:0::1;54271:12;;54235:60;-1:-1:-1::0;;;;;54323:21:0;::::1;54307:13;54323:21:::0;;;:12:::1;:21;::::0;;;;;::::1;;54361:9:::0;:21;::::1;;;;54374:8;54361:21;:43;;;;-1:-1:-1::0;54387:17:0::1;::::0;-1:-1:-1;;;54387:17:0;::::1;;;54386:18;54361:43;54357:88;;;54428:5;54421:12;;;;;54357:88;54457:14;54474:8;:104;;54546:32;54570:7;54546:23;:32::i;:::-;54474:104;;;54498:32;54522:7;54498:23;:32::i;:::-;54457:121:::0;-1:-1:-1;54595:10:0;;54591:303:::1;;-1:-1:-1::0;;;;;54622:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;54648:15:::1;54622:41:::0;;54678:179;::::1;;;54752:9;54716:46;;54735:7;-1:-1:-1::0;;;;;54716:46:0::1;;54744:6;54716:46;;;;1613:25:1::0;;1601:2;1586:18;;1467:177;54716:46:0::1;;;;;;;;54678:179;;;54831:9;54808:33;;54814:7;-1:-1:-1::0;;;;;54808:33:0::1;;54823:6;54808:33;;;;1613:25:1::0;;1601:2;1586:18;;1467:177;54808:33:0::1;;;;;;;;54678:179;54878:4;54871:11;;;;;;54591:303;-1:-1:-1::0;54913:5:0::1;::::0;54095:831;-1:-1:-1;;;;54095:831:0:o;54934:98::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;55004:12:::1;:20:::0;;-1:-1:-1;;;;;;55004:20:0::1;-1:-1:-1::0;;;;;55004:20:0;;;::::1;::::0;;;::::1;::::0;;54934:98::o;52078:610::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52192:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;52239:7;52188:69;52286:31;;52273:10;:44;52269:169;;;52334:31;:15;52357:7:::0;52334:22:::1;:31::i;:::-;52380:23;52392:7;52401:1;52380:11;:23::i;:::-;52078:610:::0;;:::o;52269:169::-:1;52450:32;52462:7;52471:10;52450:11;:32::i;:::-;52513:35;;52499:10;:49;52495:186;;52565:40;:15;52585:7:::0;52594:10;52565:19:::1;:40::i;52495:186::-;52638:31;:15;52661:7:::0;52638:22:::1;:31::i;13158:281::-:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13261:22:0;::::1;13239:110;;;::::0;-1:-1:-1;;;13239:110:0;;7618:2:1;13239:110:0::1;::::0;::::1;7600:21:1::0;7657:2;7637:18;;;7630:30;7696:34;7676:18;;;7669:62;-1:-1:-1;;;7747:18:1;;;7740:36;7793:19;;13239:110:0::1;7416:402:1::0;13239:110:0::1;13386:6;::::0;13365:38:::1;::::0;-1:-1:-1;;;;;13365:38:0;;::::1;::::0;13386:6:::1;::::0;13365:38:::1;::::0;13386:6:::1;::::0;13365:38:::1;13414:6;:17:::0;;-1:-1:-1;;;;;;13414:17:0::1;-1:-1:-1::0;;;;;13414:17:0;;;::::1;::::0;;;::::1;::::0;;13158:281::o;50204:1249::-;50547:8;50304:15;;;;;50576:38;:15;50547:8;50576:29;:38::i;:::-;50568:46;;-1:-1:-1;;50627:29:0;;50682:1;50673:5;:10;50669:598;;50721:18;;50712:5;50704:35;50700:556;;;50826:18;;50787:77;;:5;;:9;:77::i;:::-;50760:104;;50700:556;;;50991:18;;50940:15;:27;50905:32;;-1:-1:-1;50940:169:0;;51108:1;50940:169;;;51065:18;;51033:15;:27;:51;;:31;:51::i;:::-;50905:204;-1:-1:-1;51157:83:0;:5;50905:204;51157:9;:83::i;:::-;51130:110;;50886:370;50700:556;51303:31;51326:7;51303:22;:31::i;:::-;51279:55;;51362:31;51385:7;51362:22;:31::i;:::-;-1:-1:-1;;;;;51422:23:0;;;;;;:14;:23;;;;;;51437:7;;50204:1249;;-1:-1:-1;50204:1249:0;;;;;-1:-1:-1;;50204:1249:0:o;52696:1391::-;52884:15;:27;52774:7;;;;;;52928:25;;;:44;;-1:-1:-1;52957:15:0;;-1:-1:-1;;;52957:15:0;;;;52928:44;52924:110;;;-1:-1:-1;;53003:18:0;;52997:1;;-1:-1:-1;52997:1:0;;-1:-1:-1;52989:33:0;;52924:110;53076:18;;53046:27;;53157:9;53139:27;;53179:18;53212:14;53243:724;53260:3;53250:7;:13;:50;;;;;53280:20;53267:10;:33;53250:50;53243:724;;;53317:21;;;;:::i;:::-;;;;53382:20;53359:19;:43;53355:107;;53445:1;53423:23;;53355:107;53478:15;53496;:20;;53517:19;53496:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;53496:41:0;53559:30;;;:21;:30;;;;;;;;53496:41;;-1:-1:-1;53559:30:0;;53554:166;;53614:38;53637:7;53647:4;53614:14;:38::i;:::-;53610:95;;;53677:8;;;;:::i;:::-;;;;53610:95;53736:12;;;;:::i;:::-;;;;53765:18;53786:9;53765:30;;53826:10;53816:7;:20;53812:107;;;53867:36;53879:23;:7;53891:10;53879:11;:23::i;:::-;53867:7;;:11;:36::i;:::-;53857:46;;53812:107;53945:10;-1:-1:-1;53243:724:0;;-1:-1:-1;53243:724:0;;53979:18;:40;;;54040:10;;-1:-1:-1;54052:6:0;-1:-1:-1;54000:19:0;;-1:-1:-1;;;;52696:1391:0;;;;;;:::o;11381:250::-;11439:7;11463:1;11468;11463:6;11459:47;;-1:-1:-1;11493:1:0;11486:8;;11459:47;11518:9;11530:5;11534:1;11530;:5;:::i;:::-;11518:17;-1:-1:-1;11563:1:0;11554:5;11558:1;11518:17;11554:5;:::i;:::-;:10;11546:56;;;;-1:-1:-1;;;11546:56:0;;8297:2:1;11546:56:0;;;8279:21:1;8336:2;8316:18;;;8309:30;8375:34;8355:18;;;8348:62;-1:-1:-1;;;8426:18:1;;;8419:31;8467:19;;11546:56:0;8095:397:1;11546:56:0;11622:1;11381:250;-1:-1:-1;;;11381:250:0:o;10814:181::-;10872:7;;10904:5;10908:1;10904;:5;:::i;:::-;10892:17;;10933:1;10928;:6;;10920:46;;;;-1:-1:-1;;;10920:46:0;;8829:2:1;10920:46:0;;;8811:21:1;8868:2;8848:18;;;8841:30;8907:29;8887:18;;;8880:57;8954:18;;10920:46:0;8627:351:1;9506:380:0;-1:-1:-1;;;;;9642:19:0;;9634:68;;;;-1:-1:-1;;;9634:68:0;;9185:2:1;9634:68:0;;;9167:21:1;9224:2;9204:18;;;9197:30;9263:34;9243:18;;;9236:62;-1:-1:-1;;;9314:18:1;;;9307:34;9358:19;;9634:68:0;8983:400:1;9634:68:0;-1:-1:-1;;;;;9721:21:0;;9713:68;;;;-1:-1:-1;;;9713:68:0;;9590:2:1;9713:68:0;;;9572:21:1;9629:2;9609:18;;;9602:30;9668:34;9648:18;;;9641:62;-1:-1:-1;;;9719:18:1;;;9712:32;9761:19;;9713:68:0;9388:398:1;9713:68:0;-1:-1:-1;;;;;9794:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9846:32;;1613:25:1;;;9846:32:0;;1586:18:1;9846:32:0;;;;;;;9506:380;;;:::o;47506:185::-;47620:63;;-1:-1:-1;;;47620:63:0;;9993:2:1;47620:63:0;;;9975:21:1;10032:2;10012:18;;;10005:30;10071:34;10051:18;;;10044:62;-1:-1:-1;;;10122:18:1;;;10115:43;10175:19;;47620:63:0;9791:409:1;47620:63:0;47506:185;;;:::o;11147:226::-;11267:7;11303:12;11295:6;;;;11287:29;;;;-1:-1:-1;;;11287:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11327:9:0;11339:5;11343:1;11339;:5;:::i;:::-;11327:17;11147:226;-1:-1:-1;;;;;11147:226:0:o;14843:148::-;14899:6;14936:1;14957:6;;;;14949:15;;;;;14360:176;14416:6;;14446:5;14450:1;14446;:5;:::i;:::-;14435:16;;14476:1;14471;:6;;:16;;;;;14486:1;14481;:6;;14471:16;14470:38;;;;14497:1;14493;:5;:14;;;;;14506:1;14502;:5;14493:14;14462:47;;;;;14681:127;14737:7;14770:1;14765;:6;;14757:15;;;;;;-1:-1:-1;14798:1:0;14681:127::o;24860:451::-;-1:-1:-1;;;;;6176:18:0;;24938:22;6176:18;;;;;;;;;;;24998:27;;;24994:310;;;25042:18;25063:30;:10;25078:14;25063;:30::i;:::-;25042:51;;25108:26;25114:7;25123:10;25108:5;:26::i;:::-;25027:119;47506:185;;;:::o;24994:310::-;25169:14;25156:10;:27;25152:152;;;25200:18;25221:30;:14;25240:10;25221:18;:30::i;:::-;25200:51;;25266:26;25272:7;25281:10;25266:5;:26::i;60239:481::-;-1:-1:-1;;;;;60310:17:0;;;;;;:12;;;:17;;;;;;;;60305:57;;60239:481;;:::o;60305:57::-;-1:-1:-1;;;;;60381:17:0;;;;;;:12;;;:17;;;;;;;;60374:24;;-1:-1:-1;;60374:24:0;;;;60416:10;;;:15;;;;;60409:22;;;60460:11;;;:16;;;;;;60507:15;;60460:16;;60381:17;60507:19;;;:::i;:::-;60487:39;;60537:15;60555:3;:8;;60564:9;60555:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;60555:19:0;;;60587:20;;;:11;;;:20;;;;;;;:28;;;60633:16;;;;;;;60626:23;;;;60662:15;;60555:19;;-1:-1:-1;60555:19:0;;60587:3;;60610:5;;60662:15;;;;;;:::i;:::-;;;;;;;;;;:25;;-1:-1:-1;;;;;;60662:25:0;-1:-1:-1;;;;;60662:25:0;;;;;;;;;;60698:14;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;60698:14:0;;;;;-1:-1:-1;;;;;;60698:14:0;;;;;;-1:-1:-1;;;;;60239:481:0:o;59588:160::-;59693:7;59725:3;:8;;59734:5;59725:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;59725:15:0;;59588:160;-1:-1:-1;;;59588:160:0:o;11003:136::-;11061:7;11088:43;11092:1;11095;11088:43;;;;;;;;;;;;;;;;;:3;:43::i;57201:1747::-;57310:7;57335:29;57367:28;57390:4;57367:22;:28::i;:::-;57335:60;-1:-1:-1;57410:25:0;;57406:1516;;-1:-1:-1;;;;;57479:24:0;;;;;;:18;:24;;;;;;:83;;57526:21;57479:28;:83::i;:::-;-1:-1:-1;;;;;57452:24:0;;;;;;;:18;:24;;;;;:110;;;;57602:12;;;;;57658:908;;57723:115;;-1:-1:-1;;;;;57723:9:0;;;57811:4;;57762:21;;57723:115;;;;57762:21;57723:9;57811:4;57723:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57709:129;;;;;57658:908;;;57903:16;;;57917:1;57903:16;;;;;;;;57879:21;;57903:16;;;;;;;;-1:-1:-1;;57948:15:0;;:22;;;-1:-1:-1;;;57948:22:0;;;;57879:40;;-1:-1:-1;;;;;;57948:15:0;;;;:20;;-1:-1:-1;57948:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57938:4;57943:1;57938:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;57938:32:0;;;-1:-1:-1;;;;;57938:32:0;;;;;57999:12;57989:4;57994:1;57989:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57989:22:0;;;:7;;;;;;;;;:22;58055:15;;:356;;-1:-1:-1;;;58055:356:0;;:15;;;:92;;58181:21;;58055:356;;:15;;58311:4;;58342;;58373:15;;58055:356;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58030:521;;58526:5;58516:15;;58030:521;;;58462:4;58452:14;;58030:521;57860:706;57658:908;58587:7;58582:286;;-1:-1:-1;;;;;58642:24:0;;;;;;:18;:24;;;;;;:91;;58693:21;58642:28;:91::i;:::-;-1:-1:-1;;;;;58615:24:0;;;;;;;:18;:24;;;;;:118;;;;-1:-1:-1;58615:24:0;;57201:1747;-1:-1:-1;;;57201:1747:0:o;58582:286::-;58824:4;-1:-1:-1;;;;;58806:46:0;;58830:21;58806:46;;;;1613:25:1;;1601:2;1586:18;;1467:177;58806:46:0;;;;;;;;-1:-1:-1;58889:21:0;;57201:1747;-1:-1:-1;;;57201:1747:0:o;57406:1516::-;-1:-1:-1;58939:1:0;;57201:1747;-1:-1:-1;;57201:1747:0:o;55440:1753::-;55525:7;55550:29;55582:31;55605:7;55582:22;:31::i;:::-;55550:63;-1:-1:-1;55628:25:0;;55624:1541;;-1:-1:-1;;;;;55729:27:0;;55670:12;55729:27;;;:18;:27;;;;;;:86;;55779:21;55729:31;:86::i;:::-;-1:-1:-1;;;;;55699:27:0;;;;;;:18;:27;;;;;;:116;;;;55856:16;;55870:1;55856:16;;;;;;;;;55699:27;;55856:16;;;;;;;;;;-1:-1:-1;;55897:15:0;;:22;;;-1:-1:-1;;;55897:22:0;;;;55832:40;;-1:-1:-1;;;;;;55897:15:0;;;;:20;;-1:-1:-1;55897:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55887:4;55892:1;55887:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55887:32:0;;;:7;;;;;;;;;:32;55952:14;;55934:7;;55952:14;;;55934:4;;55952:14;;55934:7;;;;;;:::i;:::-;-1:-1:-1;;;;;55934:33:0;;;:7;;;;;;;;;:33;56006:14;;:39;;-1:-1:-1;;;56006:39:0;;56039:4;56006:39;;;1822:51:1;55984:19:0;;56006:14;;;;;:24;;1795:18:1;;56006:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56113:15;;:333;;-1:-1:-1;;;56113:333:0;;55984:61;;-1:-1:-1;;;;;;56113:15:0;;:88;;56231:21;;56113:333;;:15;;56349:4;;56384;;56412:15;;56113:333;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56092:801;;56872:5;56862:15;;56092:801;;;56498:14;;:61;;-1:-1:-1;;;56498:61:0;;56553:4;56498:61;;;1822:51:1;56479:16:0;;56498:100;;56586:11;;-1:-1:-1;;;;;56498:14:0;;:46;;1795:18:1;;56498:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:100::-;56479:119;-1:-1:-1;56621:12:0;;56617:204;;56695:14;;:42;;-1:-1:-1;;;56695:42:0;;-1:-1:-1;;;;;13174:32:1;;;56695:42:0;;;13156:51:1;13223:18;;;13216:34;;;56668:4:0;;-1:-1:-1;56695:14:0;;;;:23;;13129:18:1;;56695:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56617:204;;;56796:5;56786:15;;56617:204;56460:376;56092:801;56914:7;56909:200;;-1:-1:-1;;;;;56972:27:0;;;;;;:18;:27;;;;;;:94;;57026:21;56972:31;:94::i;:::-;-1:-1:-1;;;;;56942:27:0;;;;;;;:18;:27;;;;;:124;;;;-1:-1:-1;56942:27:0;;55440:1753;-1:-1:-1;;;;55440:1753:0:o;56909:200::-;-1:-1:-1;57132:21:0;;55440:1753;-1:-1:-1;;;;55440:1753:0:o;59868:363::-;-1:-1:-1;;;;;59982:17:0;;;;;;:12;;;:17;;;;;;;;59978:246;;;-1:-1:-1;;;;;60016:15:0;;;;;;:10;;;:15;;;;;:21;;;47506:185;;;:::o;59978:246::-;-1:-1:-1;;;;;60070:17:0;;;;;;:12;;;:17;;;;;;;;:24;;-1:-1:-1;;60070:24:0;60090:4;60070:24;;;;;;60109:10;;;:15;;;;;:21;;;60164:15;;60145:11;;;:16;;;;;:34;;;60194:18;;;;;;;;;;;;-1:-1:-1;;;;;;60194:18:0;;;;;;59868:363;;;:::o;59344:236::-;-1:-1:-1;;;;;59476:17:0;;59447:6;59476:17;;;:12;;;:17;;;;;;;;59471:60;;-1:-1:-1;;;59510:9:0;;59471:60;-1:-1:-1;;;;;;59555:16:0;;;;;:11;;;;;:16;;;;;;;59344:236::o;14176:176::-;14232:6;;14262:5;14266:1;14262;:5;:::i;:::-;14251:16;;14292:1;14287;:6;;:16;;;;;14302:1;14297;:6;;14287:16;14286:38;;;;14313:1;14309;:5;:14;;;;;14322:1;14318;:5;14278:47;;;;;24276:284;24352:27;24364:7;24373:5;24352:11;:27::i;:::-;24432:120;24498:53;24499:36;24529:5;24499:25;;:29;;:36;;;;:::i;24498:53::-;-1:-1:-1;;;;;24432:61:0;;;;;;:28;:61;;;;;;;:65;:120::i;:::-;-1:-1:-1;;;;;24392:37:0;;;;;;;:28;:37;;;;;:160;;;;-1:-1:-1;24276:284:0:o;24568:::-;24644:27;24656:7;24665:5;24644:11;:27::i;:::-;24724:120;24790:53;24791:36;24821:5;24791:25;;:29;;:36;;;;:::i;24790:53::-;-1:-1:-1;;;;;24724:61:0;;;;;;:28;:61;;;;;;;:65;:120::i;8657:378::-;-1:-1:-1;;;;;8741:21:0;;8733:65;;;;-1:-1:-1;;;8733:65:0;;13918:2:1;8733:65:0;;;13900:21:1;13957:2;13937:18;;;13930:30;13996:33;13976:18;;;13969:61;14047:18;;8733:65:0;13716:355:1;8733:65:0;8888:12;;:24;;8905:6;8888:16;:24::i;:::-;8873:12;:39;-1:-1:-1;;;;;8944:18:0;;:9;:18;;;;;;;;;;;:30;;8967:6;8944:22;:30::i;:::-;-1:-1:-1;;;;;8923:18:0;;:9;:18;;;;;;;;;;;:51;;;;8990:37;;1613:25:1;;;8923:18:0;;:9;;8990:37;;1586:18:1;8990:37:0;;;;;;;;8657:378;;:::o;9043:455::-;-1:-1:-1;;;;;9127:21:0;;9119:67;;;;-1:-1:-1;;;9119:67:0;;14278:2:1;9119:67:0;;;14260:21:1;14317:2;14297:18;;;14290:30;14356:34;14336:18;;;14329:62;-1:-1:-1;;;14407:18:1;;;14400:31;14448:19;;9119:67:0;14076:397:1;9119:67:0;9282:105;9319:6;9282:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9282:18:0;;:9;:18;;;;;;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;9261:18:0;;:9;:18;;;;;;;;;;:126;9413:12;;:24;;9430:6;9413:16;:24::i;:::-;9398:12;:39;9453:37;;1613:25:1;;;9479:1:0;;-1:-1:-1;;;;;9453:37:0;;;;;1601:2:1;1586:18;9453:37:0;1467:177:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:247::-;762:6;815:2;803:9;794:7;790:23;786:32;783:52;;;831:1;828;821:12;783:52;870:9;857:23;889:31;914:5;889:31;:::i;955:315::-;1023:6;1031;1084:2;1072:9;1063:7;1059:23;1055:32;1052:52;;;1100:1;1097;1090:12;1052:52;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;955:315:1:o;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:118::-;2828:5;2821:13;2814:21;2807:5;2804:32;2794:60;;2850:1;2847;2840:12;2865:241;2921:6;2974:2;2962:9;2953:7;2949:23;2945:32;2942:52;;;2990:1;2987;2980:12;2942:52;3029:9;3016:23;3048:28;3070:5;3048:28;:::i;3111:180::-;3170:6;3223:2;3211:9;3202:7;3198:23;3194:32;3191:52;;;3239:1;3236;3229:12;3191:52;-1:-1:-1;3262:23:1;;3111:180;-1:-1:-1;3111:180:1:o;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;:::-;4458:7;4448:17;;;4089:382;;;;;:::o;4871:388::-;4939:6;4947;5000:2;4988:9;4979:7;4975:23;4971:32;4968:52;;;5016:1;5013;5006:12;4968:52;5055:9;5042:23;5074:31;5099:5;5074:31;:::i;:::-;5124:5;-1:-1:-1;5181:2:1;5166:18;;5153:32;5194:33;5153:32;5194:33;:::i;5588:127::-;5649:10;5644:3;5640:20;5637:1;5630:31;5680:4;5677:1;5670:15;5704:4;5701:1;5694:15;5720:217;5760:1;5786;5776:132;;5830:10;5825:3;5821:20;5818:1;5811:31;5865:4;5862:1;5855:15;5893:4;5890:1;5883:15;5776:132;-1:-1:-1;5922:9:1;;5720:217::o;5942:380::-;6021:1;6017:12;;;;6064;;;6085:61;;6139:4;6131:6;6127:17;6117:27;;6085:61;6192:2;6184:6;6181:14;6161:18;6158:38;6155:161;;6238:10;6233:3;6229:20;6226:1;6219:31;6273:4;6270:1;6263:15;6301:4;6298:1;6291:15;6155:161;;5942:380;;;:::o;6327:356::-;6529:2;6511:21;;;6548:18;;;6541:30;6607:34;6602:2;6587:18;;6580:62;6674:2;6659:18;;6327:356::o;6688:168::-;6761:9;;;6792;;6809:15;;;6803:22;;6789:37;6779:71;;6830:18;;:::i;7823:135::-;7862:3;7883:17;;;7880:43;;7903:18;;:::i;:::-;-1:-1:-1;7950:1:1;7939:13;;7823:135::o;7963:127::-;8024:10;8019:3;8015:20;8012:1;8005:31;8055:4;8052:1;8045:15;8079:4;8076:1;8069:15;8497:125;8562:9;;;8583:10;;;8580:36;;;8596:18;;:::i;10205:128::-;10272:9;;;10293:11;;;10290:37;;;10307:18;;:::i;10338:216::-;10402:9;;;10430:11;;;10377:3;10460:9;;10488:10;;10484:19;;10513:10;;10505:19;;10481:44;10478:70;;;10528:18;;:::i;:::-;10478:70;;10338:216;;;;:::o;10559:127::-;10620:10;10615:3;10611:20;10608:1;10601:31;10651:4;10648:1;10641:15;10675:4;10672:1;10665:15;11033:251;11103:6;11156:2;11144:9;11135:7;11131:23;11127:32;11124:52;;;11172:1;11169;11162:12;11124:52;11204:9;11198:16;11223:31;11248:5;11223:31;:::i;11289:461::-;11342:3;11380:5;11374:12;11407:6;11402:3;11395:19;11433:4;11462:2;11457:3;11453:12;11446:19;;11499:2;11492:5;11488:14;11520:1;11530:195;11544:6;11541:1;11538:13;11530:195;;;11609:13;;-1:-1:-1;;;;;11605:39:1;11593:52;;11665:12;;;;11700:15;;;;11641:1;11559:9;11530:195;;;-1:-1:-1;11741:3:1;;11289:461;-1:-1:-1;;;;;11289:461:1:o;11755:518::-;12034:6;12023:9;12016:25;12077:3;12072:2;12061:9;12057:18;12050:31;11997:4;12098:57;12150:3;12139:9;12135:19;12127:6;12098:57;:::i;:::-;-1:-1:-1;;;;;12191:32:1;;;;12186:2;12171:18;;12164:60;-1:-1:-1;12255:2:1;12240:18;12233:34;12090:65;11755:518;-1:-1:-1;;11755:518:1:o;12278:184::-;12348:6;12401:2;12389:9;12380:7;12376:23;12372:32;12369:52;;;12417:1;12414;12407:12;12369:52;-1:-1:-1;12440:16:1;;12278:184;-1:-1:-1;12278:184:1:o;13261:245::-;13328:6;13381:2;13369:9;13360:7;13356:23;13352:32;13349:52;;;13397:1;13394;13387:12;13349:52;13429:9;13423:16;13448:28;13470:5;13448:28;:::i;13511:200::-;13577:9;;;13550:4;13605:9;;13633:10;;13645:12;;;13629:29;13668:12;;;13660:21;;13626:56;13623:82;;;13685:18;;:::i;:::-;13623:82;13511:200;;;;:::o
Swarm Source
ipfs://dc8ba06d694f13c3b73a01233220b58dd03cc55a385877431e46f702d1024d04
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.