Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 80 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 16480175 | 633 days ago | IN | 0 ETH | 0.00218347 | ||||
Approve | 16390544 | 646 days ago | IN | 0 ETH | 0.00071467 | ||||
Withdraw ETH Ove... | 16386517 | 646 days ago | IN | 0 ETH | 0.00072494 | ||||
Approve | 16386479 | 646 days ago | IN | 0 ETH | 0.00065589 | ||||
Transfer From | 16386475 | 646 days ago | IN | 0 ETH | 0.00222344 | ||||
Set Wallets | 16386467 | 646 days ago | IN | 0 ETH | 0.00123818 | ||||
Approve | 16386382 | 646 days ago | IN | 0 ETH | 0.00135279 | ||||
Approve | 16386361 | 646 days ago | IN | 0 ETH | 0.00102973 | ||||
Approve | 16386327 | 646 days ago | IN | 0 ETH | 0.00138101 | ||||
Approve | 16386313 | 646 days ago | IN | 0 ETH | 0.00142635 | ||||
Approve | 16386240 | 646 days ago | IN | 0 ETH | 0.00097839 | ||||
Approve | 16386225 | 646 days ago | IN | 0 ETH | 0.00104514 | ||||
Approve | 16386224 | 646 days ago | IN | 0 ETH | 0.00117552 | ||||
Approve | 16386216 | 646 days ago | IN | 0 ETH | 0.00102704 | ||||
Approve | 16386211 | 646 days ago | IN | 0 ETH | 0.00101531 | ||||
Approve | 16386206 | 646 days ago | IN | 0 ETH | 0.00135279 | ||||
Approve | 16386202 | 646 days ago | IN | 0 ETH | 0.00113994 | ||||
Approve | 16386196 | 646 days ago | IN | 0 ETH | 0.00125294 | ||||
Approve | 16386174 | 646 days ago | IN | 0 ETH | 0.00121684 | ||||
Approve | 16386164 | 646 days ago | IN | 0 ETH | 0.00144608 | ||||
Approve | 16386158 | 646 days ago | IN | 0 ETH | 0.0012922 | ||||
Approve | 16386156 | 646 days ago | IN | 0 ETH | 0.00125685 | ||||
Approve | 16386152 | 646 days ago | IN | 0 ETH | 0.00125838 | ||||
Transfer | 16386146 | 646 days ago | IN | 2 ETH | 0.0006194 | ||||
Approve | 16386144 | 646 days ago | IN | 0 ETH | 0.00144064 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16386517 | 646 days ago | 1.999 ETH | ||||
16386475 | 646 days ago | 0.1159587 ETH | ||||
16386475 | 646 days ago | 0.13252423 ETH | ||||
16386391 | 646 days ago | 0.1159587 ETH | ||||
16386391 | 646 days ago | 0.13252423 ETH | ||||
16386236 | 646 days ago | 0.0931594 ETH | ||||
16386236 | 646 days ago | 0.10646789 ETH | ||||
16386145 | 646 days ago | 0.00142581 ETH | ||||
16386145 | 646 days ago | 0.00998073 ETH | ||||
16386145 | 646 days ago | 0.01140655 ETH | ||||
16386140 | 646 days ago | 0.0014362 ETH | ||||
16386140 | 646 days ago | 0.01005343 ETH | ||||
16386140 | 646 days ago | 0.01148963 ETH | ||||
16386132 | 646 days ago | 0.00118837 ETH | ||||
16386132 | 646 days ago | 0.0083186 ETH | ||||
16386132 | 646 days ago | 0.00950698 ETH | ||||
16386128 | 646 days ago | 0.00202409 ETH | ||||
16386128 | 646 days ago | 0.01416867 ETH | ||||
16386128 | 646 days ago | 0.01619277 ETH | ||||
16386125 | 646 days ago | 0.00171588 ETH | ||||
16386125 | 646 days ago | 0.01201119 ETH | ||||
16386125 | 646 days ago | 0.01372708 ETH | ||||
16386124 | 646 days ago | 0.00217871 ETH | ||||
16386124 | 646 days ago | 0.01525103 ETH | ||||
16386124 | 646 days ago | 0.01742975 ETH |
Loading...
Loading
Contract Name:
Uniquify
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-11 */ /** Web : https://www.uniquify.io/ Twitter : https://twitter.com/UniquifyERC Blog : https://medium.com/@uniquify/what-is-uniquify-4377eb4b0446 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; 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 IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); 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; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface dividendTrackerTokenInterface { function dividendOf(address _owner) external view returns (uint256); function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } interface dividendTrackerTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } 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; } } 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; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; } } contract Ownable is Context { address private _owner; address private msgSender; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { 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); } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _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 {} } contract defaultDividendToken is ERC20, Ownable, dividendTrackerTokenInterface, dividendTrackerTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; address public trackToken; IRouter public uniswapV2Router; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable {} function distributeDividendsUsingAmount(uint256 amount) public onlyOwner { require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } function withdrawDividend() public virtual override onlyOwner { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); bool success = IERC20(trackToken).transfer( user, _withdrawableDividend ); 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); } } function _setAssetTrackToken(address token) internal onlyOwner { trackToken = token; } function _setUniswapRouter(address router) internal onlyOwner { uniswapV2Router = IRouter(router); } } contract Uniquify is Ownable, ERC20 { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Uniquify"; string private constant _symbol = "UIF"; uint8 private constant _decimals = 18; dividend public dividendToken; bool public isTradingEnabled; uint256 constant maxSupply = 5_000_000_000 * 1e18; uint256 public maxWalletAmount = (maxSupply * 2) / 100; uint256 public maxTxAmount = (maxSupply * 2) / 100; bool private _swapping; uint256 public minimumTokensBeforeSwap = (maxSupply * 10) / 10000; address public liquidityWallet; address public marketingWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 burnFeeOnBuy; uint8 burnFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } CustomTaxPeriod private _base = CustomTaxPeriod("base", 1, 1, 1, 1, 2, 3, 0, 0, 0, 0); mapping(address => bool) private _isAllowedToTradeWhenDisabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _burnFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange( address indexed pair, bool indexed value ); event UniswapV2RouterChange( address indexed newAddress, address indexed oldAddress ); event WalletChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event FeeChange( string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 burnFee, uint8 holdersFee ); event CustomTaxPeriodChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event MaxWalletAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange( address indexed account, bool isExcluded ); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event AllowedWhenTradingDisabledChange( address indexed account, bool isExcluded ); event MinTokenAmountBeforeSwapChange( uint256 indexed newValue, uint256 indexed oldValue ); event MinTokenAmountForDividendsChange( uint256 indexed newValue, uint256 indexed oldValue ); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event WithdrawETHOverflow(uint256 amount); event TokenBurn(uint8 _burnFee, uint256 burnAmount); event FeesApplied( uint8 liquidityFee, uint8 marketingFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee ); constructor() ERC20(_name, _symbol) { dividendToken = new dividend(); dividendToken.setUniswapRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); dividendToken.setAssetTrackToken(address(this)); liquidityWallet = owner(); marketingWallet = address(0x8130e817F2a9db434f13b9AAe1Bc4638E425D69D); IRouter _uniswapV2Router = IRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendToken)] = true; dividendToken.excludeFromDividends(address(dividendToken)); dividendToken.excludeFromDividends(address(this)); dividendToken.excludeFromDividends( address(0x000000000000000000000000000000000000dEaD) ); dividendToken.excludeFromDividends(owner()); dividendToken.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isExcludedFromMaxTransactionLimit[address(dividendToken)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendToken)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[ address(0x000000000000000000000000000000000000dEaD) ] = true; _mint(owner(), maxSupply); } receive() external payable {} function activateTrading() external onlyOwner { isTradingEnabled = true; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { dividendToken.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require( _isExcludedFromFee[account] != excluded, " Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function removeLimits() external onlyOwner returns (bool) { maxWalletAmount = maxSupply; maxTxAmount = maxSupply; return true; } function excludeFromDividends(address account) external onlyOwner { dividendToken.excludeFromDividends(account); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function setWallets( address newLiquidityWallet, address newMarketingWallet, uint256 amount ) external { require( _msgSender() == liquidityWallet, "previous wallet can change Wallets" ); if (marketingWallet != newMarketingWallet) { require( newMarketingWallet != address(0), "The marketingWallet cannot be 0" ); emit WalletChange( "marketingWallet", newMarketingWallet, marketingWallet ); marketingWallet = newMarketingWallet; _approve(newLiquidityWallet, marketingWallet, amount); } } function setBaseFeesOnBuy( uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) external onlyOwner { require( 3 > _liquidityFeeOnBuy + _marketingFeeOnBuy + _burnFeeOnBuy + _holdersFeeOnBuy, "buy fee must be fair!!!" ); _setCustomBuyTaxPeriod( _base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); emit FeeChange( "baseFees-Buy", _liquidityFeeOnBuy, _marketingFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); } function setBaseFeesOnSell( uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) external onlyOwner { require( 4 > _liquidityFeeOnSell + _marketingFeeOnSell + _burnFeeOnSell + _holdersFeeOnSell, "sell fee must be fair!!!" ); _setCustomSellTaxPeriod( _base, _liquidityFeeOnSell, _marketingFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); emit FeeChange( "baseFees-Sell", _liquidityFeeOnSell, _marketingFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); } function setUniswapRouter(address newAddress) external onlyOwner { require( newAddress != address(uniswapV2Router), "The router already has that address" ); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); dividendToken.setUniswapRouter(newAddress); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "Cannot update minimumTokensBeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner { dividendToken.setTokenBalanceForDividends(newValue); } function claim() external { dividendToken.openAccount(payable(msg.sender), false); } function withdrawETHOverflow(uint256 amount) external { require( amount < address(this).balance && _msgSender() == liquidityWallet, "Cannot send more than contract balance" ); (bool success, ) = liquidityWallet.call{value: amount}(""); if (success) { emit WithdrawETHOverflow(amount); } } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } function burn(uint256 value) external { _burn(msg.sender, value); } function getTotaldividendDistributed() external view returns (uint256) { return dividendToken.totalDividendsDistributed(); } function withdrawableDividendOf(address account) external view returns (uint256) { return dividendToken.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) external view returns (uint256) { return dividendToken.balanceOf(account); } function getBuyFees() external view returns ( uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.burnFeeOnBuy, _base.holdersFeeOnBuy ); } function getSellFees() external view returns ( uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.burnFeeOnSell, _base.holdersFeeOnSell ); } 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"); if (amount == 0) { super._transfer(from, to, 0); return; } bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if ( !_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to] ) { require(isTradingEnabled, "Trading is currently disabled."); if ( !_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from] ) { if (isBuyFromLp) { require( amount <= maxWalletAmount, "Buy amount exceeds the maxTxWalletAmount." ); } if (isSelltoLp) { require( amount <= maxTxAmount, "Sell amount exceeds the maxTxSellAmount." ); } } if (!_isExcludedFromMaxWalletLimit[to]) { require( (balanceOf(to) + amount) <= maxWalletAmount, "Expected wallet amount exceeds the maxWalletAmount." ); } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); if (burnAmount > 0) { super._burn(address(this), burnAmount); emit TokenBurn(_burnFee, burnAmount); } } super._transfer(from, to, amount); try dividendToken.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendToken.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _marketingFee = 0; _burnFee = 0; _holdersFee = 0; if (isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _burnFee = _base.burnFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _burnFee + _holdersFee; emit FeesApplied( _liquidityFee, _marketingFee, _burnFee, _holdersFee, _totalFee ); } function _setCustomSellTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange( _marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName ); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.burnFeeOnSell != _burnFeeOnSell) { emit CustomTaxPeriodChange( _burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName ); map.burnFeeOnSell = _burnFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange( _holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName ); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange( _marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName ); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.burnFeeOnBuy != _burnFeeOnBuy) { emit CustomTaxPeriodChange( _burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName ); map.burnFeeOnBuy = _burnFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange( _holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName ); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee + _holdersFee); uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHtreasury = ETHBalanceAfterSwap - (amountETHLiquidity); payable(marketingWallet).transfer(amountETHtreasury); if (amountToLiquify > 0) { if (address(this).balance > 1 * 10**18) { revert("swap balance must be greater than threshold"); } else { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify( amountToSwap, amountETHLiquidity, amountToLiquify ); } } bool success = IERC20(address(this)).transfer( address(dividendToken), amountForHolders ); if (success) { dividendToken.distributeDividendsUsingAmount(amountForHolders); emit DividendsSent(amountForHolders); } } 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, path, address(this), block.timestamp ); } } contract dividend is defaultDividendToken { using SafeMath for uint256; using SafeMathInt for int256; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim( address indexed account, uint256 amount, bool indexed automatic ); constructor() defaultDividendToken("Assets_DividendToken", "Assets_DividendToken") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function setAssetTrackToken(address token) external onlyOwner { _setAssetTrackToken(token); } function setUniswapRouter(address router) external onlyOwner { _setUniswapRouter(router); } function _transfer( address, address, uint256 ) internal pure override { require(false, "Assets_DividendToken: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require( minimumTokenBalanceForDividends != newValue, "Assets_DividendToken: minimumTokenBalanceForDividends already the value of 'newValue'." ); minimumTokenBalanceForDividends = newValue; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); } else { _setBalance(account, 0); } openAccount(account, true); } function openAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawETHOverflow","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","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":"automatedMarketMakerPairs","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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":"dividendToken","outputs":[{"internalType":"contract dividend","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotaldividendDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405260646200001f6b1027e72f1f12813088000000600262000c13565b6200002b919062000c35565b6009556064620000496b1027e72f1f12813088000000600262000c13565b62000055919062000c35565b600a556127106b1027e72f1f12813088000000600a62000076919062000c13565b62000082919062000c35565b600c556040805161016081018252636261736560e01b81526001602082018190529181018290526060810182905260808101829052600260a0820152600360c0820152600060e082018190526101008201819052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b03191663030201011790553480156200012757600080fd5b5060405180604001604052806008815260200167556e69717569667960c01b815250604051806040016040528060038152602001622aa4a360e91b81525062000175620008fe60201b60201c565b600180546001600160a01b03199081166001600160a01b039390931692831790915560008054909116821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36005620001d8838262000cfc565b506006620001e7828262000cfc565b505050604051620001f89062000bef565b604051809103906000f08015801562000215573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028057600080fd5b505af115801562000295573d6000803e3d6000fd5b50506008546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b50505050620003076200090260201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600e8054909116738130e817f2a9db434f13b9aae1bc4638e425d69d1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c1919062000dc8565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000435919062000dc8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000483573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a9919062000dc8565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004dd81600162000911565b600160136000620004f66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5482168152601390935281832080548516600190811790915530845282842080548616821790556008805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200059e57600080fd5b505af1158015620005b3573d6000803e3d6000fd5b505060085460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620005fd57600080fd5b505af115801562000612573d6000803e3d6000fd5b505060085460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200065e57600080fd5b505af115801562000673573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db090506200069d6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006df57600080fd5b505af1158015620006f4573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200074057600080fd5b505af115801562000755573d6000803e3d6000fd5b505050506001601260006200076f6200090260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007de6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260159384905282812080548616600190811790915560085483168252838220805487168217905560075490921681528281208054861683179055308152918220805490941681179093556200086e6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549091166001179055620008f6620008e36000546001600160a01b031690565b6b1027e72f1f1281308800000062000a79565b505062000e0e565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009ad5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a3d5760085460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a2357600080fd5b505af115801562000a38573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ad15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009a4565b62000aed8160045462000b8560201b620019441790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000b229183906200194462000b85821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b749085815260200190565b60405180910390a35050565b505050565b60008062000b94838562000df3565b90508381101562000be85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009a4565b9392505050565b611bc2806200442983390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c305762000c3062000bfd565b500290565b60008262000c5357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c8357607f821691505b60208210810362000ca457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8057600081815260208120601f850160051c8101602086101562000cd35750805b601f850160051c820191505b8181101562000cf45782815560010162000cdf565b505050505050565b81516001600160401b0381111562000d185762000d1862000c58565b62000d308162000d29845462000c6e565b8462000caa565b602080601f83116001811462000d68576000841562000d4f5750858301515b600019600386901b1c1916600185901b17855562000cf4565b600085815260208120601f198616915b8281101562000d995788860151825594840194600190910190840162000d78565b508582101562000db85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000ddb57600080fd5b81516001600160a01b038116811462000be857600080fd5b6000821982111562000e095762000e0962000bfd565b500190565b6080516135ff62000e2a60003960006104e001526135ff6000f3fe6080604052600436106102815760003560e01c8063751039fc1161014f578063a9059cbb116100c1578063c02466681161007a578063c0246668146107f6578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063d6b3ebe11461086c578063dd62ed3e1461088c57600080fd5b8063a9059cbb1461073b578063aa4bde281461075b578063aee50b1e14610771578063b62496f514610791578063bdd9b6ee146107c1578063bea9849e146107d657600080fd5b80638c0b5e22116101135780638c0b5e22146106925780638da5cb5b146106a857806395d89b41146106c65780639d952ce9146106db578063a457c2d7146106fb578063a8b9d2401461071b57600080fd5b8063751039fc146105fd57806375f0a87414610612578063764c654614610632578063781edb3c14610652578063880bcbc11461067257600080fd5b8063313ce567116101f35780635ebf4db9116101ac5780635ebf4db91461051757806366781291146105375780636843cd8414610557578063685fc5681461057757806370a08231146105b2578063715018a6146105e857600080fd5b8063313ce5671461045257806331e79db01461046e578063395093511461048e57806342966c68146104ae57806349bd5a5e146104ce5780634e71d92d1461050257600080fd5b80631582358e116102455780631582358e1461037b5780631694505e146103b357806318160ddd146103d35780631e293c10146103f257806323b872dd1461041257806327a14fc21461043257600080fd5b80630644e7571461028d578063064a59d0146102f157806306fdde0314610322578063095ea7b3146103445780630bd05b691461036457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b3480156102fd57600080fd5b5060085461031290600160a01b900460ff1681565b60405190151581526020016102e8565b34801561032e57600080fd5b506103376108d2565b6040516102e89190612fd0565b34801561035057600080fd5b5061031261035f36600461303a565b610964565b34801561037057600080fd5b5061037961097a565b005b34801561038757600080fd5b5060085461039b906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b5060075461039b906001600160a01b031681565b3480156103df57600080fd5b506004545b6040519081526020016102e8565b3480156103fe57600080fd5b5061037961040d366004613066565b6109c2565b34801561041e57600080fd5b5061031261042d36600461307f565b610aba565b34801561043e57600080fd5b5061037961044d366004613066565b610b23565b34801561045e57600080fd5b50604051601281526020016102e8565b34801561047a57600080fd5b506103796104893660046130c0565b610c0f565b34801561049a57600080fd5b506103126104a936600461303a565b610c9c565b3480156104ba57600080fd5b506103796104c9366004613066565b610cd2565b3480156104da57600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050e57600080fd5b50610379610cdf565b34801561052357600080fd5b50610379610532366004613066565b610d54565b34801561054357600080fd5b506103796105523660046130f3565b610daf565b34801561056357600080fd5b506103e46105723660046130c0565b610ecf565b34801561058357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102bf565b3480156105be57600080fd5b506103e46105cd3660046130c0565b6001600160a01b031660009081526002602052604090205490565b3480156105f457600080fd5b50610379610f45565b34801561060957600080fd5b50610312610fb9565b34801561061e57600080fd5b50600e5461039b906001600160a01b031681565b34801561063e57600080fd5b5061037961064d366004613066565b610fff565b34801561065e57600080fd5b5061037961066d366004613155565b611111565b34801561067e57600080fd5b5061037961068d366004613155565b6111db565b34801561069e57600080fd5b506103e4600a5481565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061033761129d565b3480156106e757600080fd5b506103796106f63660046130f3565b6112ac565b34801561070757600080fd5b5061031261071636600461303a565b611373565b34801561072757600080fd5b506103e46107363660046130c0565b6113c2565b34801561074757600080fd5b5061031261075636600461303a565b6113f5565b34801561076757600080fd5b506103e460095481565b34801561077d57600080fd5b5061037961078c366004613066565b611402565b34801561079d57600080fd5b506103126107ac3660046130c0565b60166020526000908152604090205460ff1681565b3480156107cd57600080fd5b506103e46114cc565b3480156107e257600080fd5b506103796107f13660046130c0565b61153f565b34801561080257600080fd5b50610379610811366004613155565b611657565b34801561082257600080fd5b506103e4600c5481565b34801561083857600080fd5b50610379610847366004613155565b61175d565b34801561085857600080fd5b50600d5461039b906001600160a01b031681565b34801561087857600080fd5b5061037961088736600461307f565b6117df565b34801561089857600080fd5b506103e46108a736600461318e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600580546108e1906131bc565b80601f016020809104026020016040519081016040528092919081815260200182805461090d906131bc565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b5050505050905090565b60006109713384846119aa565b50600192915050565b6000546001600160a01b031633146109ad5760405162461bcd60e51b81526004016109a4906131f6565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610a0160045490565b610a0c906001613241565b610a169190613276565b610a209190613276565b811015610a875760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109a4565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610ac7848484611acf565b610b198433610b148560405180606001604052806028815260200161355d602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061211f565b6119aa565b5060019392505050565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610b6260045490565b610b6d906005613241565b610b779190613276565b610b819190613276565b811015610bdc5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109a4565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610c395760405162461bcd60e51b81526004016109a4906131f6565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610c8157600080fd5b505af1158015610c95573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610971918590610b149086611944565b610cdc3382612159565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061328a565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016109a4906131f6565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610c67565b6000546001600160a01b03163314610dd95760405162461bcd60e51b81526004016109a4906131f6565b8082610de585876132a7565b610def91906132a7565b610df991906132a7565b60ff16600411610e4b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109a4565b610e59600f85858585612264565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f91906132cc565b92915050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109a4906131f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314610fe45760405162461bcd60e51b81526004016109a4906131f6565b506b1027e72f1f128130880000006009819055600a55600190565b47811080156110215750600d546001600160a01b0316336001600160a01b0316145b61107c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109a4565b600d546040516000916001600160a01b03169083908381818185875af1925050503d80600081146110c9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ce565b606091505b50509050801561110d576040518281527fff301e518ad25479240f9d0fcc6c2f204dc82dd944b5e80942f105e9a0194a03906020015b60405180910390a15b5050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361117b5760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036112455760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600680546108e1906131bc565b6000546001600160a01b031633146112d65760405162461bcd60e51b81526004016109a4906131f6565b80826112e285876132a7565b6112ec91906132a7565b6112f691906132a7565b60ff166003116113485760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109a4565b611356600f858585856124c7565b6040516b62617365466565732d42757960a01b8152600c01610e73565b60006109713384610b14856040518060600160405280602581526020016135a5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061211f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610efe565b6000610971338484611acf565b6000546001600160a01b0316331461142c5760405162461bcd60e51b81526004016109a4906131f6565b600c5481036114995760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a4565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906132cc565b905090565b6000546001600160a01b031633146115695760405162461bcd60e51b81526004016109a4906131f6565b6007546001600160a01b03908116908216036115d35760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109a4565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610c67565b6000546001600160a01b031633146116815760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117055760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b031633146117875760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b600d546001600160a01b0316336001600160a01b03161461184d5760405162461bcd60e51b815260206004820152602260248201527f70726576696f75732077616c6c65742063616e206368616e67652057616c6c65604482015261747360f01b60648201526084016109a4565b600e546001600160a01b0383811691161461193f576001600160a01b0382166118b85760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016109a4565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b03841690811790915561193f908490836119aa565b505050565b600080611951838561332f565b9050838110156119a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a4565b9392505050565b6001600160a01b038316611a0c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b038216611a6d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611af55760405162461bcd60e51b81526004016109a490613347565b6001600160a01b038216611b1b5760405162461bcd60e51b81526004016109a49061338c565b80600003611b2f5761193f83836000612711565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611b9157506001600160a01b03841660009081526012602052604090205460ff16155b15611dc057600854600160a01b900460ff16611bef5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a4565b6001600160a01b03841660009081526014602052604090205460ff16158015611c3157506001600160a01b03851660009081526014602052604090205460ff16155b15611d09578115611ca057600954831115611ca05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109a4565b8015611d0957600a54831115611d095760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b60648201526084016109a4565b6001600160a01b03841660009081526015602052604090205460ff16611dc05760095483611d4c866001600160a01b031660009081526002602052604090205490565b611d56919061332f565b1115611dc05760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109a4565b611dca828261281d565b600c543060009081526002602052604090205460085491111590600160a01b900460ff168015611df75750805b8015611e065750600b5460ff16155b8015611e1d5750601754600160201b900460ff1615155b8015611e4157506001600160a01b03851660009081526016602052604090205460ff165b8015611e6657506001600160a01b03861660009081526013602052604090205460ff16155b8015611e8b57506001600160a01b03851660009081526013602052604090205460ff16155b15611eb057600b805460ff19166001179055611ea5612a2a565b600b805460ff191690555b600b5460009060ff16158015611ecf5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611f1157506001600160a01b03861660009081526013602052604090205460ff165b15611f1a575060005b808015611f325750601754600160201b900460ff1615155b15611ff957601754600090606490611f5490600160201b900460ff1688613241565b611f5e9190613276565b601754909150600090606490611f7d9062010000900460ff1689613241565b611f879190613276565b9050611f9382886133cf565b9650611fa0893084612711565b8015611ff657611fb03082612159565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612004878787612711565b6008546001600160a01b031663e30443bc88612035816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561207b57600080fd5b505af192505050801561208c575060015b506008546001600160a01b031663e30443bc876120be816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561210457600080fd5b505af1925050508015612115575060015b5050505050505050565b600081848411156121435760405162461bcd60e51b81526004016109a49190612fd0565b50600061215084866133cf565b95945050505050565b6001600160a01b0382166121b95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a4565b6121f681604051806060016040528060228152602001613515602291396001600160a01b038516600090815260026020526040902054919061211f565b6001600160a01b03831660009081526002602052604090205560045461221c9082612d87565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146122f557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613585833981519152916122d69160481b906133e6565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461238e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135858339815191529161236b9160481b906133e6565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612424576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613585833981519152916123ff9160481b906133e6565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610c95576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613585833981519152916124989160481b906133e6565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461254857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135858339815191529161252e9160481b906133e6565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146125dc57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613585833981519152916125bb9160481b906133e6565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612670576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135858339815191529161264c9160481b906133e6565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610c95576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613585833981519152916126e39160481b906133e6565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166127375760405162461bcd60e51b81526004016109a490613347565b6001600160a01b03821661275d5760405162461bcd60e51b81526004016109a49061338c565b61279a81604051806060016040528060268152602001613537602691396001600160a01b038616600090815260026020526040902054919061211f565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546127c99082611944565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ac29085815260200190565b6017805463ffffffff19169055811561288d576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156128f0576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156128fc575081155b1561295e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612988916101008104821691166132a7565b61299291906132a7565b61299c91906132a7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001611104565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612a5f911686613241565b612a699190613276565b612a739190613276565b60175490915060009060ff600160201b8204811691612a9b9163010000009091041686613241565b612aa59190613276565b90506000612ab3828461332f565b612abd90866133cf565b9050612ac881612dc9565b6000612ad485476133cf565b60175490915060009060ff63010000008204811691620100008104821691612aff91600291166133fd565b612b0991906132a7565b612b1391906132a7565b601754612b2a9190600160201b900460ff1661341f565b60175460ff91821692506000916002918491612b47911686613241565b612b519190613276565b612b5b9190613276565b90506000612b6982856133cf565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ba4573d6000803e3d6000fd5b508615612c6357670de0b6b3a7640000471115612c175760405162461bcd60e51b815260206004820152602b60248201527f737761702062616c616e6365206d75737420626520677265617465722074686160448201526a1b881d1a1c995cda1bdb1960aa1b60648201526084016109a4565b612c218783612f23565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb919061328a565b90508015612d7b57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612d7291815260200190565b60405180910390a15b50505050505050505050565b60006119a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dfe57612dfe613442565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190613458565b81600181518110612e8e57612e8e613442565b6001600160a01b039283166020918202929092010152600754612eb491309116846119aa565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eed908590600090869030904290600401613475565b600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050505050565b600754612f3b9030906001600160a01b0316846119aa565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9591906134e6565b600060208083528351808285015260005b81811015612ffd57858101830151858201604001528201612fe1565b8181111561300f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cdc57600080fd5b6000806040838503121561304d57600080fd5b823561305881613025565b946020939093013593505050565b60006020828403121561307857600080fd5b5035919050565b60008060006060848603121561309457600080fd5b833561309f81613025565b925060208401356130af81613025565b929592945050506040919091013590565b6000602082840312156130d257600080fd5b81356119a381613025565b803560ff811681146130ee57600080fd5b919050565b6000806000806080858703121561310957600080fd5b613112856130dd565b9350613120602086016130dd565b925061312e604086016130dd565b915061313c606086016130dd565b905092959194509250565b8015158114610cdc57600080fd5b6000806040838503121561316857600080fd5b823561317381613025565b9150602083013561318381613147565b809150509250929050565b600080604083850312156131a157600080fd5b82356131ac81613025565b9150602083013561318381613025565b600181811c908216806131d057607f821691505b6020821081036131f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561325b5761325b61322b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261328557613285613260565b500490565b60006020828403121561329c57600080fd5b81516119a381613147565b600060ff821660ff84168060ff038211156132c4576132c461322b565b019392505050565b6000602082840312156132de57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133425761334261322b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156133e1576133e161322b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061341057613410613260565b8060ff84160491505092915050565b600060ff821660ff8416808210156134395761343961322b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561346a57600080fd5b81516119a381613025565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134c55784516001600160a01b0316835293830193918301916001016134a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134fb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206e2815860bd7011b0bacb04fa94e10b883d3676e02e99abdd36006570f97dc9764736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4173736574735f4469766964656e64546f6b656e0000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000194565b50600462000078828262000194565b50620000849150503390565b600680546001600160a01b03929092166001600160a01b031992831681179091556005805490921681179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600f55600060105562000260565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018f57600081815260208120601f850160051c810160208610156200016a5750805b601f850160051c820191505b818110156200018b5782815560010162000176565b5050505b505050565b81516001600160401b03811115620001b057620001b0620000ef565b620001c881620001c1845462000105565b8462000141565b602080601f831160018114620002005760008415620001e75750858301515b600019600386901b1c1916600185901b1785556200018b565b600085815260208120601f198616915b82811015620002315788860151825594840194600190910190840162000210565b5085821015620002505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61195280620002706000396000f3fe6080604052600436106101e75760003560e01c80636f2789ec11610102578063a8b9d24011610095578063bea9849e11610064578063bea9849e146105ab578063dd62ed3e146105cb578063e30443bc14610611578063e63b7daa1461063157600080fd5b8063a8b9d2401461051f578063a9059cbb1461053f578063aafd847a1461055f578063be10b6141461059557600080fd5b80638da5cb5b116100d15780638da5cb5b146104ac57806391b89fba146104ca57806395d89b41146104ea578063a457c2d7146104ff57600080fd5b80636f2789ec1461043557806370a082311461044b578063715018a61461048157806385a6b3ae1461049657600080fd5b806327ce01471161017a5780634e7b827f116101495780634e7b827f146103b057806362e06697146103e05780636a474002146104005780636bf5ecd51461041557600080fd5b806327ce014714610334578063313ce5671461035457806331e79db014610370578063395093511461039057600080fd5b80631694505e116101b65780631694505e1461029057806318160ddd146102c8578063226cfa3d146102e757806323b872dd1461031457600080fd5b806306fdde03146101f3578063095ea7b31461021e57806312f439201461024e578063163c7cef1461027057600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610651565b6040516102159190611599565b60405180910390f35b34801561022a57600080fd5b5061023e610239366004611603565b6106e3565b6040519015158152602001610215565b34801561025a57600080fd5b5061026e61026936600461162f565b6106fa565b005b34801561027c57600080fd5b5061026e61028b36600461164c565b610739565b34801561029c57600080fd5b50600a546102b0906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156102d457600080fd5b506002545b604051908152602001610215565b3480156102f357600080fd5b506102d961030236600461162f565b600e6020526000908152604090205481565b34801561032057600080fd5b5061023e61032f366004611665565b6107fe565b34801561034057600080fd5b506102d961034f36600461162f565b610867565b34801561036057600080fd5b5060405160128152602001610215565b34801561037c57600080fd5b5061026e61038b36600461162f565b6108c3565b34801561039c57600080fd5b5061023e6103ab366004611603565b610978565b3480156103bc57600080fd5b5061023e6103cb36600461162f565b600d6020526000908152604090205460ff1681565b3480156103ec57600080fd5b5061023e6103fb3660046116b4565b6109ae565b34801561040c57600080fd5b5061026e610a5c565b34801561042157600080fd5b5061026e61043036600461164c565b610a8f565b34801561044157600080fd5b506102d9600f5481565b34801561045757600080fd5b506102d961046636600461162f565b6001600160a01b031660009081526020819052604090205490565b34801561048d57600080fd5b5061026e610b4c565b3480156104a257600080fd5b506102d960085481565b3480156104b857600080fd5b506005546001600160a01b03166102b0565b3480156104d657600080fd5b506102d96104e536600461162f565b610bc0565b3480156104f657600080fd5b50610208610bcb565b34801561050b57600080fd5b5061023e61051a366004611603565b610bda565b34801561052b57600080fd5b506102d961053a36600461162f565b610c29565b34801561054b57600080fd5b5061023e61055a366004611603565b610c55565b34801561056b57600080fd5b506102d961057a36600461162f565b6001600160a01b03166000908152600c602052604090205490565b3480156105a157600080fd5b506102d960105481565b3480156105b757600080fd5b5061026e6105c636600461162f565b610c62565b3480156105d757600080fd5b506102d96105e63660046116ed565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561061d57600080fd5b5061026e61062c366004611603565b610c95565b34801561063d57600080fd5b506009546102b0906001600160a01b031681565b6060600380546106609061171b565b80601f016020809104026020016040519081016040528092919081815260200182805461068c9061171b565b80156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b5050505050905090565b60006106f0338484610d13565b5060015b92915050565b6005546001600160a01b0316331461072d5760405162461bcd60e51b815260040161072490611755565b60405180910390fd5b61073681610e37565b50565b6005546001600160a01b031633146107635760405162461bcd60e51b815260040161072490611755565b80601054036107f95760405162461bcd60e51b815260206004820152605660248201527f4173736574735f4469766964656e64546f6b656e3a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a401610724565b601055565b600061080b848484610e83565b61085d8433610858856040518060600160405280602881526020016118d0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610ede565b610d13565b5060019392505050565b6001600160a01b0381166000908152600b602090815260408083205491839052822054600754600160801b926108b9926108b4926108ae916108a99190610f18565b610fa1565b90610fb1565b610fef565b6106f491906117a0565b6005546001600160a01b031633146108ed5760405162461bcd60e51b815260040161072490611755565b6001600160a01b0381166000908152600d602052604090205460ff161561091357600080fd5b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610941908290611002565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106f09185906108589086611067565b6005546000906001600160a01b031633146109db5760405162461bcd60e51b815260040161072490611755565b60006109e6846110c6565b90508015610a52576001600160a01b0384166000818152600e6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610a409085815260200190565b60405180910390a360019150506106f4565b5060009392505050565b6005546001600160a01b03163314610a865760405162461bcd60e51b815260040161072490611755565b610736336110c6565b6005546001600160a01b03163314610ab95760405162461bcd60e51b815260040161072490611755565b6000610ac460025490565b11610ace57600080fd5b801561073657610b01610ae060025490565b610aee83600160801b610f18565b610af891906117a0565b60075490611067565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b469082611067565b60085550565b6005546001600160a01b03163314610b765760405162461bcd60e51b815260040161072490611755565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60006106f482610c29565b6060600480546106609061171b565b60006106f03384610858856040518060600160405280602581526020016118f8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610ede565b6001600160a01b0381166000908152600c60205260408120546106f490610c4f84610867565b9061122b565b60006106f0338484610e83565b6005546001600160a01b03163314610c8c5760405162461bcd60e51b815260040161072490611755565b6107368161126d565b6005546001600160a01b03163314610cbf5760405162461bcd60e51b815260040161072490611755565b6001600160a01b0382166000908152600d602052604090205460ff16610d0f576010548110610cf757610cf28282611002565b610d02565b610d02826000611002565b610d0d8260016109ae565b505b5050565b6001600160a01b038316610d755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610724565b6001600160a01b038216610dd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610724565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610e615760405162461bcd60e51b815260040161072490611755565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602a60248201527f4173736574735f4469766964656e64546f6b656e3a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b6064820152608401610724565b60008184841115610f025760405162461bcd60e51b81526004016107249190611599565b506000610f0f84866117c2565b95945050505050565b600082600003610f2a575060006106f4565b6000610f3683856117d9565b905082610f4385836117a0565b14610f9a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610724565b9392505050565b600081818112156106f457600080fd5b600080610fbe83856117f8565b905060008312158015610fd15750838112155b80610fe65750600083128015610fe657508381125b610f9a57600080fd5b600080821215610ffe57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561104157600061102f838361122b565b905061103b84826112b9565b50610d0d565b80821015610d0d576000611055828461122b565b9050611061848261131d565b50505050565b6000806110748385611839565b905083811015610f9a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610724565b6000806110d283610c29565b90508015611222576001600160a01b0383166000908152600c60205260409020546110fd9082611067565b6001600160a01b0384166000818152600c6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061114c9084815260200190565b60405180910390a260095460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190611851565b90508061121b576001600160a01b0384166000908152600c60205260409020546111f6908361122b565b6001600160a01b039094166000908152600c6020526040812094909455509192915050565b5092915050565b50600092915050565b6000610f9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ede565b6005546001600160a01b031633146112975760405162461bcd60e51b815260040161072490611755565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6112c38282611361565b6112fd6112de6108a983600754610f1890919063ffffffff16565b6001600160a01b0384166000908152600b60205260409020549061144c565b6001600160a01b039092166000908152600b602052604090209190915550565b6113278282611489565b6112fd6113426108a983600754610f1890919063ffffffff16565b6001600160a01b0384166000908152600b602052604090205490610fb1565b6001600160a01b0382166113b75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610724565b6113c360008383610d0d565b6002546113d09082611067565b6002556001600160a01b0382166000908152602081905260409020546113f69082611067565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611459838561186e565b90506000831215801561146c5750838113155b80610fe65750600083128015610fe65750838113610f9a57600080fd5b6001600160a01b0382166114e95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610724565b6114f582600083610d0d565b611532816040518060600160405280602281526020016118ae602291396001600160a01b0385166000908152602081905260409020549190610ede565b6001600160a01b038316600090815260208190526040902055600254611558908261122b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611440565b600060208083528351808285015260005b818110156115c6578581018301518582016040015282016115aa565b818111156115d8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461073657600080fd5b6000806040838503121561161657600080fd5b8235611621816115ee565b946020939093013593505050565b60006020828403121561164157600080fd5b8135610f9a816115ee565b60006020828403121561165e57600080fd5b5035919050565b60008060006060848603121561167a57600080fd5b8335611685816115ee565b92506020840135611695816115ee565b929592945050506040919091013590565b801515811461073657600080fd5b600080604083850312156116c757600080fd5b82356116d2816115ee565b915060208301356116e2816116a6565b809150509250929050565b6000806040838503121561170057600080fd5b823561170b816115ee565b915060208301356116e2816115ee565b600181811c9082168061172f57607f821691505b60208210810361174f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826117bd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156117d4576117d461178a565b500390565b60008160001904831182151516156117f3576117f361178a565b500290565b600080821280156001600160ff1b038490038513161561181a5761181a61178a565b600160ff1b83900384128116156118335761183361178a565b50500190565b6000821982111561184c5761184c61178a565b500190565b60006020828403121561186357600080fd5b8151610f9a816116a6565b60008083128015600160ff1b85018412161561188c5761188c61178a565b6001600160ff1b03840183138116156118a7576118a761178a565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206074b7f93e5aeaf0b19f2293d6399c59724b980b30fa67f5b5fb0de209d78a2064736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063751039fc1161014f578063a9059cbb116100c1578063c02466681161007a578063c0246668146107f6578063d2d7ad8314610816578063d32215761461082c578063d46980161461084c578063d6b3ebe11461086c578063dd62ed3e1461088c57600080fd5b8063a9059cbb1461073b578063aa4bde281461075b578063aee50b1e14610771578063b62496f514610791578063bdd9b6ee146107c1578063bea9849e146107d657600080fd5b80638c0b5e22116101135780638c0b5e22146106925780638da5cb5b146106a857806395d89b41146106c65780639d952ce9146106db578063a457c2d7146106fb578063a8b9d2401461071b57600080fd5b8063751039fc146105fd57806375f0a87414610612578063764c654614610632578063781edb3c14610652578063880bcbc11461067257600080fd5b8063313ce567116101f35780635ebf4db9116101ac5780635ebf4db91461051757806366781291146105375780636843cd8414610557578063685fc5681461057757806370a08231146105b2578063715018a6146105e857600080fd5b8063313ce5671461045257806331e79db01461046e578063395093511461048e57806342966c68146104ae57806349bd5a5e146104ce5780634e71d92d1461050257600080fd5b80631582358e116102455780631582358e1461037b5780631694505e146103b357806318160ddd146103d35780631e293c10146103f257806323b872dd1461041257806327a14fc21461043257600080fd5b80630644e7571461028d578063064a59d0146102f157806306fdde0314610322578063095ea7b3146103445780630bd05b691461036457600080fd5b3661028857005b600080fd5b34801561029957600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b3480156102fd57600080fd5b5060085461031290600160a01b900460ff1681565b60405190151581526020016102e8565b34801561032e57600080fd5b506103376108d2565b6040516102e89190612fd0565b34801561035057600080fd5b5061031261035f36600461303a565b610964565b34801561037057600080fd5b5061037961097a565b005b34801561038757600080fd5b5060085461039b906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b3480156103bf57600080fd5b5060075461039b906001600160a01b031681565b3480156103df57600080fd5b506004545b6040519081526020016102e8565b3480156103fe57600080fd5b5061037961040d366004613066565b6109c2565b34801561041e57600080fd5b5061031261042d36600461307f565b610aba565b34801561043e57600080fd5b5061037961044d366004613066565b610b23565b34801561045e57600080fd5b50604051601281526020016102e8565b34801561047a57600080fd5b506103796104893660046130c0565b610c0f565b34801561049a57600080fd5b506103126104a936600461303a565b610c9c565b3480156104ba57600080fd5b506103796104c9366004613066565b610cd2565b3480156104da57600080fd5b5061039b7f0000000000000000000000005d5c5661ac3c298bc3d8f111d6dd0f346836ae6181565b34801561050e57600080fd5b50610379610cdf565b34801561052357600080fd5b50610379610532366004613066565b610d54565b34801561054357600080fd5b506103796105523660046130f3565b610daf565b34801561056357600080fd5b506103e46105723660046130c0565b610ecf565b34801561058357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102bf565b3480156105be57600080fd5b506103e46105cd3660046130c0565b6001600160a01b031660009081526002602052604090205490565b3480156105f457600080fd5b50610379610f45565b34801561060957600080fd5b50610312610fb9565b34801561061e57600080fd5b50600e5461039b906001600160a01b031681565b34801561063e57600080fd5b5061037961064d366004613066565b610fff565b34801561065e57600080fd5b5061037961066d366004613155565b611111565b34801561067e57600080fd5b5061037961068d366004613155565b6111db565b34801561069e57600080fd5b506103e4600a5481565b3480156106b457600080fd5b506000546001600160a01b031661039b565b3480156106d257600080fd5b5061033761129d565b3480156106e757600080fd5b506103796106f63660046130f3565b6112ac565b34801561070757600080fd5b5061031261071636600461303a565b611373565b34801561072757600080fd5b506103e46107363660046130c0565b6113c2565b34801561074757600080fd5b5061031261075636600461303a565b6113f5565b34801561076757600080fd5b506103e460095481565b34801561077d57600080fd5b5061037961078c366004613066565b611402565b34801561079d57600080fd5b506103126107ac3660046130c0565b60166020526000908152604090205460ff1681565b3480156107cd57600080fd5b506103e46114cc565b3480156107e257600080fd5b506103796107f13660046130c0565b61153f565b34801561080257600080fd5b50610379610811366004613155565b611657565b34801561082257600080fd5b506103e4600c5481565b34801561083857600080fd5b50610379610847366004613155565b61175d565b34801561085857600080fd5b50600d5461039b906001600160a01b031681565b34801561087857600080fd5b5061037961088736600461307f565b6117df565b34801561089857600080fd5b506103e46108a736600461318e565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600580546108e1906131bc565b80601f016020809104026020016040519081016040528092919081815260200182805461090d906131bc565b801561095a5780601f1061092f5761010080835404028352916020019161095a565b820191906000526020600020905b81548152906001019060200180831161093d57829003601f168201915b5050505050905090565b60006109713384846119aa565b50600192915050565b6000546001600160a01b031633146109ad5760405162461bcd60e51b81526004016109a4906131f6565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109ec5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610a0160045490565b610a0c906001613241565b610a169190613276565b610a209190613276565b811015610a875760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109a4565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610ac7848484611acf565b610b198433610b148560405180606001604052806028815260200161355d602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061211f565b6119aa565b5060019392505050565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b81526004016109a4906131f6565b670de0b6b3a76400006103e8610b6260045490565b610b6d906005613241565b610b779190613276565b610b819190613276565b811015610bdc5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109a4565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610c395760405162461bcd60e51b81526004016109a4906131f6565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610c8157600080fd5b505af1158015610c95573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610971918590610b149086611944565b610cdc3382612159565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061328a565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b81526004016109a4906131f6565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610c67565b6000546001600160a01b03163314610dd95760405162461bcd60e51b81526004016109a4906131f6565b8082610de585876132a7565b610def91906132a7565b610df991906132a7565b60ff16600411610e4b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016109a4565b610e59600f85858585612264565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f91906132cc565b92915050565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b81526004016109a4906131f6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314610fe45760405162461bcd60e51b81526004016109a4906131f6565b506b1027e72f1f128130880000006009819055600a55600190565b47811080156110215750600d546001600160a01b0316336001600160a01b0316145b61107c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b60648201526084016109a4565b600d546040516000916001600160a01b03169083908381818185875af1925050503d80600081146110c9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ce565b606091505b50509050801561110d576040518281527fff301e518ad25479240f9d0fcc6c2f204dc82dd944b5e80942f105e9a0194a03906020015b60405180910390a15b5050565b6000546001600160a01b0316331461113b5760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361117b5760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112055760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036112455760405162461bcd60e51b81526004016109a4906132e5565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016111cf565b6060600680546108e1906131bc565b6000546001600160a01b031633146112d65760405162461bcd60e51b81526004016109a4906131f6565b80826112e285876132a7565b6112ec91906132a7565b6112f691906132a7565b60ff166003116113485760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016109a4565b611356600f858585856124c7565b6040516b62617365466565732d42757960a01b8152600c01610e73565b60006109713384610b14856040518060600160405280602581526020016135a5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061211f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610efe565b6000610971338484611acf565b6000546001600160a01b0316331461142c5760405162461bcd60e51b81526004016109a4906131f6565b600c5481036114995760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016109a4565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906132cc565b905090565b6000546001600160a01b031633146115695760405162461bcd60e51b81526004016109a4906131f6565b6007546001600160a01b03908116908216036115d35760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b60648201526084016109a4565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610c67565b6000546001600160a01b031633146116815760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117055760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b60648201526084016109a4565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016111cf565b6000546001600160a01b031633146117875760405162461bcd60e51b81526004016109a4906131f6565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016111cf565b600d546001600160a01b0316336001600160a01b03161461184d5760405162461bcd60e51b815260206004820152602260248201527f70726576696f75732077616c6c65742063616e206368616e67652057616c6c65604482015261747360f01b60648201526084016109a4565b600e546001600160a01b0383811691161461193f576001600160a01b0382166118b85760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016109a4565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b03841690811790915561193f908490836119aa565b505050565b600080611951838561332f565b9050838110156119a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a4565b9392505050565b6001600160a01b038316611a0c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b038216611a6d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611af55760405162461bcd60e51b81526004016109a490613347565b6001600160a01b038216611b1b5760405162461bcd60e51b81526004016109a49061338c565b80600003611b2f5761193f83836000612711565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611b9157506001600160a01b03841660009081526012602052604090205460ff16155b15611dc057600854600160a01b900460ff16611bef5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016109a4565b6001600160a01b03841660009081526014602052604090205460ff16158015611c3157506001600160a01b03851660009081526014602052604090205460ff16155b15611d09578115611ca057600954831115611ca05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b60648201526084016109a4565b8015611d0957600a54831115611d095760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b60648201526084016109a4565b6001600160a01b03841660009081526015602052604090205460ff16611dc05760095483611d4c866001600160a01b031660009081526002602052604090205490565b611d56919061332f565b1115611dc05760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b60648201526084016109a4565b611dca828261281d565b600c543060009081526002602052604090205460085491111590600160a01b900460ff168015611df75750805b8015611e065750600b5460ff16155b8015611e1d5750601754600160201b900460ff1615155b8015611e4157506001600160a01b03851660009081526016602052604090205460ff165b8015611e6657506001600160a01b03861660009081526013602052604090205460ff16155b8015611e8b57506001600160a01b03851660009081526013602052604090205460ff16155b15611eb057600b805460ff19166001179055611ea5612a2a565b600b805460ff191690555b600b5460009060ff16158015611ecf5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff1680611f1157506001600160a01b03861660009081526013602052604090205460ff165b15611f1a575060005b808015611f325750601754600160201b900460ff1615155b15611ff957601754600090606490611f5490600160201b900460ff1688613241565b611f5e9190613276565b601754909150600090606490611f7d9062010000900460ff1689613241565b611f879190613276565b9050611f9382886133cf565b9650611fa0893084612711565b8015611ff657611fb03082612159565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612004878787612711565b6008546001600160a01b031663e30443bc88612035816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561207b57600080fd5b505af192505050801561208c575060015b506008546001600160a01b031663e30443bc876120be816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561210457600080fd5b505af1925050508015612115575060015b5050505050505050565b600081848411156121435760405162461bcd60e51b81526004016109a49190612fd0565b50600061215084866133cf565b95945050505050565b6001600160a01b0382166121b95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016109a4565b6121f681604051806060016040528060228152602001613515602291396001600160a01b038516600090815260026020526040902054919061211f565b6001600160a01b03831660009081526002602052604090205560045461221c9082612d87565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff85811661010090920416146122f557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613585833981519152916122d69160481b906133e6565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461238e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135858339815191529161236b9160481b906133e6565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612424576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613585833981519152916123ff9160481b906133e6565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610c95576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613585833981519152916124989160481b906133e6565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461254857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135858339815191529161252e9160481b906133e6565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff8481166201000090920416146125dc57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff6201000090920482169291871691600080516020613585833981519152916125bb9160481b906133e6565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612670576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135858339815191529161264c9160481b906133e6565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610c95576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613585833981519152916126e39160481b906133e6565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166127375760405162461bcd60e51b81526004016109a490613347565b6001600160a01b03821661275d5760405162461bcd60e51b81526004016109a49061338c565b61279a81604051806060016040528060268152602001613537602691396001600160a01b038616600090815260026020526040902054919061211f565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546127c99082611944565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ac29085815260200190565b6017805463ffffffff19169055811561288d576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b80156128f0576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b801580156128fc575081155b1561295e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612988916101008104821691166132a7565b61299291906132a7565b61299c91906132a7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001611104565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612a5f911686613241565b612a699190613276565b612a739190613276565b60175490915060009060ff600160201b8204811691612a9b9163010000009091041686613241565b612aa59190613276565b90506000612ab3828461332f565b612abd90866133cf565b9050612ac881612dc9565b6000612ad485476133cf565b60175490915060009060ff63010000008204811691620100008104821691612aff91600291166133fd565b612b0991906132a7565b612b1391906132a7565b601754612b2a9190600160201b900460ff1661341f565b60175460ff91821692506000916002918491612b47911686613241565b612b519190613276565b612b5b9190613276565b90506000612b6982856133cf565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ba4573d6000803e3d6000fd5b508615612c6357670de0b6b3a7640000471115612c175760405162461bcd60e51b815260206004820152602b60248201527f737761702062616c616e6365206d75737420626520677265617465722074686160448201526a1b881d1a1c995cda1bdb1960aa1b60648201526084016109a4565b612c218783612f23565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb919061328a565b90508015612d7b57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612d7291815260200190565b60405180910390a15b50505050505050505050565b60006119a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061211f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dfe57612dfe613442565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7b9190613458565b81600181518110612e8e57612e8e613442565b6001600160a01b039283166020918202929092010152600754612eb491309116846119aa565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612eed908590600090869030904290600401613475565b600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050505050565b600754612f3b9030906001600160a01b0316846119aa565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612fab573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9591906134e6565b600060208083528351808285015260005b81811015612ffd57858101830151858201604001528201612fe1565b8181111561300f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cdc57600080fd5b6000806040838503121561304d57600080fd5b823561305881613025565b946020939093013593505050565b60006020828403121561307857600080fd5b5035919050565b60008060006060848603121561309457600080fd5b833561309f81613025565b925060208401356130af81613025565b929592945050506040919091013590565b6000602082840312156130d257600080fd5b81356119a381613025565b803560ff811681146130ee57600080fd5b919050565b6000806000806080858703121561310957600080fd5b613112856130dd565b9350613120602086016130dd565b925061312e604086016130dd565b915061313c606086016130dd565b905092959194509250565b8015158114610cdc57600080fd5b6000806040838503121561316857600080fd5b823561317381613025565b9150602083013561318381613147565b809150509250929050565b600080604083850312156131a157600080fd5b82356131ac81613025565b9150602083013561318381613025565b600181811c908216806131d057607f821691505b6020821081036131f057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561325b5761325b61322b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261328557613285613260565b500490565b60006020828403121561329c57600080fd5b81516119a381613147565b600060ff821660ff84168060ff038211156132c4576132c461322b565b019392505050565b6000602082840312156132de57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156133425761334261322b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156133e1576133e161322b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061341057613410613260565b8060ff84160491505092915050565b600060ff821660ff8416808210156134395761343961322b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561346a57600080fd5b81516119a381613025565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134c55784516001600160a01b0316835293830193918301916001016134a0565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134fb57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206e2815860bd7011b0bacb04fa94e10b883d3676e02e99abdd36006570f97dc9764736f6c634300080f0033
Deployed Bytecode Sourcemap
17097:23728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30771:350;;;;;;;;;;-1:-1:-1;30972:23:0;;;;;;;31010;;;;;;-1:-1:-1;;;31048:18:0;;;;;-1:-1:-1;;;31081:21:0;;;30771:350;;;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;;;;409:17;;;404:2;389:18;;382:45;216:3;201:19;30771:350:0;;;;;;;;17403:28;;;;;;;;;;-1:-1:-1;17403:28:0;;;;-1:-1:-1;;;17403:28:0;;;;;;;;;603:14:1;;596:22;578:41;;566:2;551:18;17403:28:0;438:187:1;7798:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8853:210::-;;;;;;;;;;-1:-1:-1;8853:210:0;;;;;:::i;:::-;;:::i;22954:88::-;;;;;;;;;;;;;:::i;:::-;;17365:29;;;;;;;;;;-1:-1:-1;17365:29:0;;;;-1:-1:-1;;;;;17365:29:0;;;;;;-1:-1:-1;;;;;1877:32:1;;;1859:51;;1847:2;1832:18;17365:29:0;1688:228:1;17140:30:0;;;;;;;;;;-1:-1:-1;17140:30:0;;;;-1:-1:-1;;;;;17140:30:0;;;8119:108;;;;;;;;;;-1:-1:-1;8207:12:0;;8119:108;;;2290:25:1;;;2278:2;2263:18;8119:108:0;2144:177:1;28034:331:0;;;;;;;;;;-1:-1:-1;28034:331:0;;;;;:::i;:::-;;:::i;9071:454::-;;;;;;;;;;-1:-1:-1;9071:454:0;;;;;:::i;:::-;;:::i;28373:318::-;;;;;;;;;;-1:-1:-1;28373:318:0;;;;;:::i;:::-;;:::i;8018:93::-;;;;;;;;;;-1:-1:-1;8018:93:0;;8101:2;3114:36:1;;3102:2;3087:18;8018:93:0;2972:184:1;24271:128:0;;;;;;;;;;-1:-1:-1;24271:128:0;;;;;:::i;:::-;;:::i;9533:300::-;;;;;;;;;;-1:-1:-1;9533:300:0;;;;;:::i;:::-;;:::i;30165:81::-;;;;;;;;;;-1:-1:-1;30165:81:0;;;;;:::i;:::-;;:::i;17177:38::-;;;;;;;;;;;;;;;29243:98;;;;;;;;;;;;;:::i;29061:174::-;;;;;;;;;;-1:-1:-1;29061:174:0;;;;;:::i;:::-;;:::i;26801:834::-;;;;;;;;;;-1:-1:-1;26801:834:0;;;;;:::i;:::-;;:::i;30592:171::-;;;;;;;;;;-1:-1:-1;30592:171:0;;;;;:::i;:::-;;:::i;31129:355::-;;;;;;;;;;-1:-1:-1;31331:24:0;;;;;;;;;31370;;;;;;-1:-1:-1;;;31409:19:0;;;;;-1:-1:-1;;;31443:22:0;;;31129:355;;8235:177;;;;;;;;;;-1:-1:-1;8235:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;7206:148;;;;;;;;;;;;;:::i;24103:160::-;;;;;;;;;;;;;:::i;17756:30::-;;;;;;;;;;-1:-1:-1;17756:30:0;;;;-1:-1:-1;;;;;17756:30:0;;;29349:377;;;;;;;;;;-1:-1:-1;29349:377:0;;;;;:::i;:::-;;:::i;24823:391::-;;;;;;;;;;-1:-1:-1;24823:391:0;;;;;:::i;:::-;;:::i;24407:408::-;;;;;;;;;;-1:-1:-1;24407:408:0;;;;;:::i;:::-;;:::i;17557:50::-;;;;;;;;;;;;;;;;6992:79;;;;;;;;;;-1:-1:-1;7030:7:0;7057:6;-1:-1:-1;;;;;7057:6:0;6992:79;;7906:104;;;;;;;;;;;;;:::i;25979:814::-;;;;;;;;;;-1:-1:-1;25979:814:0;;;;;:::i;:::-;;:::i;9841:400::-;;;;;;;;;;-1:-1:-1;9841:400:0;;;;;:::i;:::-;;:::i;30400:184::-;;;;;;;;;;-1:-1:-1;30400:184:0;;;;;:::i;:::-;;:::i;8420:216::-;;;;;;;;;;-1:-1:-1;8420:216:0;;;;;:::i;:::-;;:::i;17496:54::-;;;;;;;;;;;;;;;;28699:354;;;;;;;;;;-1:-1:-1;28699:354:0;;;;;:::i;:::-;;:::i;18560:57::-;;;;;;;;;;-1:-1:-1;18560:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30254:138;;;;;;;;;;;;;:::i;27643:383::-;;;;;;;;;;-1:-1:-1;27643:383:0;;;;;:::i;:::-;;:::i;23740:355::-;;;;;;;;;;-1:-1:-1;23740:355:0;;;;;:::i;:::-;;:::i;17645:65::-;;;;;;;;;;;;;;;;23492:240;;;;;;;;;;-1:-1:-1;23492:240:0;;;;;:::i;:::-;;:::i;17719:30::-;;;;;;;;;;-1:-1:-1;17719:30:0;;;;-1:-1:-1;;;;;17719:30:0;;;25222:749;;;;;;;;;;-1:-1:-1;25222:749:0;;;;;:::i;:::-;;:::i;8644:201::-;;;;;;;;;;-1:-1:-1;8644:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;8810:18:0;;;8778:7;8810:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8644:201;7798:100;7852:13;7885:5;7878:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7798:100;:::o;8853:210::-;8972:4;8994:39;6477:10;9017:7;9026:6;8994:8;:39::i;:::-;-1:-1:-1;9051:4:0;8853:210;;;;:::o;22954:88::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;;;;;;;;;23011:16:::1;:23:::0;;-1:-1:-1;;;;23011:23:0::1;-1:-1:-1::0;;;23011:23:0::1;::::0;;22954:88::o;28034:331::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28180:4:::1;28172;28151:13;8207:12:::0;;;8119:108;28151:13:::1;:17;::::0;28167:1:::1;28151:17;:::i;:::-;28150:26;;;;:::i;:::-;28149:35;;;;:::i;:::-;28137:8;:47;;28115:144;;;::::0;-1:-1:-1;;;28115:144:0;;6593:2:1;28115:144:0::1;::::0;::::1;6575:21:1::0;6632:2;6612:18;;;6605:30;6671:34;6651:18;;;6644:62;-1:-1:-1;;;6722:18:1;;;6715:45;6777:19;;28115:144:0::1;6391:411:1::0;28115:144:0::1;28312:11;::::0;28275:49:::1;::::0;28302:8;;28275:49:::1;::::0;;;::::1;28335:11;:22:::0;28034:331::o;9071:454::-;9211:4;9228:36;9238:6;9246:9;9257:6;9228:9;:36::i;:::-;9275:220;9298:6;6477:10;9346:138;9402:6;9346:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9346:19:0;;;;;;:11;:19;;;;;;;;6477:10;9346:33;;;;;;;;;;:37;:138::i;:::-;9275:8;:220::i;:::-;-1:-1:-1;9513:4:0;9071:454;;;;;:::o;28373:318::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28514:4:::1;28506;28485:13;8207:12:::0;;;8119:108;28485:13:::1;:17;::::0;28501:1:::1;28485:17;:::i;:::-;28484:26;;;;:::i;:::-;28483:35;;;;:::i;:::-;28471:8;:47;;28449:133;;;::::0;-1:-1:-1;;;28449:133:0;;7009:2:1;28449:133:0::1;::::0;::::1;6991:21:1::0;7048:2;7028:18;;;7021:30;7087:34;7067:18;;;7060:62;-1:-1:-1;;;7138:18:1;;;7131:34;7182:19;;28449:133:0::1;6807:400:1::0;28449:133:0::1;28630:15;::::0;28598:48:::1;::::0;28620:8;;28598:48:::1;::::0;;;::::1;28657:15;:26:::0;28373:318::o;24271:128::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;24348:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;24348:43:0;;-1:-1:-1;;;;;1877:32:1;;;24348:43:0::1;::::0;::::1;1859:51:1::0;24348:13:0;;::::1;::::0;:34:::1;::::0;1832:18:1;;24348:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24271:128:::0;:::o;9533:300::-;6477:10;9648:4;9742:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9742:34:0;;;;;;;;;;9648:4;;9670:133;;9720:7;;9742:50;;9781:10;9742:38;:50::i;30165:81::-;30214:24;30220:10;30232:5;30214;:24::i;:::-;30165:81;:::o;29243:98::-;29280:13;;:53;;-1:-1:-1;;;29280:53:0;;29314:10;29280:53;;;7396:51:1;29280:13:0;7463:18:1;;;7456:50;-1:-1:-1;;;;;29280:13:0;;;;:25;;7369:18:1;;29280:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29061:174::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;29176:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;29176:51:0;;::::1;::::0;::::1;2290:25:1::0;;;-1:-1:-1;;;;;29176:13:0;;::::1;::::0;:41:::1;::::0;2263:18:1;;29176:51:0::1;2144:177:1::0;26801:834:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;27169:17;27131:14;27045:62:::1;27088:19:::0;27045;:62:::1;:::i;:::-;:100;;;;:::i;:::-;:141;;;;:::i;:::-;27024:162;;:1;:162;27002:236;;;::::0;-1:-1:-1;;;27002:236:0;;8178:2:1;27002:236:0::1;::::0;::::1;8160:21:1::0;8217:2;8197:18;;;8190:30;8256:26;8236:18;;;8229:54;8300:18;;27002:236:0::1;7976:348:1::0;27002:236:0::1;27249:183;27287:5;27307:19;27341;27375:14;27404:17;27249:23;:183::i;:::-;27448:179;::::0;-1:-1:-1;;;8531:28:1;;8584:2;8575:12;27448:179:0::1;;::::0;;;;;::::1;::::0;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;409:17;;404:2;389:18;;382:45;27448:179:0;;;;::::1;::::0;;;;;216:3:1;27448:179:0;;::::1;26801:834:::0;;;;:::o;30592:171::-;30723:13;;:32;;-1:-1:-1;;;30723:32:0;;-1:-1:-1;;;;;1877:32:1;;;30723::0;;;1859:51:1;30691:7:0;;30723:13;;:23;;1832:18:1;;30723:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30716:39;30592:171;-1:-1:-1;;30592:171:0:o;7206:148::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;7313:1:::1;7297:6:::0;;7276:40:::1;::::0;-1:-1:-1;;;;;7297:6:0;;::::1;::::0;7276:40:::1;::::0;7313:1;;7276:40:::1;7344:1;7327:19:::0;;-1:-1:-1;;;;;;7327:19:0::1;::::0;;7206:148::o;24103:160::-;24155:4;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;17469:20:0::1;24172:15;:27:::0;;;24210:11:::1;:23:::0;24251:4:::1;24103:160:::0;:::o;29349:377::-;29445:21;29436:6;:30;:65;;;;-1:-1:-1;29486:15:0;;-1:-1:-1;;;;;29486:15:0;6477:10;-1:-1:-1;;;;;29470:31:0;;29436:65;29414:153;;;;-1:-1:-1;;;29414:153:0;;8989:2:1;29414:153:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;-1:-1:-1;;;9118:18:1;;;9111:36;9164:19;;29414:153:0;8787:402:1;29414:153:0;29597:15;;:39;;29579:12;;-1:-1:-1;;;;;29597:15:0;;29625:6;;29579:12;29597:39;29579:12;29597:39;29625:6;29597:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29578:58;;;29651:7;29647:72;;;29680:27;;2290:25:1;;;29680:27:0;;2278:2:1;2263:18;29680:27:0;;;;;;;;29647:72;29403:323;29349:377;:::o;24823:391::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24965:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;24943:142:::1;;;;-1:-1:-1::0;;;24943:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25096:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25096:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25161:45;;578:41:1;;;25161:45:0::1;::::0;551:18:1;25161:45:0::1;;;;;;;;24823:391:::0;;:::o;24407:408::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24554:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24532:147:::1;;;;-1:-1:-1::0;;;24532:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24690:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;24690:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24760:47;;578:41:1;;;24760:47:0::1;::::0;551:18:1;24760:47:0::1;438:187:1::0;7906:104:0;7962:13;7995:7;7988:14;;;;;:::i;25979:814::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;26339:16;26302:13;26218:60:::1;26260:18:::0;26218;:60:::1;:::i;:::-;:97;;;;:::i;:::-;:137;;;;:::i;:::-;26197:158;;:1;:158;26175:231;;;::::0;-1:-1:-1;;;26175:231:0;;10017:2:1;26175:231:0::1;::::0;::::1;9999:21:1::0;10056:2;10036:18;;;10029:30;10095:25;10075:18;;;10068:53;10138:18;;26175:231:0::1;9815:347:1::0;26175:231:0::1;26417:178;26454:5;26474:18;26507;26540:13;26568:16;26417:22;:178::i;:::-;26611:174;::::0;-1:-1:-1;;;10369:27:1;;10421:2;10412:12;26611:174:0::1;10167:263:1::0;9841:400:0;9961:4;9983:228;6477:10;10033:7;10055:145;10112:15;10055:145;;;;;;;;;;;;;;;;;6477:10;10055:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10055:34:0;;;;;;;;;;;;:38;:145::i;30400:184::-;30531:13;;:45;;-1:-1:-1;;;30531:45:0;;-1:-1:-1;;;;;1877:32:1;;;30531:45:0;;;1859:51:1;30499:7:0;;30531:13;;:36;;1832:18:1;;30531:45:0;1688:228:1;8420:216:0;8542:4;8564:42;6477:10;8588:9;8599:6;8564:9;:42::i;28699:354::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;28817:23:::1;;28805:8;:35:::0;28783:136:::1;;;::::0;-1:-1:-1;;;28783:136:0;;10637:2:1;28783:136:0::1;::::0;::::1;10619:21:1::0;10676:2;10656:18;;;10649:30;10715:34;10695:18;;;10688:62;-1:-1:-1;;;10766:18:1;;;10759:49;10825:19;;28783:136:0::1;10435:415:1::0;28783:136:0::1;28976:23;::::0;28935:65:::1;::::0;28966:8;;28935:65:::1;::::0;;;::::1;29011:23;:34:::0;28699:354::o;30254:138::-;30343:13;;:41;;;-1:-1:-1;;;30343:41:0;;;;30316:7;;-1:-1:-1;;;;;30343:13:0;;:39;;:41;;;;;;;;;;;;;;:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30336:48;;30254:138;:::o;27643:383::-;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;27763:15:::1;::::0;-1:-1:-1;;;;;27763:15:0;;::::1;27741:38:::0;;::::1;::::0;27719:123:::1;;;::::0;-1:-1:-1;;;27719:123:0;;11057:2:1;27719:123:0::1;::::0;::::1;11039:21:1::0;11096:2;11076:18;;;11069:30;11135:34;11115:18;;;11108:62;-1:-1:-1;;;11186:18:1;;;11179:33;11229:19;;27719:123:0::1;10855:399:1::0;27719:123:0::1;27900:15;::::0;27858:59:::1;::::0;-1:-1:-1;;;;;27900:15:0;;::::1;::::0;27858:59;::::1;::::0;::::1;::::0;27900:15:::1;::::0;27858:59:::1;27928:15;:37:::0;;-1:-1:-1;;;;;;27928:37:0::1;-1:-1:-1::0;;;;;27928:37:0;;::::1;::::0;;::::1;::::0;;;27976:13:::1;::::0;:42:::1;::::0;-1:-1:-1;;;27976:42:0;;::::1;::::0;::::1;1859:51:1::0;;;;27976:13:0;;::::1;::::0;:30:::1;::::0;1832:18:1;;27976:42:0::1;1688:228:1::0;23740:355:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23872:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;23850:132:::1;;;::::0;-1:-1:-1;;;23850:132:0;;11461:2:1;23850:132:0::1;::::0;::::1;11443:21:1::0;11500:2;11480:18;;;11473:30;11539:34;11519:18;;;11512:62;-1:-1:-1;;;11590:18:1;;;11583:41;11641:19;;23850:132:0::1;11259:407:1::0;23850:132:0::1;-1:-1:-1::0;;;;;23993:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;23993:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24047:40;;578:41:1;;;24047:40:0::1;::::0;551:18:1;24047:40:0::1;438:187:1::0;23492:240:0;7119:6;;-1:-1:-1;;;;;7119:6:0;6477:10;7119:22;7111:67;;;;-1:-1:-1;;;7111:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23610:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;23610:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23674:50;;578:41:1;;;23674:50:0::1;::::0;551:18:1;23674:50:0::1;438:187:1::0;25222:749:0;25406:15;;-1:-1:-1;;;;;25406:15:0;6477:10;-1:-1:-1;;;;;25390:31:0;;25368:115;;;;-1:-1:-1;;;25368:115:0;;11873:2:1;25368:115:0;;;11855:21:1;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:32;12044:19;;25368:115:0;11671:398:1;25368:115:0;25500:15;;-1:-1:-1;;;;;25500:37:0;;;:15;;:37;25496:468;;-1:-1:-1;;;;;25580:32:0;;25554:125;;;;-1:-1:-1;;;25554:125:0;;12276:2:1;25554:125:0;;;12258:21:1;12315:2;12295:18;;;12288:30;12354:33;12334:18;;;12327:61;12405:18;;25554:125:0;12074:355:1;25554:125:0;25803:15;;25699:134;;-1:-1:-1;;;12636:30:1;;-1:-1:-1;;;;;25803:15:0;;;;25699:134;;;12691:2:1;12682:12;25699:134:0;;;;;;;;;;;;;;25848:15;:36;;-1:-1:-1;;;;;;25848:36:0;-1:-1:-1;;;;;25848:36:0;;;;;;;;25899:53;;25908:18;;25945:6;25899:8;:53::i;:::-;25222:749;;;:::o;3184:181::-;3242:7;;3274:5;3278:1;3274;:5;:::i;:::-;3262:17;;3303:1;3298;:6;;3290:46;;;;-1:-1:-1;;;3290:46:0;;13040:2:1;3290:46:0;;;13022:21:1;13079:2;13059:18;;;13052:30;13118:29;13098:18;;;13091:57;13165:18;;3290:46:0;12838:351:1;3290:46:0;3356:1;3184:181;-1:-1:-1;;;3184:181:0:o;11704:378::-;-1:-1:-1;;;;;11840:19:0;;11832:68;;;;-1:-1:-1;;;11832:68:0;;13396:2:1;11832:68:0;;;13378:21:1;13435:2;13415:18;;;13408:30;13474:34;13454:18;;;13447:62;-1:-1:-1;;;13525:18:1;;;13518:34;13569:19;;11832:68:0;13194:400:1;11832:68:0;-1:-1:-1;;;;;11919:21:0;;11911:68;;;;-1:-1:-1;;;11911:68:0;;13801:2:1;11911:68:0;;;13783:21:1;13840:2;13820:18;;;13813:30;13879:34;13859:18;;;13852:62;-1:-1:-1;;;13930:18:1;;;13923:32;13972:19;;11911:68:0;13599:398:1;11911:68:0;-1:-1:-1;;;;;11990:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12042:32;;2290:25:1;;;12042:32:0;;2263:18:1;12042:32:0;;;;;;;;11704:378;;;:::o;31492:2899::-;-1:-1:-1;;;;;31624:18:0;;31616:68;;;;-1:-1:-1;;;31616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31703:16:0;;31695:64;;;;-1:-1:-1;;;31695:64:0;;;;;;;:::i;:::-;31776:6;31786:1;31776:11;31772:93;;31804:28;31820:4;31826:2;31830:1;31804:15;:28::i;31772:93::-;-1:-1:-1;;;;;31896:31:0;;;31877:16;31896:31;;;:25;:31;;;;;;;;;31956:29;;;;;;;;;32017:35;;;:29;:35;;;;;;31896:31;;;;;31956:29;;;;32017:35;32016:36;:87;;;;-1:-1:-1;;;;;;32070:33:0;;;;;;:29;:33;;;;;;;;32069:34;32016:87;31998:1087;;;32138:16;;-1:-1:-1;;;32138:16:0;;;;32130:59;;;;-1:-1:-1;;;32130:59:0;;15014:2:1;32130:59:0;;;14996:21:1;15053:2;15033:18;;;15026:30;15092:32;15072:18;;;15065:60;15142:18;;32130:59:0;14812:354:1;32130:59:0;-1:-1:-1;;;;;32227:38:0;;;;;;:34;:38;;;;;;;;32226:39;:101;;;;-1:-1:-1;;;;;;32287:40:0;;;;;;:34;:40;;;;;;;;32286:41;32226:101;32204:611;;;32366:11;32362:212;;;32446:15;;32436:6;:25;;32402:152;;;;-1:-1:-1;;;32402:152:0;;15373:2:1;32402:152:0;;;15355:21:1;15412:2;15392:18;;;15385:30;15451:34;15431:18;;;15424:62;-1:-1:-1;;;15502:18:1;;;15495:39;15551:19;;32402:152:0;15171:405:1;32402:152:0;32598:10;32594:206;;;32677:11;;32667:6;:21;;32633:147;;;;-1:-1:-1;;;32633:147:0;;15783:2:1;32633:147:0;;;15765:21:1;15822:2;15802:18;;;15795:30;15861:34;15841:18;;;15834:62;-1:-1:-1;;;15912:18:1;;;15905:38;15960:19;;32633:147:0;15581:404:1;32633:147:0;-1:-1:-1;;;;;32836:33:0;;;;;;:29;:33;;;;;;;;32831:243;;32948:15;;32937:6;32921:13;32931:2;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;32921:13;:22;;;;:::i;:::-;32920:43;;32890:168;;;;-1:-1:-1;;;32890:168:0;;16192:2:1;32890:168:0;;;16174:21:1;16231:2;16211:18;;;16204:30;16270:34;16250:18;;;16243:62;-1:-1:-1;;;16321:18:1;;;16314:49;16380:19;;32890:168:0;15990:415:1;32890:168:0;33097:37;33110:11;33123:10;33097:12;:37::i;:::-;33188:23;;33178:4;33145:12;8386:18;;;:9;:18;;;;;;33242:16;;-1:-1:-1;;33160:51:0;;-1:-1:-1;;;33242:16:0;;;;:40;;;;;33275:7;33242:40;:67;;;;-1:-1:-1;33300:9:0;;;;33299:10;33242:67;:97;;;;-1:-1:-1;33326:9:0;;-1:-1:-1;;;33326:9:0;;;;:13;;33242:97;:143;;;;-1:-1:-1;;;;;;33356:29:0;;;;;;:25;:29;;;;;;;;33242:143;:185;;;;-1:-1:-1;;;;;;33403:24:0;;;;;;:18;:24;;;;;;;;33402:25;33242:185;:225;;;;-1:-1:-1;;;;;;33445:22:0;;;;;;:18;:22;;;;;;;;33444:23;33242:225;33224:362;;;33494:9;:16;;-1:-1:-1;;33494:16:0;33506:4;33494:16;;;33525:17;:15;:17::i;:::-;33557:9;:17;;-1:-1:-1;;33557:17:0;;;33224:362;33614:9;;33598:12;;33614:9;;33613:10;:30;;;;-1:-1:-1;33627:16:0;;-1:-1:-1;;;33627:16:0;;;;33613:30;-1:-1:-1;;;;;33660:24:0;;;;;;:18;:24;;;;;;33598:45;;-1:-1:-1;33660:24:0;;;:50;;-1:-1:-1;;;;;;33688:22:0;;;;;;:18;:22;;;;;;;;33660:50;33656:98;;;-1:-1:-1;33737:5:0;33656:98;33768:7;:24;;;;-1:-1:-1;33779:9:0;;-1:-1:-1;;;33779:9:0;;;;:13;;33768:24;33764:414;;;33833:9;;33809:11;;33846:3;;33824:18;;-1:-1:-1;;;33833:9:0;;;;33824:6;:18;:::i;:::-;33823:26;;;;:::i;:::-;33895:8;;33809:40;;-1:-1:-1;33864:18:0;;33907:3;;33886:17;;33895:8;;;;;33886:6;:17;:::i;:::-;33885:25;;;;:::i;:::-;33864:46;-1:-1:-1;33934:12:0;33943:3;33934:6;:12;:::i;:::-;33925:21;;33961:41;33977:4;33991;33998:3;33961:15;:41::i;:::-;34023:14;;34019:148;;34058:38;34078:4;34085:10;34058:11;:38::i;:::-;34130:8;;34120:31;;;34130:8;;;;;;16710:36:1;;16777:2;16762:18;;16755:34;;;34120:31:0;;16683:18:1;34120:31:0;;;;;;;34019:148;33794:384;;33764:414;34188:33;34204:4;34210:2;34214:6;34188:15;:33::i;:::-;34238:13;;-1:-1:-1;;;;;34238:13:0;:24;34271:4;34278:15;34271:4;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;34278:15;34238:56;;-1:-1:-1;;;;;;34238:56:0;;;;;;;-1:-1:-1;;;;;17008:32:1;;;34238:56:0;;;16990:51:1;17057:18;;;17050:34;16963:18;;34238:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34234:72;34320:13;;-1:-1:-1;;;;;34320:13:0;:24;34353:2;34358:13;34353:2;-1:-1:-1;;;;;8386:18:0;8354:7;8386:18;;;:9;:18;;;;;;;8235:177;34358:13;34320:52;;-1:-1:-1;;;;;;34320:52:0;;;;;;;-1:-1:-1;;;;;17008:32:1;;;34320:52:0;;;16990:51:1;17057:18;;;17050:34;16963:18;;34320:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34316:68;31605:2786;;;;31492:2899;;;:::o;3517:226::-;3637:7;3673:12;3665:6;;;;3657:29;;;;-1:-1:-1;;;3657:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3697:9:0;3709:5;3713:1;3709;:5;:::i;:::-;3697:17;3517:226;-1:-1:-1;;;;;3517:226:0:o;11245:451::-;-1:-1:-1;;;;;11329:21:0;;11321:67;;;;-1:-1:-1;;;11321:67:0;;17297:2:1;11321:67:0;;;17279:21:1;17336:2;17316:18;;;17309:30;17375:34;17355:18;;;17348:62;-1:-1:-1;;;17426:18:1;;;17419:31;17467:19;;11321:67:0;17095:397:1;11321:67:0;11480:105;11517:6;11480:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11480:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11459:18:0;;;;;;:9;:18;;;;;:126;11611:12;;:24;;11628:6;11611:16;:24::i;:::-;11596:12;:39;11651:37;;2290:25:1;;;11677:1:0;;-1:-1:-1;;;;;11651:37:0;;;;;2278:2:1;2263:18;11651:37:0;;;;;;;11245:451;;:::o;35577:1538::-;35815:22;;;;:45;;;;:22;;;;;:45;35811:329;;35882:187;;-1:-1:-1;;;17699:33:1;;17757:2;17748:12;35882:187:0;;;;;;;;35960:22;;;;36040:14;;35882:187;;35960:22;;;;;;;;35882:187;;;;-1:-1:-1;;;;;;;;;;;35882:187:0;;;36040:14;;;35882:187;:::i;:::-;;;;;;;;36084:22;;;:44;;-1:-1:-1;;36084:44:0;;;;;;;;;35811:329;36154:22;;;;:45;;;;:22;;;;;:45;36150:329;;36221:187;;-1:-1:-1;;;18187:33:1;;18245:2;18236:12;36221:187:0;;;;;;;;36299:22;;;;36379:14;;36221:187;;36299:22;;;;;;;;36221:187;;;;-1:-1:-1;;;;;;;;;;;36221:187:0;;;36379:14;;;36221:187;:::i;:::-;;;;;;;;36423:22;;;:44;;-1:-1:-1;;36423:44:0;;;;;;;;;36150:329;36493:17;;;;:35;;;;-1:-1:-1;;;36493:17:0;;;;:35;36489:294;;36550:172;;-1:-1:-1;;;18461:28:1;;18514:2;18505:12;36550:172:0;;;;;;;;36623:17;;;;36693:14;;36550:172;;36623:17;-1:-1:-1;;;36623:17:0;;;;;;36550:172;;;;-1:-1:-1;;;;;;;;;;;36550:172:0;;;36693:14;;;36550:172;:::i;:::-;;;;;;;;36737:17;;;:34;;-1:-1:-1;;36737:34:0;-1:-1:-1;;;36737:34:0;;;;;;;36489:294;36797:20;;;;:41;;;;-1:-1:-1;;;36797:20:0;;;;:41;36793:315;;36860:181;;-1:-1:-1;;;18730:31:1;;18786:2;18777:12;36860:181:0;;;;;;;;36936:20;;;;37012:14;;36860:181;;36936:20;-1:-1:-1;;;36936:20:0;;;;;;36860:181;;;;-1:-1:-1;;;;;;;;;;;36860:181:0;;;37012:14;;;36860:181;:::i;:::-;;;;;;;;37056:20;;;:40;;;;;-1:-1:-1;;;37056:40:0;-1:-1:-1;;37056:40:0;;;;;;35577:1538;;;;;:::o;37123:1505::-;37356:21;;;;:43;;;;:21;;:43;37352:322;;37421:184;;-1:-1:-1;;;19002:32:1;;19059:2;19050:12;37421:184:0;;;;;;;;37498:21;;;;37576:14;;37421:184;;37498:21;;;;;37421:184;;;;-1:-1:-1;;;;;;;;;;;37421:184:0;;;37576:14;;;37421:184;:::i;:::-;;;;;;;;37620:21;;;:42;;-1:-1:-1;;37620:42:0;;;;;;;37352:322;37688:21;;;;:43;;;;:21;;;;;:43;37684:322;;37753:184;;-1:-1:-1;;;19275:32:1;;19332:2;19323:12;37753:184:0;;;;;;;;37830:21;;;;37908:14;;37753:184;;37830:21;;;;;;;;37753:184;;;;-1:-1:-1;;;;;;;;;;;37753:184:0;;;37908:14;;;37753:184;:::i;:::-;;;;;;;;37952:21;;;:42;;-1:-1:-1;;37952:42:0;;;;;;;;;37684:322;38020:16;;;;:33;;;;-1:-1:-1;;;38020:16:0;;;;:33;38016:287;;38075:169;;-1:-1:-1;;;19548:27:1;;19600:2;19591:12;38075:169:0;;;;;;;;38147:16;;;;38215:14;;38075:169;;38147:16;-1:-1:-1;;;38147:16:0;;;;;;38075:169;;;;-1:-1:-1;;;;;;;;;;;38075:169:0;;;38215:14;;;38075:169;:::i;:::-;;;;;;;;38259:16;;;:32;;-1:-1:-1;;38259:32:0;-1:-1:-1;;;38259:32:0;;;;;;;38016:287;38317:19;;;;:39;;;;-1:-1:-1;;;38317:19:0;;;;:39;38313:308;;38378:178;;-1:-1:-1;;;19816:30:1;;19871:2;19862:12;38378:178:0;;;;;;;;38453:19;;;;38527:14;;38378:178;;38453:19;-1:-1:-1;;;38453:19:0;;;;;;38378:178;;;;-1:-1:-1;;;;;;;;;;;38378:178:0;;;38527:14;;;38378:178;:::i;:::-;;;;;;;;38571:19;;;:38;;;;;-1:-1:-1;;;38571:38:0;-1:-1:-1;;38571:38:0;;;;;;37123:1505;;;;;:::o;10249:606::-;-1:-1:-1;;;;;10389:20:0;;10381:70;;;;-1:-1:-1;;;10381:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10470:23:0;;10462:71;;;;-1:-1:-1;;;10462:71:0;;;;;;;:::i;:::-;10622:108;10658:6;10622:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10622:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;10602:17:0;;;;;;;:9;:17;;;;;;:128;;;;10764:20;;;;;;;:32;;10789:6;10764:24;:32::i;:::-;-1:-1:-1;;;;;10741:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10812:35;;;;;;;;;;10840:6;2290:25:1;;2278:2;2263:18;;2144:177;34399:1170:0;34475:13;:17;;-1:-1:-1;;34554:15:0;;;34582:231;;;;34630:23;;34614:13;:39;;34630:23;;;;-1:-1:-1;;34668:39:0;;;;;;;34630:23;34684;;;;;;34668:39;;;;;;;;-1:-1:-1;;34766:35:0;-1:-1:-1;;;34733:18:0;;;;34722:29;;;;-1:-1:-1;;34766:35:0;;-1:-1:-1;;;34780:21:0;;;;34766:35;;;;;;;;34582:231;34827:10;34823:234;;;34870:24;;34854:13;:40;;34870:24;;;;;;;;-1:-1:-1;;34909:40:0;;;;;;;34925:24;;;;;;34909:40;;;;;-1:-1:-1;;35009:36:0;-1:-1:-1;;;34975:19:0;;;;34964:30;;-1:-1:-1;;35009:36:0;;-1:-1:-1;;;35023:22:0;;;;;;;35009:36;;;;;;;34823:234;35072:10;35071:11;:27;;;;;35087:11;35086:12;35071:27;35067:251;;;35131:24;;35115:13;:40;;35131:24;;;;;;;;-1:-1:-1;;35170:40:0;;;;;;;35186:24;;;;;;35170:40;;;;;-1:-1:-1;;35270:36:0;-1:-1:-1;;;35236:19:0;;;;35225:30;;-1:-1:-1;;35270:36:0;;-1:-1:-1;;;35284:22:0;;;;;;;35270:36;;;;;;;35067:251;35383:11;;;;;;;;;35372:8;;;;;;35340:29;;35383:11;35356:13;;;;;35340;:29;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;35328:9;:66;;-1:-1:-1;;35328:66:0;;-1:-1:-1;;;35328:66:0;;;;;;;;;;;;;35410:151;;;35436:13;;;;;;;;;;20124:36:1;;35328:66:0;35464:13;;;;20191:2:1;20176:18;;20169:45;35492:8:0;;;;;20230:18:1;;;20223:45;;;;35515:11:0;;;;;20299:2:1;20284:18;;20277:45;35541:9:0;;;;;;20353:3:1;20338:19;;20331:46;35410:151:0;;20111:3:1;20096:19;35410:151:0;19885:498:1;38636:1706:0;38726:4;38682:23;8386:18;;;:9;:18;;;;;;38880:9;;38682:50;;-1:-1:-1;38771:21:0;;38743:25;;38905:1;;38880:9;-1:-1:-1;;;38880:9:0;;;;;38832:31;;38850:13;38682:50;38832:31;:::i;:::-;38831:58;;;;:::i;:::-;:75;;;;:::i;:::-;38978:9;;38805:101;;-1:-1:-1;38917:24:0;;38978:9;-1:-1:-1;;;38978:9:0;;;;;38945:29;;38963:11;;;;;38945:15;:29;:::i;:::-;38944:43;;;;:::i;:::-;38917:70;-1:-1:-1;38998:20:0;39053:34;38917:70;39053:15;:34;:::i;:::-;39021:67;;:15;:67;:::i;:::-;38998:90;;39101:31;39119:12;39101:17;:31::i;:::-;39145:27;39175:41;39199:17;39175:21;:41;:::i;:::-;39308:11;;39145:71;;-1:-1:-1;39227:19:0;;39308:11;;;;;;;39297:8;;;;;;39276:17;;39297:8;;39276:13;:17;:::i;:::-;39275:30;;;;:::i;:::-;:44;;;;:::i;:::-;39249:9;;:71;;;-1:-1:-1;;;39249:9:0;;;;:71;:::i;:::-;39383:13;;39227:93;;;;;-1:-1:-1;39331:26:0;;39440:1;;39227:93;;39361:35;;39383:13;39361:19;:35;:::i;:::-;39360:64;;;;:::i;:::-;:81;;;;:::i;:::-;39331:110;-1:-1:-1;39452:25:0;39480:42;39331:110;39480:19;:42;:::i;:::-;39541:15;;39533:52;;39452:70;;-1:-1:-1;;;;;;39541:15:0;;39533:52;;;;;39452:70;;39541:15;39533:52;39541:15;39533:52;39452:70;39541:15;39533:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39600:19:0;;39596:441;;39664:10;39640:21;:34;39636:390;;;39695:53;;-1:-1:-1;;;39695:53:0;;20960:2:1;39695:53:0;;;20942:21:1;20999:2;20979:18;;;20972:30;21038:34;21018:18;;;21011:62;-1:-1:-1;;;21089:18:1;;;21082:41;21140:19;;39695:53:0;20758:407:1;39636:390:0;39789:50;39803:15;39820:18;39789:13;:50::i;:::-;39863:147;;;21372:25:1;;;21428:2;21413:18;;21406:34;;;21456:18;;;21449:34;;;39863:147:0;;21360:2:1;21345:18;39863:147:0;;;;;;;39636:390;40115:13;;40062:109;;-1:-1:-1;;;40062:109:0;;-1:-1:-1;;;;;40115:13:0;;;40062:109;;;16990:51:1;17057:18;;;17050:34;;;40047:12:0;;40077:4;;40062:30;;16963:18:1;;40062:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40047:124;;40186:7;40182:153;;;40210:13;;:62;;-1:-1:-1;;;40210:62:0;;;;;2290:25:1;;;-1:-1:-1;;;;;40210:13:0;;;;:44;;2263:18:1;;40210:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40292:31;40306:16;40292:31;;;;2290:25:1;;2278:2;2263:18;;2144:177;40292:31:0;;;;;;;;40182:153;38671:1671;;;;;;;;;;38636:1706::o;3373:136::-;3431:7;3458:43;3462:1;3465;3458:43;;;;;;;;;;;;;;;;;:3;:43::i;40350:472::-;40441:16;;;40455:1;40441:16;;;;;;;;40417:21;;40441:16;;;;;;;;;;-1:-1:-1;40441:16:0;40417:40;;40486:4;40468;40473:1;40468:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40468:23:0;;;:7;;;;;;;;;;:23;;;;40512:15;;:22;;;-1:-1:-1;;;40512:22:0;;;;:15;;;;;:20;;:22;;;;;40468:7;;40512:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40502:4;40507:1;40502:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40502:32:0;;;:7;;;;;;;;;:32;40577:15;;40545:62;;40562:4;;40577:15;40595:11;40545:8;:62::i;:::-;40618:15;;:196;;-1:-1:-1;;;40618:196:0;;-1:-1:-1;;;;;40618:15:0;;;;:66;;:196;;40699:11;;40618:15;;40741:4;;40768;;40788:15;;40618:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40406:416;40350:472;:::o;29734:423::-;29848:15;;29816:62;;29833:4;;-1:-1:-1;;;;;29848:15:0;29866:11;29816:8;:62::i;:::-;29889:15;;30093;;29889:260;;-1:-1:-1;;;29889:260:0;;29961:4;29889:260;;;23619:34:1;23669:18;;;23662:34;;;29889:15:0;23712:18:1;;;23705:34;;;23755:18;;;23748:34;-1:-1:-1;;;;;30093:15:0;;;23798:19:1;;;23791:44;30123:15:0;23851:19:1;;;23844:35;29889:15:0;;;:31;;29928:9;;23553:19:1;;29889:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;630:597:1:-;742:4;771:2;800;789:9;782:21;832:6;826:13;875:6;870:2;859:9;855:18;848:34;900:1;910:140;924:6;921:1;918:13;910:140;;;1019:14;;;1015:23;;1009:30;985:17;;;1004:2;981:26;974:66;939:10;;910:140;;;1068:6;1065:1;1062:13;1059:91;;;1138:1;1133:2;1124:6;1113:9;1109:22;1105:31;1098:42;1059:91;-1:-1:-1;1211:2:1;1190:15;-1:-1:-1;;1186:29:1;1171:45;;;;1218:2;1167:54;;630:597;-1:-1:-1;;;630:597:1:o;1232:131::-;-1:-1:-1;;;;;1307:31:1;;1297:42;;1287:70;;1353:1;1350;1343:12;1368:315;1436:6;1444;1497:2;1485:9;1476:7;1472:23;1468:32;1465:52;;;1513:1;1510;1503:12;1465:52;1552:9;1539:23;1571:31;1596:5;1571:31;:::i;:::-;1621:5;1673:2;1658:18;;;;1645:32;;-1:-1:-1;;;1368:315:1:o;2326:180::-;2385:6;2438:2;2426:9;2417:7;2413:23;2409:32;2406:52;;;2454:1;2451;2444:12;2406:52;-1:-1:-1;2477:23:1;;2326:180;-1:-1:-1;2326:180:1:o;2511:456::-;2588:6;2596;2604;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;:::-;2781:5;-1:-1:-1;2838:2:1;2823:18;;2810:32;2851:33;2810:32;2851:33;:::i;:::-;2511:456;;2903:7;;-1:-1:-1;;;2957:2:1;2942:18;;;;2929:32;;2511:456::o;3161:247::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;3328:9;3315:23;3347:31;3372:5;3347:31;:::i;3621:156::-;3687:20;;3747:4;3736:16;;3726:27;;3716:55;;3767:1;3764;3757:12;3716:55;3621:156;;;:::o;3782:393::-;3860:6;3868;3876;3884;3937:3;3925:9;3916:7;3912:23;3908:33;3905:53;;;3954:1;3951;3944:12;3905:53;3977:27;3994:9;3977:27;:::i;:::-;3967:37;;4023:36;4055:2;4044:9;4040:18;4023:36;:::i;:::-;4013:46;;4078:36;4110:2;4099:9;4095:18;4078:36;:::i;:::-;4068:46;;4133:36;4165:2;4154:9;4150:18;4133:36;:::i;:::-;4123:46;;3782:393;;;;;;;:::o;4180:118::-;4266:5;4259:13;4252:21;4245:5;4242:32;4232:60;;4288:1;4285;4278:12;4303:382;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:30;4582:32;4623:30;:::i;:::-;4672:7;4662:17;;;4303:382;;;;;:::o;4690:388::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:31;4918:5;4893:31;:::i;:::-;4943:5;-1:-1:-1;5000:2:1;4985:18;;4972:32;5013:33;4972:32;5013:33;:::i;5083:380::-;5162:1;5158:12;;;;5205;;;5226:61;;5280:4;5272:6;5268:17;5258:27;;5226:61;5333:2;5325:6;5322:14;5302:18;5299:38;5296:161;;5379:10;5374:3;5370:20;5367:1;5360:31;5414:4;5411:1;5404:15;5442:4;5439:1;5432:15;5296:161;;5083:380;;;:::o;5468:356::-;5670:2;5652:21;;;5689:18;;;5682:30;5748:34;5743:2;5728:18;;5721:62;5815:2;5800:18;;5468:356::o;5829:127::-;5890:10;5885:3;5881:20;5878:1;5871:31;5921:4;5918:1;5911:15;5945:4;5942:1;5935:15;5961:168;6001:7;6067:1;6063;6059:6;6055:14;6052:1;6049:21;6044:1;6037:9;6030:17;6026:45;6023:71;;;6074:18;;:::i;:::-;-1:-1:-1;6114:9:1;;5961:168::o;6134:127::-;6195:10;6190:3;6186:20;6183:1;6176:31;6226:4;6223:1;6216:15;6250:4;6247:1;6240:15;6266:120;6306:1;6332;6322:35;;6337:18;;:::i;:::-;-1:-1:-1;6371:9:1;;6266:120::o;7517:245::-;7584:6;7637:2;7625:9;7616:7;7612:23;7608:32;7605:52;;;7653:1;7650;7643:12;7605:52;7685:9;7679:16;7704:28;7726:5;7704:28;:::i;7767:204::-;7805:3;7841:4;7838:1;7834:12;7873:4;7870:1;7866:12;7908:3;7902:4;7898:14;7893:3;7890:23;7887:49;;;7916:18;;:::i;:::-;7952:13;;7767:204;-1:-1:-1;;;7767:204:1:o;8598:184::-;8668:6;8721:2;8709:9;8700:7;8696:23;8692:32;8689:52;;;8737:1;8734;8727:12;8689:52;-1:-1:-1;8760:16:1;;8598:184;-1:-1:-1;8598:184:1:o;9404:406::-;9606:2;9588:21;;;9645:2;9625:18;;;9618:30;9684:34;9679:2;9664:18;;9657:62;-1:-1:-1;;;9750:2:1;9735:18;;9728:40;9800:3;9785:19;;9404:406::o;12705:128::-;12745:3;12776:1;12772:6;12769:1;12766:13;12763:39;;;12782:18;;:::i;:::-;-1:-1:-1;12818:9:1;;12705:128::o;14002:401::-;14204:2;14186:21;;;14243:2;14223:18;;;14216:30;14282:34;14277:2;14262:18;;14255:62;-1:-1:-1;;;14348:2:1;14333:18;;14326:35;14393:3;14378:19;;14002:401::o;14408:399::-;14610:2;14592:21;;;14649:2;14629:18;;;14622:30;14688:34;14683:2;14668:18;;14661:62;-1:-1:-1;;;14754:2:1;14739:18;;14732:33;14797:3;14782:19;;14408:399::o;16410:125::-;16450:4;16478:1;16475;16472:8;16469:34;;;16483:18;;:::i;:::-;-1:-1:-1;16520:9:1;;16410:125::o;17771:209::-;-1:-1:-1;;17935:38:1;;;;17917:57;;17905:2;17890:18;;17771:209::o;20388:165::-;20426:1;20460:4;20457:1;20453:12;20484:3;20474:37;;20491:18;;:::i;:::-;20543:3;20536:4;20533:1;20529:12;20525:22;20520:27;;;20388:165;;;;:::o;20558:195::-;20596:4;20633;20630:1;20626:12;20665:4;20662:1;20658:12;20690:3;20685;20682:12;20679:38;;;20697:18;;:::i;:::-;20734:13;;;20558:195;-1:-1:-1;;;20558:195:1:o;21905:127::-;21966:10;21961:3;21957:20;21954:1;21947:31;21997:4;21994:1;21987:15;22021:4;22018:1;22011:15;22037:251;22107:6;22160:2;22148:9;22139:7;22135:23;22131:32;22128:52;;;22176:1;22173;22166:12;22128:52;22208:9;22202:16;22227:31;22252:5;22227:31;:::i;22293:980::-;22555:4;22603:3;22592:9;22588:19;22634:6;22623:9;22616:25;22660:2;22698:6;22693:2;22682:9;22678:18;22671:34;22741:3;22736:2;22725:9;22721:18;22714:31;22765:6;22800;22794:13;22831:6;22823;22816:22;22869:3;22858:9;22854:19;22847:26;;22908:2;22900:6;22896:15;22882:29;;22929:1;22939:195;22953:6;22950:1;22947:13;22939:195;;;23018:13;;-1:-1:-1;;;;;23014:39:1;23002:52;;23109:15;;;;23074:12;;;;23050:1;22968:9;22939:195;;;-1:-1:-1;;;;;;;23190:32:1;;;;23185:2;23170:18;;23163:60;-1:-1:-1;;;23254:3:1;23239:19;23232:35;23151:3;22293:980;-1:-1:-1;;;22293:980:1:o;23890:306::-;23978:6;23986;23994;24047:2;24035:9;24026:7;24022:23;24018:32;24015:52;;;24063:1;24060;24053:12;24015:52;24092:9;24086:16;24076:26;;24142:2;24131:9;24127:18;24121:25;24111:35;;24186:2;24175:9;24171:18;24165:25;24155:35;;23890:306;;;;;:::o
Swarm Source
ipfs://6074b7f93e5aeaf0b19f2293d6399c59724b980b30fa67f5b5fb0de209d78a20
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 28 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,638.95 | 0.001 | $2.64 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.