Token MYCROPETS
Overview CRC20
Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
1,000,000,000 MCP
Holders:
15 addresses
Contract:
Decimals:
4
Balance
5,206,591.3729 MCPValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MYCROPETS
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-03-28 */ /* http://www.mycropets.com/ https://t.me/Mycropets */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } library 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 Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) external virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract MYCROPETS is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable public marketingAddress = payable(0xB277e9f8eDEB880576C144bFe732b4c5d23d64B0); // Marketing Address address payable public buybackAddress = payable(0xB277e9f8eDEB880576C144bFe732b4c5d23d64B0); // BuyBack Address address payable public liquidityAddress = payable(0xB277e9f8eDEB880576C144bFe732b4c5d23d64B0); // Liquidity Address address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; // dead address mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000 * 1e6 * 1e4; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "MYCROPETS"; string private constant _symbol = "MCP"; uint8 private constant _decimals = 4; uint256 private constant BUY = 1; uint256 private constant SELL = 2; uint256 private constant TRANSFER = 3; uint256 private buyOrSellSwitch; // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract. uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; // seeded with launch values, will be updated to 5, 3, 2, 1 final for both buys and sells uint256 public _buyTaxFee = 1; uint256 public _buyLiquidityFee = 4; uint256 public _buyMarketingFee = 6; uint256 public _buyBuybackFee = 4; uint256 public _sellTaxFee = 2; uint256 public _sellLiquidityFee = 5; uint256 public _sellMarketingFee = 8; uint256 public _sellBuybackFee = 5; uint256 public tradingActiveBlock = 0; // 0 means trading is not active mapping(address => bool) public boughtEarly; uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty uint256 private _liquidityTokensToSwap; uint256 private _marketingTokensToSwap; uint256 private _buyBackTokensToSwap; bool private gasLimitActive = true; uint256 private gasPriceLimit = 500 * 1 gwei; uint256 private gasMaxLimit = 1000000 * 1 gwei; // gasLeft limit // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; uint256 private minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05% IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; bool public tradingActive = false; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event SwapETHForTokens(uint256 amountIn, address[] path); event SwapTokensForETH(uint256 amountIn, address[] path); event SetAutomatedMarketMakerPair(address pair, bool value); event ExcludeFromReward(address excludedAddress); event IncludeInReward(address includedAddress); event ExcludeFromFee(address excludedAddress); event IncludeInFee(address includedAddress); event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee); event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee); event TransferForeignToken(address token, uint256 amount); event UpdatedMarketingAddress(address marketing); event UpdatedLiquidityAddress(address liquidity); event UpdatedBuyBackAddress(address buyback); event OwnerForcedSwapBack(uint256 timestamp); event BoughtEarly(address indexed sniper); event RemovedSniper(address indexed notsnipersupposedly); event UpdatedRouter(address indexed newrouter); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x145677FC4d9b8F19B5D56d1820c48e0443049a30 // mainnet router // 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 // testnet router ); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[liquidityAddress] = true; _isExcludedFromFee[buybackAddress] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external 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) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapAndLiquifyEnabled = true; tradingActiveBlock = block.number; earlyBuyPenaltyEnd = block.timestamp + 72 hours; } function minimumTokensBeforeSwapAmount() external view returns (uint256) { return minimumTokensBeforeSwap; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; if(value){excludeFromReward(pair);} if(!value){includeInReward(pair);} } function setProtectionSettings(bool antiGas) external onlyOwner() { gasLimitActive = antiGas; } function setGasPriceLimit(uint256 gas) external onlyOwner { require(gas >= 75); gasPriceLimit = gas * 1 gwei; } function setGasMaxLimit(uint256 gas) external onlyOwner { require(gas >= 750000); gasMaxLimit = gas * gasPriceLimit; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts. Include a previously excluded address."); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) public onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(!tradingActive){ require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet."); } if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock){ boughtEarly[to] = true; } // only use to prevent sniper buys in the first blocks. if (gasLimitActive && automatedMarketMakerPairs[from]) { require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit."); if(!inSwapAndLiquify && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) { require(gasleft() <= gasMaxLimit); } } uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _buyBackTokensToSwap; uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; // swap and liquify if ( !inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniswapV2Pair) > 0 && totalTokensToSwap > 0 && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && automatedMarketMakerPairs[to] && overMinimumTokenBalance ) { swapBack(); } bool takeFee = true; // If any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; buyOrSellSwitch = TRANSFER; } else { // Buy if (automatedMarketMakerPairs[from] ) { removeAllFee(); _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyBuybackFee; if(_liquidityFee > 0){ buyOrSellSwitch = BUY; } } // Sell else if (automatedMarketMakerPairs[to]) { removeAllFee(); _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellBuybackFee; if(_liquidityFee > 0){ buyOrSellSwitch = SELL; } // triple tax if bought in the same block as trading active for 72 hours if(boughtEarly[from] && earlyBuyPenaltyEnd <= block.number){ _taxFee = _taxFee * 3; _liquidityFee = _liquidityFee * 3; } // Normal transfers do not get taxed } else { removeAllFee(); buyOrSellSwitch = TRANSFER; } } _tokenTransfer(from, to, amount, takeFee); } function swapBack() private lockTheSwap { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_buyBackTokensToSwap).add(_marketingTokensToSwap); // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2); uint256 amountToSwapForBNB = contractBalance.sub(tokensForLiquidity); uint256 initialBNBBalance = address(this).balance; swapTokensForBNB(amountToSwapForBNB); uint256 bnbBalance = address(this).balance.sub(initialBNBBalance); uint256 bnbForMarketing = bnbBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap); uint256 bnbForBuyBack = bnbBalance.mul(_buyBackTokensToSwap).div(totalTokensToSwap); uint256 bnbForLiquidity = bnbBalance.sub(bnbForMarketing).sub(bnbForBuyBack); uint256 bnbForDev = bnbForMarketing * 30 / 100; bnbForMarketing -= bnbForDev; _liquidityTokensToSwap = 0; _marketingTokensToSwap = 0; _buyBackTokensToSwap = 0; (bool success,) = address(buybackAddress).call{value: bnbForBuyBack}(""); (success,) = address(marketingAddress).call{value: bnbForMarketing}(""); (success,) = address(0xB277e9f8eDEB880576C144bFe732b4c5d23d64B0).call{value: bnbForDev}(""); if(tokensForLiquidity > 0 && bnbForLiquidity > 0){ addLiquidity(tokensForLiquidity, bnbForLiquidity); emit SwapAndLiquify(amountToSwapForBNB, bnbForLiquidity, tokensForLiquidity); } // any remnants after adding liquidity send to Marketing wallet (success,) = address(marketingAddress).call{value: address(this).balance}(""); } function swapTokensForBNB(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function 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 liquidityAddress, block.timestamp ); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { if(buyOrSellSwitch == BUY){ _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee; _buyBackTokensToSwap += tLiquidity * _buyBuybackFee / _liquidityFee; _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee; } else if(buyOrSellSwitch == SELL){ _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee; _buyBackTokensToSwap += tLiquidity * _sellBuybackFee / _liquidityFee; _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee; } uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit IncludeInFee(account); } function removeBoughtEarly(address account) external onlyOwner { boughtEarly[account] = false; emit RemovedSniper(account); } function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee, uint256 buyBuybackFee) external onlyOwner { _buyTaxFee = buyTaxFee; _buyLiquidityFee = buyLiquidityFee; _buyMarketingFee = buyMarketingFee; _buyBuybackFee = buyBuybackFee; require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee + _buyBuybackFee <= 100, "Must keep taxes below 50%"); emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee, buyBuybackFee); } function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee, uint256 sellBuybackFee) external onlyOwner { _sellTaxFee = sellTaxFee; _sellLiquidityFee = sellLiquidityFee; _sellMarketingFee = sellMarketingFee; _sellBuybackFee = sellBuybackFee; require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee + _sellBuybackFee <= 100, "Must keep taxes below 50%"); emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee, sellBuybackFee); } function setMarketingAddress(address _marketingAddress) external onlyOwner { require(_marketingAddress != address(0), "_marketingAddress address cannot be 0"); marketingAddress = payable(_marketingAddress); _isExcludedFromFee[marketingAddress] = true; emit UpdatedMarketingAddress(_marketingAddress); } function setBuyBackAddress(address _buybackAddress) external onlyOwner { require(_buybackAddress != address(0), "_buybackAddress address cannot be 0"); buybackAddress = payable(_buybackAddress); _isExcludedFromFee[buybackAddress] = true; emit UpdatedBuyBackAddress(_buybackAddress); } function setLiquidityAddress(address _liquidityAddress) external onlyOwner { require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0"); liquidityAddress = payable(_liquidityAddress); _isExcludedFromFee[liquidityAddress] = true; emit UpdatedLiquidityAddress(_liquidityAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function getPairAddress() external view onlyOwner returns (address) { return uniswapV2Pair; } function changeRouterVersion(address _router) external onlyOwner returns (address _pair) { require(_router != address(0), "_router address cannot be 0"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router); _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair( address(this), _uniswapV2Router.WETH() ); if (_pair == address(0)) { // Pair doesn't exist _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); } uniswapV2Pair = _pair; // Set the router of the contract variables uniswapV2Router = _uniswapV2Router; emit UpdatedRouter(_router); } // To receive ETH from uniswapV2Router when swapping receive() external payable {} function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require(_token != address(this), "Can't withdraw native tokens"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"SetSellFee","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdatedBuyBackAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"_buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"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":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackAddress","type":"address"}],"name":"setBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyBuybackFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellBuybackFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526003805473b277e9f8edeb880576c144bfe732b4c5d23d64b06001600160a01b031991821681179092556004805482168317905560058054909116909117905561dead6080526200005e6509184e72a00060001962000c33565b6200006c9060001962000c60565b600c55600f54601055601154601255600160138190556004601481905560066015556016556002601755600560188190556008601955601a8190556000601b556021805460ff191690921790915564746a52880060225566038d7ea4c6800060235561271090620000e5906509184e72a0009062000c7a565b620000f1919062000c9c565b6025556027805461ffff60a81b191690553480156200010f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5433600090815260066020908152604080832093909355825163c45a015560e01b8152925173145677fc4d9b8f19b5d56d1820c48e0443049a3093849263c45a015592600480840193829003018186803b158015620001b157600080fd5b505afa158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec919062000cb3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023557600080fd5b505afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000cb3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002b957600080fd5b505af1158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062000cb3565b602680546001600160a01b038086166001600160a01b03199283161790925560278054928416929091169190911790559050620003338160016200042b565b6001600960006200034c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600354821684528284208054861682179055600554821684528284208054861682179055600454909116835291208054909216179055620003cf3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6509184e72a0006040516200041b91815260200190565b60405180910390a3505062000d9b565b6001600160a01b0382166000908152602460205260409020805460ff191682158015919091179091556200046457620004648262000479565b806200047557620004758262000695565b5050565b6000546001600160a01b03163314620004c85760405162461bcd60e51b8152602060048201819052602482015260008051602062004a8e83398151915260448201526064015b60405180910390fd5b6001600160a01b0381166000908152600a602052604090205460ff1615620005335760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620004bf565b600b546032906200054690600162000cde565b1115620005d25760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620004bf565b6001600160a01b038116600090815260066020526040902054156200062f576001600160a01b03811660009081526006602052604090205462000615906200087e565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314620006e05760405162461bcd60e51b8152602060048201819052602482015260008051602062004a8e8339815191526044820152606401620004bf565b6001600160a01b0381166000908152600a602052604090205460ff166200074a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401620004bf565b60005b600b548110156200047557816001600160a01b0316600b828154811062000778576200077862000cf9565b6000918252602090912001546001600160a01b031614156200086957600b8054620007a69060019062000c60565b81548110620007b957620007b962000cf9565b600091825260209091200154600b80546001600160a01b039092169183908110620007e857620007e862000cf9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548062000843576200084362000d0f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80620008758162000d25565b9150506200074d565b6000600c54821115620008e75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620004bf565b6000620008f362000916565b90506200090f81846200094960201b620021e61790919060201c565b9392505050565b600080806200092462000993565b915091506200094281836200094960201b620021e61790919060201c565b9250505090565b60006200090f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b6160201b60201c565b600c5460009081906509184e72a000825b600b5481101562000b1a578260066000600b8481548110620009ca57620009ca62000cf9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a3957508160076000600b848154811062000a125762000a1262000cf9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a53575050600c54936509184e72a0009350915050565b62000aaa60066000600b848154811062000a715762000a7162000cf9565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200222862000b9d821b17901c565b925062000b0360076000600b848154811062000aca5762000aca62000cf9565b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200222862000b9d821b17901c565b91508062000b118162000d25565b915050620009a4565b5062000b3d6509184e72a000600c546200094960201b620021e61790919060201c565b82101562000b58575050600c54926509184e72a00092509050565b90939092509050565b6000818362000b855760405162461bcd60e51b8152600401620004bf919062000d43565b50600062000b94848662000c9c565b95945050505050565b60006200090f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000be760201b60201c565b6000818484111562000c0e5760405162461bcd60e51b8152600401620004bf919062000d43565b50600062000b94848662000c60565b634e487b7160e01b600052601260045260246000fd5b60008262000c455762000c4562000c1d565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000c755762000c7562000c4a565b500390565b600081600019048311821515161562000c975762000c9762000c4a565b500290565b60008262000cae5762000cae62000c1d565b500490565b60006020828403121562000cc657600080fd5b81516001600160a01b03811681146200090f57600080fd5b6000821982111562000cf45762000cf462000c4a565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000d3c5762000d3c62000c4a565b5060010190565b600060208083528351808285015260005b8181101562000d725785810183015185820160400152820162000d54565b8181111562000d85576000604083870101525b50601f01601f1916929092016040019392505050565b608051613cd762000db760003960006105160152613cd76000f3fe6080604052600436106103a65760003560e01c806385ecfd28116101e7578063ad740f8c1161010d578063d00dc589116100a0578063ea2f0b371161006f578063ea2f0b3714610b18578063ee40166e14610b38578063efcc52de14610b4e578063f2fde38b14610b6457600080fd5b8063d00dc58914610a7c578063dc44b6a014610a9c578063dd62ed3e14610ab2578063e653da0814610af857600080fd5b8063c49b9a80116100dc578063c49b9a8014610a10578063c5d2418914610a30578063c860795214610a46578063cc2fbd6614610a5c57600080fd5b8063ad740f8c14610989578063b62496f5146109a9578063bbc0c742146109d9578063c193e758146109fa57600080fd5b8063906e9dd011610185578063a073d37f11610154578063a073d37f14610914578063a457c2d714610929578063a5ece94114610949578063a9059cbb1461096957600080fd5b8063906e9dd01461088857806395d89b41146108a85780639a7a23d6146108d4578063a0263c89146108f457600080fd5b80638a8c523c116101c15780638a8c523c146108205780638c5a133d146108355780638d5f81e2146108555780638da5cb5b1461086a57600080fd5b806385ecfd28146107a157806388790a68146107d157806388f82020146107e757600080fd5b806341d05b08116102cc5780635342acb41161026a578063602bc62b11610239578063602bc62b1461073757806370a082311461074c578063715018a61461076c5780638366e79a1461078157600080fd5b80635342acb4146106ab578063557ed1ba146106e45780635881f3ef146106f75780635bb988c91461071757600080fd5b806349bd5a5e116102a657806349bd5a5e1461062a5780634a74bb021461064a57806352390c021461066b578063525fa81f1461068b57600080fd5b806341d05b08146105d4578063437823ec146105ea5780634549b0391461060a57600080fd5b8063200a692d11610344578063313ce56711610313578063313ce567146105585780633221c93f146105745780633685d4191461059457806339509351146105b457600080fd5b8063200a692d146104ce57806323b872dd146104e457806327c8f835146105045780632d8381191461053857600080fd5b806313114a9d1161038057806313114a9d146104485780631694505e1461046757806318160ddd1461049f5780631fc851bd146104b857600080fd5b806306fdde03146103b257806309231602146103f6578063095ea7b31461041857600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506040805180820190915260098152684d5943524f5045545360b81b60208201525b6040516103ed9190613867565b60405180910390f35b34801561040257600080fd5b506104166104113660046138bc565b610b84565b005b34801561042457600080fd5b506104386104333660046138ed565b610bd9565b60405190151581526020016103ed565b34801561045457600080fd5b50600d545b6040519081526020016103ed565b34801561047357600080fd5b50602654610487906001600160a01b031681565b6040516001600160a01b0390911681526020016103ed565b3480156104ab57600080fd5b506509184e72a000610459565b3480156104c457600080fd5b50610459601d5481565b3480156104da57600080fd5b5061045960175481565b3480156104f057600080fd5b506104386104ff366004613919565b610bf0565b34801561051057600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000000081565b34801561054457600080fd5b506104596105533660046138bc565b610c59565b34801561056457600080fd5b50604051600481526020016103ed565b34801561058057600080fd5b50600554610487906001600160a01b031681565b3480156105a057600080fd5b506104166105af36600461395a565b610cdd565b3480156105c057600080fd5b506104386105cf3660046138ed565b610e94565b3480156105e057600080fd5b50610459601a5481565b3480156105f657600080fd5b5061041661060536600461395a565b610eca565b34801561061657600080fd5b50610459610625366004613985565b610f4f565b34801561063657600080fd5b50602754610487906001600160a01b031681565b34801561065657600080fd5b5060275461043890600160a81b900460ff1681565b34801561067757600080fd5b5061041661068636600461395a565b610fe0565b34801561069757600080fd5b506104166106a636600461395a565b6111ce565b3480156106b757600080fd5b506104386106c636600461395a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106f057600080fd5b5042610459565b34801561070357600080fd5b5061048761071236600461395a565b6112c4565b34801561072357600080fd5b5061041661073236600461395a565b61169e565b34801561074357600080fd5b50600254610459565b34801561075857600080fd5b5061045961076736600461395a565b611711565b34801561077857600080fd5b50610416611770565b34801561078d57600080fd5b5061043861079c3660046139b5565b6117e4565b3480156107ad57600080fd5b506104386107bc36600461395a565b601c6020526000908152604090205460ff1681565b3480156107dd57600080fd5b5061045960185481565b3480156107f357600080fd5b5061043861080236600461395a565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561082c57600080fd5b50610416611a0a565b34801561084157600080fd5b506104166108503660046139e3565b611a5f565b34801561086157600080fd5b50610487611b58565b34801561087657600080fd5b506000546001600160a01b0316610487565b34801561089457600080fd5b506104166108a336600461395a565b611b93565b3480156108b457600080fd5b5060408051808201909152600381526204d43560ec1b60208201526103e0565b3480156108e057600080fd5b506104166108ef366004613a15565b611c89565b34801561090057600080fd5b5061041661090f366004613a43565b611d41565b34801561092057600080fd5b50602554610459565b34801561093557600080fd5b506104386109443660046138ed565b611d7e565b34801561095557600080fd5b50600354610487906001600160a01b031681565b34801561097557600080fd5b506104386109843660046138ed565b611dcd565b34801561099557600080fd5b506104166109a436600461395a565b611dda565b3480156109b557600080fd5b506104386109c436600461395a565b60246020526000908152604090205460ff1681565b3480156109e557600080fd5b5060275461043890600160b01b900460ff1681565b348015610a0657600080fd5b5061045960165481565b348015610a1c57600080fd5b50610416610a2b366004613a43565b611ece565b348015610a3c57600080fd5b5061045960155481565b348015610a5257600080fd5b5061045960195481565b348015610a6857600080fd5b50600454610487906001600160a01b031681565b348015610a8857600080fd5b50610416610a973660046138bc565b611f45565b348015610aa857600080fd5b5061045960145481565b348015610abe57600080fd5b50610459610acd3660046139b5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b0457600080fd5b50610416610b133660046139e3565b611f92565b348015610b2457600080fd5b50610416610b3336600461395a565b612081565b348015610b4457600080fd5b50610459601b5481565b348015610b5a57600080fd5b5061045960135481565b348015610b7057600080fd5b50610416610b7f36600461395a565b6120fc565b6000546001600160a01b03163314610bb75760405162461bcd60e51b8152600401610bae90613a60565b60405180910390fd5b604b811015610bc557600080fd5b610bd381633b9aca00613aab565b60225550565b6000610be633848461226a565b5060015b92915050565b6000610bfd84848461238e565b610c4f8433610c4a85604051806060016040528060288152602001613c55602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612935565b61226a565b5060019392505050565b6000600c54821115610cc05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bae565b6000610cca61296f565b9050610cd683826121e6565b9392505050565b6000546001600160a01b03163314610d075760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000908152600a602052604090205460ff16610d6f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bae565b60005b600b54811015610e9057816001600160a01b0316600b8281548110610d9957610d99613aca565b6000918252602090912001546001600160a01b03161415610e7e57600b8054610dc490600190613ae0565b81548110610dd457610dd4613aca565b600091825260209091200154600b80546001600160a01b039092169183908110610e0057610e00613aca565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480610e5857610e58613af7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e8881613b0d565b915050610d72565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610be6918590610c4a9086612992565b6000546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006509184e72a000831115610fa75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bae565b81610fc6576000610fb7846129f1565b50939550610bea945050505050565b6000610fd1846129f1565b50929550610bea945050505050565b6000546001600160a01b0316331461100a5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000908152600a602052604090205460ff16156110735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bae565b600b54603290611084906001613b28565b111561110e5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610bae565b6001600160a01b03811660009081526006602052604090205415611168576001600160a01b03811660009081526006602052604090205461114e90610c59565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146111f85760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b03811661125c5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bae565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101610f44565b600080546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0382166113455760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610bae565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138357600080fd5b505afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb9190613b40565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613b40565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190613b40565b91506001600160a01b03821661163d57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613b40565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561158257600080fd5b505afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190613b40565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613b40565b91505b602780546001600160a01b038085166001600160a01b031992831617909255602680548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146116c85760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000818152601c6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff161561174e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610bea90610c59565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610bae90613a60565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b0316331461180f5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0383166118655760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bae565b6001600160a01b0383163014156118be5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bae565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561190057600080fd5b505afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190613b5d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561198657600080fd5b505af115801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190613b76565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611a345760405162461bcd60e51b8152600401610bae90613a60565b6027805461ffff60a81b191661010160a81b17905543601b55611a5a426203f480613b28565b601d55565b6000546001600160a01b03163314611a895760405162461bcd60e51b8152600401610bae90613a60565b601384905560148390556015829055601681905560648183611aab8688613b28565b611ab59190613b28565b611abf9190613b28565b1115611b095760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610bae565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611b835760405162461bcd60e51b8152600401610bae90613a60565b506027546001600160a01b031690565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116611c215760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bae565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101610f44565b6000546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610bae90613a60565b6027546001600160a01b0383811691161415611d375760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bae565b610e908282612a40565b6000546001600160a01b03163314611d6b5760405162461bcd60e51b8152600401610bae90613a60565b6021805460ff1916911515919091179055565b6000610be63384610c4a85604051806060016040528060258152602001613c7d602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612935565b6000610be633848461238e565b6000546001600160a01b03163314611e045760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116611e665760405162461bcd60e51b815260206004820152602360248201527f5f6275796261636b4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610bae565b600480546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f58428e52b93cb0bec7200ed2422a12dad38612da234ddcd5e72e3c1c6bedefe39101610f44565b6000546001600160a01b03163314611ef85760405162461bcd60e51b8152600401610bae90613a60565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f4490831515815260200190565b6000546001600160a01b03163314611f6f5760405162461bcd60e51b8152600401610bae90613a60565b620b71b0811015611f7f57600080fd5b602254611f8c9082613aab565b60235550565b6000546001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610bae90613a60565b601784905560188390556019829055601a81905560648183611fde8688613b28565b611fe89190613b28565b611ff29190613b28565b111561203c5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610bae565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611b4a565b6000546001600160a01b031633146120ab5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610f44565b6000546001600160a01b031633146121265760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b03811661218b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bae565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a84565b6000610cd683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612935565b6001600160a01b0383166122cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bae565b6001600160a01b03821661232d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bae565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bae565b6001600160a01b0382166124545760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bae565b600081116124b65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bae565b602754600160b01b900460ff16612552576001600160a01b03831660009081526009602052604090205460ff168061250657506001600160a01b03821660009081526009602052604090205460ff165b6125525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610bae565b6000546001600160a01b0384811691161480159061257e57506027546001600160a01b03838116911614155b801561258b5750601b5443145b156125b4576001600160a01b0382166000908152601c60205260409020805460ff191660011790555b60215460ff1680156125de57506001600160a01b03831660009081526024602052604090205460ff165b156126a1576022543a11156126355760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610bae565b602754600160a01b900460ff1615801561266857506001600160a01b03831660009081526009602052604090205460ff16155b801561268d57506001600160a01b03821660009081526009602052604090205460ff16155b156126a1576023545a11156126a157600080fd5b6000602054601f54601e546126b69190613b28565b6126c09190613b28565b905060006126cd30611711565b60255460275491925082101590600160a01b900460ff161580156126fa5750602754600160a81b900460ff165b801561271b5750602754600090612719906001600160a01b0316611711565b115b80156127275750600083115b801561274c57506001600160a01b03851660009081526009602052604090205460ff16155b801561277157506001600160a01b03861660009081526009602052604090205460ff16155b801561279557506001600160a01b03851660009081526024602052604090205460ff165b801561279e5750805b156127ab576127ab612ab2565b6001600160a01b03861660009081526009602052604090205460019060ff16806127ed57506001600160a01b03861660009081526009602052604090205460ff165b156127ff57506003600e556000612920565b6001600160a01b03871660009081526024602052604090205460ff161561286057612828612da4565b601354600f556016546015546014546128419190613b28565b61284b9190613b28565b60118190551561285b576001600e555b612920565b6001600160a01b03861660009081526024602052604090205460ff161561291257612889612da4565b601754600f55601a546019546018546128a29190613b28565b6128ac9190613b28565b6011819055156128bc576002600e555b6001600160a01b0387166000908152601c602052604090205460ff1680156128e6575043601d5411155b1561285b57600f546128f9906003613aab565b600f5560115461290a906003613aab565b601155612920565b61291a612da4565b6003600e555b61292c87878784612dd2565b50505050505050565b600081848411156129595760405162461bcd60e51b8152600401610bae9190613867565b5060006129668486613ae0565b95945050505050565b600080600061297c612ef8565b909250905061298b82826121e6565b9250505090565b60008061299f8385613b28565b905083811015610cd65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bae565b6000806000806000806000806000612a088a613088565b9250925092506000806000612a268d8686612a2161296f565b6130c4565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215801591909117909155612a7657612a7682610fe0565b80610e9057610e9082610cdd565b60008183612aa55760405162461bcd60e51b8152600401610bae9190613867565b5060006129668486613b93565b6027805460ff60a01b1916600160a01b1790556000612ad030611711565b90506000612af7601f54612af1602054601e5461299290919063ffffffff16565b90612992565b90506000612b116002601e546121e690919063ffffffff16565b90506000612b1f8483612228565b905047612b2b82613114565b6000612b374783612228565b90506000612b5a86612b54601f548561327d90919063ffffffff16565b906121e6565b90506000612b7787612b546020548661327d90919063ffffffff16565b90506000612b8f82612b898686612228565b90612228565b905060006064612ba085601e613aab565b612baa9190613b93565b9050612bb68185613ae0565b6000601e819055601f819055602081905560045460405192965090916001600160a01b039091169085908381818185875af1925050503d8060008114612c18576040519150601f19603f3d011682016040523d82523d6000602084013e612c1d565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b505060405190915073b277e9f8edeb880576c144bfe732b4c5d23d64b0908390600081818185875af1925050503d8060008114612ccb576040519150601f19603f3d011682016040523d82523d6000602084013e612cd0565b606091505b50909150508815801590612ce45750600083115b15612d3557612cf389846132fc565b60408051898152602081018590529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d82576040519150601f19603f3d011682016040523d82523d6000602084013e612d87565b606091505b50506027805460ff60a01b19169055505050505050505050505050565b600f54158015612db45750601154155b15612dbb57565b600f80546010556011805460125560009182905555565b80612ddf57612ddf612da4565b6001600160a01b0384166000908152600a602052604090205460ff168015612e2057506001600160a01b0383166000908152600a602052604090205460ff16155b15612e3557612e308484846133bf565b612ee1565b6001600160a01b0384166000908152600a602052604090205460ff16158015612e7657506001600160a01b0383166000908152600a602052604090205460ff165b15612e8657612e308484846134e5565b6001600160a01b0384166000908152600a602052604090205460ff168015612ec657506001600160a01b0383166000908152600a602052604090205460ff165b15612ed657612e3084848461358e565b612ee1848484613601565b612ef2601054600f55601254601155565b50505050565b600c5460009081906509184e72a000825b600b54811015613051578260066000600b8481548110612f2b57612f2b613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f9657508160076000600b8481548110612f6f57612f6f613aca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612faf575050600c54936509184e72a0009350915050565b612ff560066000600b8481548110612fc957612fc9613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612228565b925061303d60076000600b848154811061301157613011613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612228565b91508061304981613b0d565b915050612f09565b50600c54613065906509184e72a0006121e6565b82101561307f575050600c54926509184e72a00092509050565b90939092509050565b60008060008061309785613645565b905060006130a486613661565b905060006130b682612b898986612228565b979296509094509092505050565b60008080806130d3888661327d565b905060006130e1888761327d565b905060006130ef888861327d565b9050600061310182612b898686612228565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061314957613149613aca565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561319d57600080fd5b505afa1580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190613b40565b816001815181106131e8576131e8613aca565b6001600160a01b03928316602091820292909201015260265461320e913091168461226a565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790613247908590600090869030904290600401613bb5565b600060405180830381600087803b15801561326157600080fd5b505af1158015613275573d6000803e3d6000fd5b505050505050565b60008261328c57506000610bea565b60006132988385613aab565b9050826132a58583613b93565b14610cd65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bae565b6026546133149030906001600160a01b03168461226a565b60265460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b89190613c26565b5050505050565b6000806000806000806133d1876129f1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506134039088612228565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546134329087612228565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546134619086612992565b6001600160a01b0389166000908152600660205260409020556134838161367d565b61348d8483613843565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134d291815260200190565b60405180910390a3505050505050505050565b6000806000806000806134f7876129f1565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506135299087612228565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461355f9084612992565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546134619086612992565b6000806000806000806135a0876129f1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506135d29088612228565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546135299087612228565b600080600080600080613613876129f1565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134329087612228565b6000610bea6064612b54600f548561327d90919063ffffffff16565b6000610bea6064612b546011548561327d90919063ffffffff16565b6001600e54141561371e576011546014546136989083613aab565b6136a29190613b93565b601e60008282546136b39190613b28565b90915550506011546016546136c89083613aab565b6136d29190613b93565b602060008282546136e39190613b28565b90915550506011546015546136f89083613aab565b6137029190613b93565b601f60008282546137139190613b28565b909155506137ba9050565b6002600e5414156137ba576011546018546137399083613aab565b6137439190613b93565b601e60008282546137549190613b28565b9091555050601154601a546137699083613aab565b6137739190613b93565b602060008282546137849190613b28565b90915550506011546019546137999083613aab565b6137a39190613b93565b601f60008282546137b49190613b28565b90915550505b60006137c461296f565b905060006137d2838361327d565b306000908152600660205260409020549091506137ef9082612992565b30600090815260066020908152604080832093909355600a9052205460ff161561383e573060009081526007602052604090205461382d9084612992565b306000908152600760205260409020555b505050565b600c546138509083612228565b600c55600d546138609082612992565b600d555050565b600060208083528351808285015260005b8181101561389457858101830151858201604001528201613878565b818111156138a6576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156138ce57600080fd5b5035919050565b6001600160a01b03811681146138ea57600080fd5b50565b6000806040838503121561390057600080fd5b823561390b816138d5565b946020939093013593505050565b60008060006060848603121561392e57600080fd5b8335613939816138d5565b92506020840135613949816138d5565b929592945050506040919091013590565b60006020828403121561396c57600080fd5b8135610cd6816138d5565b80151581146138ea57600080fd5b6000806040838503121561399857600080fd5b8235915060208301356139aa81613977565b809150509250929050565b600080604083850312156139c857600080fd5b82356139d3816138d5565b915060208301356139aa816138d5565b600080600080608085870312156139f957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613a2857600080fd5b8235613a33816138d5565b915060208301356139aa81613977565b600060208284031215613a5557600080fd5b8135610cd681613977565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ac557613ac5613a95565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613af257613af2613a95565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613b2157613b21613a95565b5060010190565b60008219821115613b3b57613b3b613a95565b500190565b600060208284031215613b5257600080fd5b8151610cd6816138d5565b600060208284031215613b6f57600080fd5b5051919050565b600060208284031215613b8857600080fd5b8151610cd681613977565b600082613bb057634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c055784516001600160a01b031683529383019391830191600101613be0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c3b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2d632d7b2051778598b9a234a1c529cea1634c80bde0217672bc47facff6b0a64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103a65760003560e01c806385ecfd28116101e7578063ad740f8c1161010d578063d00dc589116100a0578063ea2f0b371161006f578063ea2f0b3714610b18578063ee40166e14610b38578063efcc52de14610b4e578063f2fde38b14610b6457600080fd5b8063d00dc58914610a7c578063dc44b6a014610a9c578063dd62ed3e14610ab2578063e653da0814610af857600080fd5b8063c49b9a80116100dc578063c49b9a8014610a10578063c5d2418914610a30578063c860795214610a46578063cc2fbd6614610a5c57600080fd5b8063ad740f8c14610989578063b62496f5146109a9578063bbc0c742146109d9578063c193e758146109fa57600080fd5b8063906e9dd011610185578063a073d37f11610154578063a073d37f14610914578063a457c2d714610929578063a5ece94114610949578063a9059cbb1461096957600080fd5b8063906e9dd01461088857806395d89b41146108a85780639a7a23d6146108d4578063a0263c89146108f457600080fd5b80638a8c523c116101c15780638a8c523c146108205780638c5a133d146108355780638d5f81e2146108555780638da5cb5b1461086a57600080fd5b806385ecfd28146107a157806388790a68146107d157806388f82020146107e757600080fd5b806341d05b08116102cc5780635342acb41161026a578063602bc62b11610239578063602bc62b1461073757806370a082311461074c578063715018a61461076c5780638366e79a1461078157600080fd5b80635342acb4146106ab578063557ed1ba146106e45780635881f3ef146106f75780635bb988c91461071757600080fd5b806349bd5a5e116102a657806349bd5a5e1461062a5780634a74bb021461064a57806352390c021461066b578063525fa81f1461068b57600080fd5b806341d05b08146105d4578063437823ec146105ea5780634549b0391461060a57600080fd5b8063200a692d11610344578063313ce56711610313578063313ce567146105585780633221c93f146105745780633685d4191461059457806339509351146105b457600080fd5b8063200a692d146104ce57806323b872dd146104e457806327c8f835146105045780632d8381191461053857600080fd5b806313114a9d1161038057806313114a9d146104485780631694505e1461046757806318160ddd1461049f5780631fc851bd146104b857600080fd5b806306fdde03146103b257806309231602146103f6578063095ea7b31461041857600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506040805180820190915260098152684d5943524f5045545360b81b60208201525b6040516103ed9190613867565b60405180910390f35b34801561040257600080fd5b506104166104113660046138bc565b610b84565b005b34801561042457600080fd5b506104386104333660046138ed565b610bd9565b60405190151581526020016103ed565b34801561045457600080fd5b50600d545b6040519081526020016103ed565b34801561047357600080fd5b50602654610487906001600160a01b031681565b6040516001600160a01b0390911681526020016103ed565b3480156104ab57600080fd5b506509184e72a000610459565b3480156104c457600080fd5b50610459601d5481565b3480156104da57600080fd5b5061045960175481565b3480156104f057600080fd5b506104386104ff366004613919565b610bf0565b34801561051057600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000dead81565b34801561054457600080fd5b506104596105533660046138bc565b610c59565b34801561056457600080fd5b50604051600481526020016103ed565b34801561058057600080fd5b50600554610487906001600160a01b031681565b3480156105a057600080fd5b506104166105af36600461395a565b610cdd565b3480156105c057600080fd5b506104386105cf3660046138ed565b610e94565b3480156105e057600080fd5b50610459601a5481565b3480156105f657600080fd5b5061041661060536600461395a565b610eca565b34801561061657600080fd5b50610459610625366004613985565b610f4f565b34801561063657600080fd5b50602754610487906001600160a01b031681565b34801561065657600080fd5b5060275461043890600160a81b900460ff1681565b34801561067757600080fd5b5061041661068636600461395a565b610fe0565b34801561069757600080fd5b506104166106a636600461395a565b6111ce565b3480156106b757600080fd5b506104386106c636600461395a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106f057600080fd5b5042610459565b34801561070357600080fd5b5061048761071236600461395a565b6112c4565b34801561072357600080fd5b5061041661073236600461395a565b61169e565b34801561074357600080fd5b50600254610459565b34801561075857600080fd5b5061045961076736600461395a565b611711565b34801561077857600080fd5b50610416611770565b34801561078d57600080fd5b5061043861079c3660046139b5565b6117e4565b3480156107ad57600080fd5b506104386107bc36600461395a565b601c6020526000908152604090205460ff1681565b3480156107dd57600080fd5b5061045960185481565b3480156107f357600080fd5b5061043861080236600461395a565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561082c57600080fd5b50610416611a0a565b34801561084157600080fd5b506104166108503660046139e3565b611a5f565b34801561086157600080fd5b50610487611b58565b34801561087657600080fd5b506000546001600160a01b0316610487565b34801561089457600080fd5b506104166108a336600461395a565b611b93565b3480156108b457600080fd5b5060408051808201909152600381526204d43560ec1b60208201526103e0565b3480156108e057600080fd5b506104166108ef366004613a15565b611c89565b34801561090057600080fd5b5061041661090f366004613a43565b611d41565b34801561092057600080fd5b50602554610459565b34801561093557600080fd5b506104386109443660046138ed565b611d7e565b34801561095557600080fd5b50600354610487906001600160a01b031681565b34801561097557600080fd5b506104386109843660046138ed565b611dcd565b34801561099557600080fd5b506104166109a436600461395a565b611dda565b3480156109b557600080fd5b506104386109c436600461395a565b60246020526000908152604090205460ff1681565b3480156109e557600080fd5b5060275461043890600160b01b900460ff1681565b348015610a0657600080fd5b5061045960165481565b348015610a1c57600080fd5b50610416610a2b366004613a43565b611ece565b348015610a3c57600080fd5b5061045960155481565b348015610a5257600080fd5b5061045960195481565b348015610a6857600080fd5b50600454610487906001600160a01b031681565b348015610a8857600080fd5b50610416610a973660046138bc565b611f45565b348015610aa857600080fd5b5061045960145481565b348015610abe57600080fd5b50610459610acd3660046139b5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b0457600080fd5b50610416610b133660046139e3565b611f92565b348015610b2457600080fd5b50610416610b3336600461395a565b612081565b348015610b4457600080fd5b50610459601b5481565b348015610b5a57600080fd5b5061045960135481565b348015610b7057600080fd5b50610416610b7f36600461395a565b6120fc565b6000546001600160a01b03163314610bb75760405162461bcd60e51b8152600401610bae90613a60565b60405180910390fd5b604b811015610bc557600080fd5b610bd381633b9aca00613aab565b60225550565b6000610be633848461226a565b5060015b92915050565b6000610bfd84848461238e565b610c4f8433610c4a85604051806060016040528060288152602001613c55602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612935565b61226a565b5060019392505050565b6000600c54821115610cc05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bae565b6000610cca61296f565b9050610cd683826121e6565b9392505050565b6000546001600160a01b03163314610d075760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000908152600a602052604090205460ff16610d6f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bae565b60005b600b54811015610e9057816001600160a01b0316600b8281548110610d9957610d99613aca565b6000918252602090912001546001600160a01b03161415610e7e57600b8054610dc490600190613ae0565b81548110610dd457610dd4613aca565b600091825260209091200154600b80546001600160a01b039092169183908110610e0057610e00613aca565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480610e5857610e58613af7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e8881613b0d565b915050610d72565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610be6918590610c4a9086612992565b6000546001600160a01b03163314610ef45760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006509184e72a000831115610fa75760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bae565b81610fc6576000610fb7846129f1565b50939550610bea945050505050565b6000610fd1846129f1565b50929550610bea945050505050565b6000546001600160a01b0316331461100a5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000908152600a602052604090205460ff16156110735760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bae565b600b54603290611084906001613b28565b111561110e5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610bae565b6001600160a01b03811660009081526006602052604090205415611168576001600160a01b03811660009081526006602052604090205461114e90610c59565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146111f85760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b03811661125c5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bae565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101610f44565b600080546001600160a01b031633146112ef5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0382166113455760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610bae565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561138357600080fd5b505afa158015611397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bb9190613b40565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613b40565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190613b40565b91506001600160a01b03821661163d57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613b40565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561158257600080fd5b505afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190613b40565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613b40565b91505b602780546001600160a01b038085166001600160a01b031992831617909255602680548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146116c85760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0381166000818152601c6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff161561174e57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610bea90610c59565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610bae90613a60565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b0316331461180f5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b0383166118655760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bae565b6001600160a01b0383163014156118be5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bae565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561190057600080fd5b505afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119389190613b5d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561198657600080fd5b505af115801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190613b76565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611a345760405162461bcd60e51b8152600401610bae90613a60565b6027805461ffff60a81b191661010160a81b17905543601b55611a5a426203f480613b28565b601d55565b6000546001600160a01b03163314611a895760405162461bcd60e51b8152600401610bae90613a60565b601384905560148390556015829055601681905560648183611aab8688613b28565b611ab59190613b28565b611abf9190613b28565b1115611b095760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610bae565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611b835760405162461bcd60e51b8152600401610bae90613a60565b506027546001600160a01b031690565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116611c215760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bae565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101610f44565b6000546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610bae90613a60565b6027546001600160a01b0383811691161415611d375760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bae565b610e908282612a40565b6000546001600160a01b03163314611d6b5760405162461bcd60e51b8152600401610bae90613a60565b6021805460ff1916911515919091179055565b6000610be63384610c4a85604051806060016040528060258152602001613c7d602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612935565b6000610be633848461238e565b6000546001600160a01b03163314611e045760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116611e665760405162461bcd60e51b815260206004820152602360248201527f5f6275796261636b4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610bae565b600480546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f58428e52b93cb0bec7200ed2422a12dad38612da234ddcd5e72e3c1c6bedefe39101610f44565b6000546001600160a01b03163314611ef85760405162461bcd60e51b8152600401610bae90613a60565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610f4490831515815260200190565b6000546001600160a01b03163314611f6f5760405162461bcd60e51b8152600401610bae90613a60565b620b71b0811015611f7f57600080fd5b602254611f8c9082613aab565b60235550565b6000546001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610bae90613a60565b601784905560188390556019829055601a81905560648183611fde8688613b28565b611fe89190613b28565b611ff29190613b28565b111561203c5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772035302560381b6044820152606401610bae565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611b4a565b6000546001600160a01b031633146120ab5760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610f44565b6000546001600160a01b031633146121265760405162461bcd60e51b8152600401610bae90613a60565b6001600160a01b03811661218b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bae565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a84565b6000610cd683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612935565b6001600160a01b0383166122cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bae565b6001600160a01b03821661232d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bae565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bae565b6001600160a01b0382166124545760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bae565b600081116124b65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bae565b602754600160b01b900460ff16612552576001600160a01b03831660009081526009602052604090205460ff168061250657506001600160a01b03821660009081526009602052604090205460ff165b6125525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610bae565b6000546001600160a01b0384811691161480159061257e57506027546001600160a01b03838116911614155b801561258b5750601b5443145b156125b4576001600160a01b0382166000908152601c60205260409020805460ff191660011790555b60215460ff1680156125de57506001600160a01b03831660009081526024602052604090205460ff165b156126a1576022543a11156126355760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610bae565b602754600160a01b900460ff1615801561266857506001600160a01b03831660009081526009602052604090205460ff16155b801561268d57506001600160a01b03821660009081526009602052604090205460ff16155b156126a1576023545a11156126a157600080fd5b6000602054601f54601e546126b69190613b28565b6126c09190613b28565b905060006126cd30611711565b60255460275491925082101590600160a01b900460ff161580156126fa5750602754600160a81b900460ff165b801561271b5750602754600090612719906001600160a01b0316611711565b115b80156127275750600083115b801561274c57506001600160a01b03851660009081526009602052604090205460ff16155b801561277157506001600160a01b03861660009081526009602052604090205460ff16155b801561279557506001600160a01b03851660009081526024602052604090205460ff165b801561279e5750805b156127ab576127ab612ab2565b6001600160a01b03861660009081526009602052604090205460019060ff16806127ed57506001600160a01b03861660009081526009602052604090205460ff165b156127ff57506003600e556000612920565b6001600160a01b03871660009081526024602052604090205460ff161561286057612828612da4565b601354600f556016546015546014546128419190613b28565b61284b9190613b28565b60118190551561285b576001600e555b612920565b6001600160a01b03861660009081526024602052604090205460ff161561291257612889612da4565b601754600f55601a546019546018546128a29190613b28565b6128ac9190613b28565b6011819055156128bc576002600e555b6001600160a01b0387166000908152601c602052604090205460ff1680156128e6575043601d5411155b1561285b57600f546128f9906003613aab565b600f5560115461290a906003613aab565b601155612920565b61291a612da4565b6003600e555b61292c87878784612dd2565b50505050505050565b600081848411156129595760405162461bcd60e51b8152600401610bae9190613867565b5060006129668486613ae0565b95945050505050565b600080600061297c612ef8565b909250905061298b82826121e6565b9250505090565b60008061299f8385613b28565b905083811015610cd65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bae565b6000806000806000806000806000612a088a613088565b9250925092506000806000612a268d8686612a2161296f565b6130c4565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602460205260409020805460ff19168215801591909117909155612a7657612a7682610fe0565b80610e9057610e9082610cdd565b60008183612aa55760405162461bcd60e51b8152600401610bae9190613867565b5060006129668486613b93565b6027805460ff60a01b1916600160a01b1790556000612ad030611711565b90506000612af7601f54612af1602054601e5461299290919063ffffffff16565b90612992565b90506000612b116002601e546121e690919063ffffffff16565b90506000612b1f8483612228565b905047612b2b82613114565b6000612b374783612228565b90506000612b5a86612b54601f548561327d90919063ffffffff16565b906121e6565b90506000612b7787612b546020548661327d90919063ffffffff16565b90506000612b8f82612b898686612228565b90612228565b905060006064612ba085601e613aab565b612baa9190613b93565b9050612bb68185613ae0565b6000601e819055601f819055602081905560045460405192965090916001600160a01b039091169085908381818185875af1925050503d8060008114612c18576040519150601f19603f3d011682016040523d82523d6000602084013e612c1d565b606091505b50506003546040519192506001600160a01b0316908690600081818185875af1925050503d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b505060405190915073b277e9f8edeb880576c144bfe732b4c5d23d64b0908390600081818185875af1925050503d8060008114612ccb576040519150601f19603f3d011682016040523d82523d6000602084013e612cd0565b606091505b50909150508815801590612ce45750600083115b15612d3557612cf389846132fc565b60408051898152602081018590529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d82576040519150601f19603f3d011682016040523d82523d6000602084013e612d87565b606091505b50506027805460ff60a01b19169055505050505050505050505050565b600f54158015612db45750601154155b15612dbb57565b600f80546010556011805460125560009182905555565b80612ddf57612ddf612da4565b6001600160a01b0384166000908152600a602052604090205460ff168015612e2057506001600160a01b0383166000908152600a602052604090205460ff16155b15612e3557612e308484846133bf565b612ee1565b6001600160a01b0384166000908152600a602052604090205460ff16158015612e7657506001600160a01b0383166000908152600a602052604090205460ff165b15612e8657612e308484846134e5565b6001600160a01b0384166000908152600a602052604090205460ff168015612ec657506001600160a01b0383166000908152600a602052604090205460ff165b15612ed657612e3084848461358e565b612ee1848484613601565b612ef2601054600f55601254601155565b50505050565b600c5460009081906509184e72a000825b600b54811015613051578260066000600b8481548110612f2b57612f2b613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f9657508160076000600b8481548110612f6f57612f6f613aca565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612faf575050600c54936509184e72a0009350915050565b612ff560066000600b8481548110612fc957612fc9613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612228565b925061303d60076000600b848154811061301157613011613aca565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612228565b91508061304981613b0d565b915050612f09565b50600c54613065906509184e72a0006121e6565b82101561307f575050600c54926509184e72a00092509050565b90939092509050565b60008060008061309785613645565b905060006130a486613661565b905060006130b682612b898986612228565b979296509094509092505050565b60008080806130d3888661327d565b905060006130e1888761327d565b905060006130ef888861327d565b9050600061310182612b898686612228565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061314957613149613aca565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561319d57600080fd5b505afa1580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d59190613b40565b816001815181106131e8576131e8613aca565b6001600160a01b03928316602091820292909201015260265461320e913091168461226a565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790613247908590600090869030904290600401613bb5565b600060405180830381600087803b15801561326157600080fd5b505af1158015613275573d6000803e3d6000fd5b505050505050565b60008261328c57506000610bea565b60006132988385613aab565b9050826132a58583613b93565b14610cd65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bae565b6026546133149030906001600160a01b03168461226a565b60265460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133b89190613c26565b5050505050565b6000806000806000806133d1876129f1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506134039088612228565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546134329087612228565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546134619086612992565b6001600160a01b0389166000908152600660205260409020556134838161367d565b61348d8483613843565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134d291815260200190565b60405180910390a3505050505050505050565b6000806000806000806134f7876129f1565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506135299087612228565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461355f9084612992565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546134619086612992565b6000806000806000806135a0876129f1565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506135d29088612228565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546135299087612228565b600080600080600080613613876129f1565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506134329087612228565b6000610bea6064612b54600f548561327d90919063ffffffff16565b6000610bea6064612b546011548561327d90919063ffffffff16565b6001600e54141561371e576011546014546136989083613aab565b6136a29190613b93565b601e60008282546136b39190613b28565b90915550506011546016546136c89083613aab565b6136d29190613b93565b602060008282546136e39190613b28565b90915550506011546015546136f89083613aab565b6137029190613b93565b601f60008282546137139190613b28565b909155506137ba9050565b6002600e5414156137ba576011546018546137399083613aab565b6137439190613b93565b601e60008282546137549190613b28565b9091555050601154601a546137699083613aab565b6137739190613b93565b602060008282546137849190613b28565b90915550506011546019546137999083613aab565b6137a39190613b93565b601f60008282546137b49190613b28565b90915550505b60006137c461296f565b905060006137d2838361327d565b306000908152600660205260409020549091506137ef9082612992565b30600090815260066020908152604080832093909355600a9052205460ff161561383e573060009081526007602052604090205461382d9084612992565b306000908152600760205260409020555b505050565b600c546138509083612228565b600c55600d546138609082612992565b600d555050565b600060208083528351808285015260005b8181101561389457858101830151858201604001528201613878565b818111156138a6576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156138ce57600080fd5b5035919050565b6001600160a01b03811681146138ea57600080fd5b50565b6000806040838503121561390057600080fd5b823561390b816138d5565b946020939093013593505050565b60008060006060848603121561392e57600080fd5b8335613939816138d5565b92506020840135613949816138d5565b929592945050506040919091013590565b60006020828403121561396c57600080fd5b8135610cd6816138d5565b80151581146138ea57600080fd5b6000806040838503121561399857600080fd5b8235915060208301356139aa81613977565b809150509250929050565b600080604083850312156139c857600080fd5b82356139d3816138d5565b915060208301356139aa816138d5565b600080600080608085870312156139f957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613a2857600080fd5b8235613a33816138d5565b915060208301356139aa81613977565b600060208284031215613a5557600080fd5b8135610cd681613977565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ac557613ac5613a95565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613af257613af2613a95565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613b2157613b21613a95565b5060010190565b60008219821115613b3b57613b3b613a95565b500190565b600060208284031215613b5257600080fd5b8151610cd6816138d5565b600060208284031215613b6f57600080fd5b5051919050565b600060208284031215613b8857600080fd5b8151610cd681613977565b600082613bb057634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c055784516001600160a01b031683529383019391830191600101613be0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c3b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d2d632d7b2051778598b9a234a1c529cea1634c80bde0217672bc47facff6b0a64736f6c63430008090033
Deployed ByteCode Sourcemap
16571:30182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22283:85;;;;;;;;;;-1:-1:-1;22355:5:0;;;;;;;;;;;;-1:-1:-1;;;22355:5:0;;;;22283:85;;;;;;;:::i;:::-;;;;;;;;25944:134;;;;;;;;;;-1:-1:-1;25944:134:0;;;;;:::i;:::-;;:::i;:::-;;23280:195;;;;;;;;;;-1:-1:-1;23280:195:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;23280:195:0;1257:187:1;24821:89:0;;;;;;;;;;-1:-1:-1;24892:10:0;;24821:89;;;1595:25:1;;;1583:2;1568:18;24821:89:0;1449:177:1;19665:41:0;;;;;;;;;;-1:-1:-1;19665:41:0;;;;-1:-1:-1;;;;;19665:41:0;;;;;;-1:-1:-1;;;;;1822:32:1;;;1804:51;;1792:2;1777:18;19665:41:0;1631:230:1;22566:97:0;;;;;;;;;;-1:-1:-1;17642:16:0;22566:97;;18952:33;;;;;;;;;;;;;;;;18655:30;;;;;;;;;;;;;;;;23483:448;;;;;;;;;;-1:-1:-1;23483:448:0;;;;;:::i;:::-;;:::i;17108:90::-;;;;;;;;;;;;;;;26734:322;;;;;;;;;;-1:-1:-1;26734:322:0;;;;;:::i;:::-;;:::i;22473:85::-;;;;;;;;;;-1:-1:-1;22473:85:0;;17887:1;2677:36:1;;2665:2;2650:18;22473:85:0;2535:184:1;16968:102:0;;;;;;;;;;-1:-1:-1;16968:102:0;;;;-1:-1:-1;;;;;16968:102:0;;;27531:471;;;;;;;;;;-1:-1:-1;27531:471:0;;;;;:::i;:::-;;:::i;23939:302::-;;;;;;;;;;-1:-1:-1;23939:302:0;;;;;:::i;:::-;;:::i;18778:34::-;;;;;;;;;;;;;;;;42389:152;;;;;;;;;;-1:-1:-1;42389:152:0;;;;;:::i;:::-;;:::i;26245:481::-;;;;;;;;;;-1:-1:-1;26245:481:0;;;;;:::i;:::-;;:::i;19713:28::-;;;;;;;;;;-1:-1:-1;19713:28:0;;;;-1:-1:-1;;;;;19713:28:0;;;19778:41;;;;;;;;;;-1:-1:-1;19778:41:0;;;;-1:-1:-1;;;19778:41:0;;;;;;27064:459;;;;;;;;;;-1:-1:-1;27064:459:0;;;;;:::i;:::-;;:::i;44660:343::-;;;;;;;;;;-1:-1:-1;44660:343:0;;;;;:::i;:::-;;:::i;42255:126::-;;;;;;;;;;-1:-1:-1;42255:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;42346:27:0;42322:4;42346:27;;;:18;:27;;;;;;;;;42255:126;7273:90;;;;;;;;;;-1:-1:-1;7340:15:0;7273:90;;45305:848;;;;;;;;;;-1:-1:-1;45305:848:0;;;;;:::i;:::-;;:::i;42710:148::-;;;;;;;;;;-1:-1:-1;42710:148:0;;;;;:::i;:::-;;:::i;7175:90::-;;;;;;;;;;-1:-1:-1;7248:9:0;;7175:90;;22671:198;;;;;;;;;;-1:-1:-1;22671:198:0;;;;;:::i;:::-;;:::i;6726:150::-;;;;;;;;;;;;;:::i;46256:488::-;;;;;;;;;;-1:-1:-1;46256:488:0;;;;;:::i;:::-;;:::i;18902:43::-;;;;;;;;;;-1:-1:-1;18902:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18692:36;;;;;;;;;;;;;;;;24659:154;;;;;;;;;;-1:-1:-1;24659:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24785:20:0;24756:4;24785:20;;;:11;:20;;;;;;;;;24659:154;24968:224;;;;;;;;;;;;;:::i;42866:531::-;;;;;;;;;;-1:-1:-1;42866:531:0;;;;;:::i;:::-;;:::i;45190:107::-;;;;;;;;;;;;;:::i;6512:79::-;;;;;;;;;;-1:-1:-1;6550:7:0;6577:6;-1:-1:-1;;;;;6577:6:0;6512:79;;43968:343;;;;;;;;;;-1:-1:-1;43968:343:0;;;;;:::i;:::-;;:::i;22376:89::-;;;;;;;;;;-1:-1:-1;22450:7:0;;;;;;;;;;;;-1:-1:-1;;;22450:7:0;;;;22376:89;;25338:246;;;;;;;;;;-1:-1:-1;25338:246:0;;;;;:::i;:::-;;:::i;25823:109::-;;;;;;;;;;-1:-1:-1;25823:109:0;;;;;:::i;:::-;;:::i;25204:122::-;;;;;;;;;;-1:-1:-1;25295:23:0;;25204:122;;24249:402;;;;;;;;;;-1:-1:-1;24249:402:0;;;;;:::i;:::-;;:::i;16692:102::-;;;;;;;;;;-1:-1:-1;16692:102:0;;;;-1:-1:-1;;;;;16692:102:0;;;22877:201;;;;;;;;;;-1:-1:-1;22877:201:0;;;;;:::i;:::-;;:::i;44323:325::-;;;;;;;;;;-1:-1:-1;44323:325:0;;;;;:::i;:::-;;:::i;19519:58::-;;;;;;;;;;-1:-1:-1;19519:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19826:33;;;;;;;;;;-1:-1:-1;19826:33:0;;;;-1:-1:-1;;;19826:33:0;;;;;;18613;;;;;;;;;;;;;;;;45011:171;;;;;;;;;;-1:-1:-1;45011:171:0;;;;;:::i;:::-;;:::i;18571:35::-;;;;;;;;;;;;;;;;18735:36;;;;;;;;;;;;;;;;16832:100;;;;;;;;;;-1:-1:-1;16832:100:0;;;;-1:-1:-1;;;;;16832:100:0;;;26090:141;;;;;;;;;;-1:-1:-1;26090:141:0;;;;;:::i;:::-;;:::i;18529:35::-;;;;;;;;;;;;;;;;23086:186;;;;;;;;;;-1:-1:-1;23086:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23237:18:0;;;23205:7;23237:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23086:186;43405:553;;;;;;;;;;-1:-1:-1;43405:553:0;;;;;:::i;:::-;;:::i;42549:149::-;;;;;;;;;;-1:-1:-1;42549:149:0;;;;;:::i;:::-;;:::i;18825:37::-;;;;;;;;;;;;;;;;18493:29;;;;;;;;;;;;;;;;6884:283;;;;;;;;;;-1:-1:-1;6884:283:0;;;;;:::i;:::-;;:::i;25944:134::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;;;;;;;;;26028:2:::1;26021:3;:9;;26013:18;;;::::0;::::1;;26058:12;:3:::0;26064:6:::1;26058:12;:::i;:::-;26042:13;:28:::0;-1:-1:-1;25944:134:0:o;23280:195::-;23384:4;23406:39;251:10;23429:7;23438:6;23406:8;:39::i;:::-;-1:-1:-1;23463:4:0;23280:195;;;;;:::o;23483:448::-;23617:4;23634:36;23644:6;23652:9;23663:6;23634:9;:36::i;:::-;23681:220;23704:6;251:10;23752:138;23808:6;23752:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23752:19:0;;;;;;:11;:19;;;;;;;;251:10;23752:33;;;;;;;;;;:37;:138::i;:::-;23681:8;:220::i;:::-;-1:-1:-1;23919:4:0;23483:448;;;;;:::o;26734:322::-;26828:7;26886;;26875;:18;;26853:110;;;;-1:-1:-1;;;26853:110:0;;5921:2:1;26853:110:0;;;5903:21:1;5960:2;5940:18;;;5933:30;5999:34;5979:18;;;5972:62;-1:-1:-1;;;6050:18:1;;;6043:40;6100:19;;26853:110:0;5719:406:1;26853:110:0;26974:19;26996:10;:8;:10::i;:::-;26974:32;-1:-1:-1;27024:24:0;:7;26974:32;27024:11;:24::i;:::-;27017:31;26734:322;-1:-1:-1;;;26734:322:0:o;27531:471::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27609:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27601:56;;;::::0;-1:-1:-1;;;27601:56:0;;6332:2:1;27601:56:0::1;::::0;::::1;6314:21:1::0;6371:2;6351:18;;;6344:30;6410:25;6390:18;;;6383:53;6453:18;;27601:56:0::1;6130:347:1::0;27601:56:0::1;27673:9;27668:327;27692:9;:16:::0;27688:20;::::1;27668:327;;;27750:7;-1:-1:-1::0;;;;;27734:23:0::1;:9;27744:1;27734:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27734:12:0::1;:23;27730:254;;;27793:9;27803:16:::0;;:20:::1;::::0;27822:1:::1;::::0;27803:20:::1;:::i;:::-;27793:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27778:9:::1;:12:::0;;-1:-1:-1;;;;;27793:31:0;;::::1;::::0;27788:1;;27778:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27778:46:0::1;-1:-1:-1::0;;;;;27778:46:0;;::::1;;::::0;;27843:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27882:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27882:28:0::1;::::0;;27929:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27929:15:0;;;;;-1:-1:-1;;;;;;27929:15:0::1;::::0;;;;;27668:327:::1;27531:471:::0;:::o;27730:254::-:1;27710:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27668:327;;;;27531:471:::0;:::o;23939:302::-;251:10;24056:4;24150:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24150:34:0;;;;;;;;;;24056:4;;24078:133;;24128:7;;24150:50;;24189:10;24150:38;:50::i;42389:152::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42460:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;42460:34:0::1;42490:4;42460:34;::::0;;42510:23;;1804:51:1;;;42510:23:0::1;::::0;1777:18:1;42510:23:0::1;;;;;;;;42389:152:::0;:::o;26245:481::-;26365:7;17642:16;26398:7;:18;;26390:62;;;;-1:-1:-1;;;26390:62:0;;7218:2:1;26390:62:0;;;7200:21:1;7257:2;7237:18;;;7230:30;7296:33;7276:18;;;7269:61;7347:18;;26390:62:0;7016:355:1;26390:62:0;26468:17;26463:256;;26503:15;26532:19;26543:7;26532:10;:19::i;:::-;-1:-1:-1;26502:49:0;;-1:-1:-1;26566:14:0;;-1:-1:-1;;;;;26566:14:0;26463:256;26616:23;26651:19;26662:7;26651:10;:19::i;:::-;-1:-1:-1;26613:57:0;;-1:-1:-1;26685:22:0;;-1:-1:-1;;;;;26685:22:0;27064:459;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27145:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27144:21;27136:61;;;::::0;-1:-1:-1;;;27136:61:0;;7578:2:1;27136:61:0::1;::::0;::::1;7560:21:1::0;7617:2;7597:18;;;7590:30;7656:29;7636:18;;;7629:57;7703:18;;27136:61:0::1;7376:351:1::0;27136:61:0::1;27216:9;:16:::0;27240:2:::1;::::0;27216:20:::1;::::0;27235:1:::1;27216:20;:::i;:::-;:26;;27208:116;;;::::0;-1:-1:-1;;;27208:116:0;;8067:2:1;27208:116:0::1;::::0;::::1;8049:21:1::0;8106:2;8086:18;;;8079:30;8145:34;8125:18;;;8118:62;8216:34;8196:18;;;8189:62;-1:-1:-1;;;8267:19:1;;;8260:44;8321:19;;27208:116:0::1;7865:481:1::0;27208:116:0::1;-1:-1:-1::0;;;;;27339:16:0;::::1;27358:1;27339:16:::0;;;:7:::1;:16;::::0;;;;;:20;27335:109:::1;;-1:-1:-1::0;;;;;27415:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27395:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27376:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27335:109:::1;-1:-1:-1::0;;;;;27454:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27454:27:0::1;27477:4;27454:27:::0;;::::1;::::0;;;27492:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27492:23:0::1;::::0;;::::1;::::0;;27064:459::o;44660:343::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44754:31:0;::::1;44746:81;;;::::0;-1:-1:-1;;;44746:81:0;;8553:2:1;44746:81:0::1;::::0;::::1;8535:21:1::0;8592:2;8572:18;;;8565:30;8631:34;8611:18;;;8604:62;-1:-1:-1;;;8682:18:1;;;8675:35;8727:19;;44746:81:0::1;8351:401:1::0;44746:81:0::1;44838:16;:45:::0;;-1:-1:-1;;;;;;44838:45:0::1;-1:-1:-1::0;;;;;44838:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44894:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;44894:43:0::1;-1:-1:-1::0;44894:43:0::1;::::0;;44953:42;;1804:51:1;;;44953:42:0::1;::::0;1777:18:1;44953:42:0::1;1631:230:1::0;45305:848:0;45406:13;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45445:21:0;::::1;45437:61;;;::::0;-1:-1:-1;;;45437:61:0;;8959:2:1;45437:61:0::1;::::0;::::1;8941:21:1::0;8998:2;8978:18;;;8971:30;9037:29;9017:18;;;9010:57;9084:18;;45437:61:0::1;8757:351:1::0;45437:61:0::1;45509:35;45566:7;45509:65;;45613:16;-1:-1:-1::0;;;;;45613:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45595:53:0::1;;45671:4;45691:16;-1:-1:-1::0;;;;;45691:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45595:130;::::0;-1:-1:-1;;;;;;45595:130:0::1;::::0;;;;;;-1:-1:-1;;;;;9599:15:1;;;45595:130:0::1;::::0;::::1;9581:34:1::0;9651:15;;9631:18;;;9624:43;9516:18;;45595:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45587:138:::0;-1:-1:-1;;;;;;45740:19:0;::::1;45736:240;;45837:16;-1:-1:-1::0;;;;;45837:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45819:56:0::1;;45902:4;45926:16;-1:-1:-1::0;;;;;45926:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45819:145;::::0;-1:-1:-1;;;;;;45819:145:0::1;::::0;;;;;;-1:-1:-1;;;;;9599:15:1;;;45819:145:0::1;::::0;::::1;9581:34:1::0;9651:15;;9631:18;;;9624:43;9516:18;;45819:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45811:153;;45736:240;45986:13;:21:::0;;-1:-1:-1;;;;;45986:21:0;;::::1;-1:-1:-1::0;;;;;;45986:21:0;;::::1;;::::0;;;46073:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;46123:22:::1;::::0;;;::::1;::::0;::::1;::::0;45986:13:::1;::::0;46123:22:::1;45426:727;45305:848:::0;;;:::o;42710:148::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42784:20:0;::::1;42807:5;42784:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;42784:28:0::1;::::0;;42828:22;::::1;::::0;42807:5;42828:22:::1;42710:148:::0;:::o;22671:198::-;-1:-1:-1;;;;;22761:20:0;;22737:7;22761:20;;;:11;:20;;;;;;;;22757:49;;;-1:-1:-1;;;;;;22790:16:0;;;;;:7;:16;;;;;;;22671:198::o;22757:49::-;-1:-1:-1;;;;;22844:16:0;;;;;;:7;:16;;;;;;22824:37;;:19;:37::i;6726:150::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;6835:1:::1;6819:6:::0;;6798:40:::1;::::0;-1:-1:-1;;;;;6819:6:0;;::::1;::::0;6798:40:::1;::::0;6835:1;;6798:40:::1;6866:1;6849:19:::0;;-1:-1:-1;;;;;;6849:19:0::1;::::0;;6726:150::o;46256:488::-;46370:10;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46406:20:0;::::1;46398:59;;;::::0;-1:-1:-1;;;46398:59:0;;9880:2:1;46398:59:0::1;::::0;::::1;9862:21:1::0;9919:2;9899:18;;;9892:30;9958:28;9938:18;;;9931:56;10004:18;;46398:59:0::1;9678:350:1::0;46398:59:0::1;-1:-1:-1::0;;;;;46476:23:0;::::1;46494:4;46476:23;;46468:64;;;::::0;-1:-1:-1;;;46468:64:0;;10235:2:1;46468:64:0::1;::::0;::::1;10217:21:1::0;10274:2;10254:18;;;10247:30;10313;10293:18;;;10286:58;10361:18;;46468:64:0::1;10033:352:1::0;46468:64:0::1;46570:39;::::0;-1:-1:-1;;;46570:39:0;;46603:4:::1;46570:39;::::0;::::1;1804:51:1::0;46543:24:0::1;::::0;-1:-1:-1;;;;;46570:24:0;::::1;::::0;::::1;::::0;1777:18:1;;46570:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46628:46;::::0;-1:-1:-1;;;46628:46:0;;-1:-1:-1;;;;;10771:32:1;;;46628:46:0::1;::::0;::::1;10753:51:1::0;10820:18;;;10813:34;;;46543:66:0;;-1:-1:-1;46628:23:0;;::::1;::::0;::::1;::::0;10726:18:1;;46628:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46690;::::0;;-1:-1:-1;;;;;10771:32:1;;10753:51;;10835:2;10820:18;;10813:34;;;46620:54:0;;-1:-1:-1;46690:46:0::1;::::0;10726:18:1;46690:46:0::1;;;;;;;46387:357;46256:488:::0;;;;:::o;24968:224::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;25023:13:::1;:20:::0;;-1:-1:-1;;;;25054:28:0;-1:-1:-1;;;25054:28:0;;;25114:12:::1;25093:18;:33:::0;25158:26:::1;:15;25176:8;25158:26;:::i;:::-;25137:18;:47:::0;24968:224::o;42866:531::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;43030:10:::1;:22:::0;;;43063:16:::1;:34:::0;;;43108:16:::1;:34:::0;;;43153:14:::1;:30:::0;;;43271:3:::1;43170:13:::0;43127:15;43202:29:::1;43082:15:::0;43043:9;43202:29:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:72;;43194:110;;;::::0;-1:-1:-1;;;43194:110:0;;11310:2:1;43194:110:0::1;::::0;::::1;11292:21:1::0;11349:2;11329:18;;;11322:30;-1:-1:-1;;;11368:18:1;;;11361:55;11433:18;;43194:110:0::1;11108:349:1::0;43194:110:0::1;43320:69;::::0;;11693:25:1;;;11749:2;11734:18;;11727:34;;;11777:18;;;11770:34;;;11835:2;11820:18;;11813:34;;;43320:69:0::1;::::0;11680:3:1;11665:19;43320:69:0::1;;;;;;;;42866:531:::0;;;;:::o;45190:107::-;45249:7;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;45276:13:0::1;::::0;-1:-1:-1;;;;;45276:13:0::1;45190:107:::0;:::o;43968:343::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44062:31:0;::::1;44054:81;;;::::0;-1:-1:-1;;;44054:81:0;;12060:2:1;44054:81:0::1;::::0;::::1;12042:21:1::0;12099:2;12079:18;;;12072:30;12138:34;12118:18;;;12111:62;-1:-1:-1;;;12189:18:1;;;12182:35;12234:19;;44054:81:0::1;11858:401:1::0;44054:81:0::1;44146:16;:45:::0;;-1:-1:-1;;;;;;44146:45:0::1;-1:-1:-1::0;;;;;44146:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44202:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;44202:43:0::1;-1:-1:-1::0;44202:43:0::1;::::0;;44261:42;;1804:51:1;;;44261:42:0::1;::::0;1777:18:1;44261:42:0::1;1631:230:1::0;25338:246:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;25447:13:::1;::::0;-1:-1:-1;;;;;25439:21:0;;::::1;25447:13:::0;::::1;25439:21;;25431:91;;;::::0;-1:-1:-1;;;25431:91:0;;12466:2:1;25431:91:0::1;::::0;::::1;12448:21:1::0;12505:2;12485:18;;;12478:30;12544:34;12524:18;;;12517:62;12615:27;12595:18;;;12588:55;12660:19;;25431:91:0::1;12264:421:1::0;25431:91:0::1;25535:41;25564:4;25570:5;25535:28;:41::i;25823:109::-:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;25900:14:::1;:24:::0;;-1:-1:-1;;25900:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25823:109::o;24249:402::-;24371:4;24393:228;251:10;24443:7;24465:145;24522:15;24465:145;;;;;;;;;;;;;;;;;251:10;24465:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24465:34:0;;;;;;;;;;;;:38;:145::i;22877:201::-;22984:4;23006:42;251:10;23030:9;23041:6;23006:9;:42::i;44323:325::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44413:29:0;::::1;44405:77;;;::::0;-1:-1:-1;;;44405:77:0;;12892:2:1;44405:77:0::1;::::0;::::1;12874:21:1::0;12931:2;12911:18;;;12904:30;12970:34;12950:18;;;12943:62;-1:-1:-1;;;13021:18:1;;;13014:33;13064:19;;44405:77:0::1;12690:399:1::0;44405:77:0::1;44493:14;:41:::0;;-1:-1:-1;;;;;;44493:41:0::1;-1:-1:-1::0;;;;;44493:41:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44545:34:0;;;:18:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;44545:41:0::1;-1:-1:-1::0;44545:41:0::1;::::0;;44602:38;;1804:51:1;;;44602:38:0::1;::::0;1777:18:1;44602:38:0::1;1631:230:1::0;45011:171:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;45088:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;45088:32:0::1;-1:-1:-1::0;;;;45088:32:0;;::::1;;::::0;;45136:38:::1;::::0;::::1;::::0;::::1;::::0;45112:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;26090:141:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;26172:6:::1;26165:3;:13;;26157:22;;;::::0;::::1;;26210:13;::::0;26204:19:::1;::::0;:3;:19:::1;:::i;:::-;26190:11;:33:::0;-1:-1:-1;26090:141:0:o;43405:553::-;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;43574:11:::1;:24:::0;;;43609:17:::1;:36:::0;;;43656:17:::1;:36:::0;;;43703:15:::1;:32:::0;;;43827:3:::1;43721:14:::0;43676:16;43754:31:::1;43629:16:::0;43588:10;43754:31:::1;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;:76;;43746:114;;;::::0;-1:-1:-1;;;43746:114:0;;11310:2:1;43746:114:0::1;::::0;::::1;11292:21:1::0;11349:2;11329:18;;;11322:30;-1:-1:-1;;;11368:18:1;;;11361:55;11433:18;;43746:114:0::1;11108:349:1::0;43746:114:0::1;43876:74;::::0;;11693:25:1;;;11749:2;11734:18;;11727:34;;;11777:18;;;11770:34;;;11835:2;11820:18;;11813:34;;;43876:74:0::1;::::0;11680:3:1;11665:19;43876:74:0::1;11462:391:1::0;42549:149:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42618:27:0;::::1;42648:5;42618:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;42618:35:0::1;::::0;;42669:21;;1804:51:1;;;42669:21:0::1;::::0;1777:18:1;42669:21:0::1;1631:230:1::0;6884:283:0;6639:6;;-1:-1:-1;;;;;6639:6:0;251:10;6639:22;6631:67;;;;-1:-1:-1;;;6631:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6989:22:0;::::1;6967:110;;;::::0;-1:-1:-1;;;6967:110:0;;13296:2:1;6967:110:0::1;::::0;::::1;13278:21:1::0;13335:2;13315:18;;;13308:30;13374:34;13354:18;;;13347:62;-1:-1:-1;;;13425:18:1;;;13418:36;13471:19;;6967:110:0::1;13094:402:1::0;6967:110:0::1;7114:6;::::0;;7093:38:::1;::::0;-1:-1:-1;;;;;7093:38:0;;::::1;::::0;7114:6;::::1;::::0;7093:38:::1;::::0;::::1;7142:6;:17:::0;;-1:-1:-1;;;;;;7142:17:0::1;-1:-1:-1::0;;;;;7142:17:0;;;::::1;::::0;;;::::1;::::0;;6884:283::o;2169:132::-;2227:7;2254:39;2258:1;2261;2254:39;;;;;;;;;;;;;;;;;:3;:39::i;1533:136::-;1591:7;1618:43;1622:1;1625;1618:43;;;;;;;;;;;;;;;;;:3;:43::i;28011:371::-;-1:-1:-1;;;;;28138:19:0;;28130:68;;;;-1:-1:-1;;;28130:68:0;;13703:2:1;28130:68:0;;;13685:21:1;13742:2;13722:18;;;13715:30;13781:34;13761:18;;;13754:62;-1:-1:-1;;;13832:18:1;;;13825:34;13876:19;;28130:68:0;13501:400:1;28130:68:0;-1:-1:-1;;;;;28217:21:0;;28209:68;;;;-1:-1:-1;;;28209:68:0;;14108:2:1;28209:68:0;;;14090:21:1;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;-1:-1:-1;;;14237:18:1;;;14230:32;14279:19;;28209:68:0;13906:398:1;28209:68:0;-1:-1:-1;;;;;28290:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28342:32;;1595:25:1;;;28342:32:0;;1568:18:1;28342:32:0;;;;;;;28011:371;;;:::o;28390:3223::-;-1:-1:-1;;;;;28512:18:0;;28504:68;;;;-1:-1:-1;;;28504:68:0;;14511:2:1;28504:68:0;;;14493:21:1;14550:2;14530:18;;;14523:30;14589:34;14569:18;;;14562:62;-1:-1:-1;;;14640:18:1;;;14633:35;14685:19;;28504:68:0;14309:401:1;28504:68:0;-1:-1:-1;;;;;28591:16:0;;28583:64;;;;-1:-1:-1;;;28583:64:0;;14917:2:1;28583:64:0;;;14899:21:1;14956:2;14936:18;;;14929:30;14995:34;14975:18;;;14968:62;-1:-1:-1;;;15046:18:1;;;15039:33;15089:19;;28583:64:0;14715:399:1;28583:64:0;28675:1;28666:6;:10;28658:64;;;;-1:-1:-1;;;28658:64:0;;15321:2:1;28658:64:0;;;15303:21:1;15360:2;15340:18;;;15333:30;15399:34;15379:18;;;15372:62;-1:-1:-1;;;15450:18:1;;;15443:39;15499:19;;28658:64:0;15119:405:1;28658:64:0;28747:13;;-1:-1:-1;;;28747:13:0;;;;28743:134;;-1:-1:-1;;;;;28784:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;28812:22:0;;;;;;:18;:22;;;;;;;;28784:50;28776:89;;;;-1:-1:-1;;;28776:89:0;;15731:2:1;28776:89:0;;;15713:21:1;15770:2;15750:18;;;15743:30;15809:28;15789:18;;;15782:56;15855:18;;28776:89:0;15529:350:1;28776:89:0;6550:7;6577:6;-1:-1:-1;;;;;28900:15:0;;;6577:6;;28900:15;;;;:38;;-1:-1:-1;28925:13:0;;-1:-1:-1;;;;;28919:19:0;;;28925:13;;28919:19;;28900:38;:76;;;;;28958:18;;28942:12;:34;28900:76;28897:129;;;-1:-1:-1;;;;;28992:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;28992:22:0;29010:4;28992:22;;;28897:129;29115:14;;;;:49;;;;-1:-1:-1;;;;;;29133:31:0;;;;;;:25;:31;;;;;;;;29115:49;29111:307;;;29204:13;;29189:11;:28;;29181:65;;;;-1:-1:-1;;;29181:65:0;;16086:2:1;29181:65:0;;;16068:21:1;16125:2;16105:18;;;16098:30;16164:26;16144:18;;;16137:54;16208:18;;29181:65:0;15884:348:1;29181:65:0;29265:16;;-1:-1:-1;;;29265:16:0;;;;29264:17;:46;;;;-1:-1:-1;;;;;;29286:24:0;;;;;;:18;:24;;;;;;;;29285:25;29264:46;:73;;;;-1:-1:-1;;;;;;29315:22:0;;;;;;:18;:22;;;;;;;;29314:23;29264:73;29261:146;;;29379:11;;29366:9;:24;;29358:33;;;;;;29433:25;29511:20;;29486:22;;29461;;:47;;;;:::i;:::-;:70;;;;:::i;:::-;29433:98;;29542:28;29573:24;29591:4;29573:9;:24::i;:::-;29663:23;;29747:16;;29542:55;;-1:-1:-1;29639:47:0;;;;-1:-1:-1;;;29747:16:0;;;;29746:17;:55;;;;-1:-1:-1;29780:21:0;;-1:-1:-1;;;29780:21:0;;;;29746:55;:100;;;;-1:-1:-1;29828:13:0;;29845:1;;29818:24;;-1:-1:-1;;;;;29828:13:0;29818:9;:24::i;:::-;:28;29746:100;:138;;;;;29883:1;29863:17;:21;29746:138;:178;;;;-1:-1:-1;;;;;;29902:22:0;;;;;;:18;:22;;;;;;;;29901:23;29746:178;:220;;;;-1:-1:-1;;;;;;29942:24:0;;;;;;:18;:24;;;;;;;;29941:25;29746:220;:266;;;;-1:-1:-1;;;;;;29983:29:0;;;;;;:25;:29;;;;;;;;29746:266;:306;;;;;30029:23;29746:306;29728:373;;;30079:10;:8;:10::i;:::-;-1:-1:-1;;;;;30234:24:0;;30113:12;30234:24;;;:18;:24;;;;;;30128:4;;30234:24;;;:50;;-1:-1:-1;;;;;;30262:22:0;;;;;;:18;:22;;;;;;;;30234:50;30230:1304;;;-1:-1:-1;18016:1:0;30331:15;:26;30311:5;30230:1304;;;-1:-1:-1;;;;;30414:31:0;;;;;;:25;:31;;;;;;;;30410:1113;;;30467:14;:12;:14::i;:::-;30510:10;;30500:7;:20;30593:14;;30574:16;;30555;;:35;;30574:16;30555:35;:::i;:::-;:52;;;;:::i;:::-;30539:13;:68;;;30629:17;30626:85;;17932:1;30670:15;:21;30626:85;30410:1113;;;-1:-1:-1;;;;;30771:29:0;;;;;;:25;:29;;;;;;;;30767:756;;;30821:14;:12;:14::i;:::-;30864:11;;30854:7;:21;30950:15;;30930:17;;30910;;:37;;30930:17;30910:37;:::i;:::-;:55;;;;:::i;:::-;30894:13;:71;;;30987:17;30984:86;;17972:1;31028:15;:22;30984:86;-1:-1:-1;;;;;31181:17:0;;;;;;:11;:17;;;;;;;;:56;;;;;31225:12;31203:18;;:34;;31181:56;31178:180;;;31271:7;;:11;;31281:1;31271:11;:::i;:::-;31261:7;:21;31321:13;;:17;;31337:1;31321:17;:::i;:::-;31305:13;:33;30767:756;;;31448:14;:12;:14::i;:::-;18016:1;31481:15;:26;30767:756;31554:41;31569:4;31575:2;31579:6;31587:7;31554:14;:41::i;:::-;28493:3120;;;;28390:3223;;;:::o;1677:226::-;1797:7;1833:12;1825:6;;;;1817:29;;;;-1:-1:-1;;;1817:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1857:9:0;1869:5;1873:1;1869;:5;:::i;:::-;1857:17;1677:226;-1:-1:-1;;;;;1677:226:0:o;39807:164::-;39849:7;39870:15;39887;39906:19;:17;:19::i;:::-;39869:56;;-1:-1:-1;39869:56:0;-1:-1:-1;39943:20:0;39869:56;;39943:11;:20::i;:::-;39936:27;;;;39807:164;:::o;1344:181::-;1402:7;;1434:5;1438:1;1434;:5;:::i;:::-;1422:17;;1463:1;1458;:6;;1450:46;;;;-1:-1:-1;;;1450:46:0;;16439:2:1;1450:46:0;;;16421:21:1;16478:2;16458:18;;;16451:30;16517:29;16497:18;;;16490:57;16564:18;;1450:46:0;16237:351:1;38075:742:0;38175:7;38197;38219;38241;38263;38285;38335:23;38373:12;38400:18;38432:20;38444:7;38432:11;:20::i;:::-;38320:132;;;;;;38464:15;38481:23;38506:12;38522:113;38548:7;38570:4;38589:10;38614;:8;:10::i;:::-;38522:11;:113::i;:::-;38463:172;;;;-1:-1:-1;38463:172:0;;-1:-1:-1;38739:15:0;;-1:-1:-1;38769:4:0;;-1:-1:-1;38788:10:0;;-1:-1:-1;38075:742:0;;-1:-1:-1;;;;;38075:742:0:o;25592:219::-;-1:-1:-1;;;;;25675:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25675:39:0;;;;;;;;;;;;25725:35;;25735:23;25753:4;25735:17;:23::i;:::-;25774:5;25770:34;;25781:21;25797:4;25781:15;:21::i;2309:312::-;2429:7;2464:12;2457:5;2449:28;;;;-1:-1:-1;;;2449:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2488:9:0;2500:5;2504:1;2500;:5;:::i;31621:1845::-;21242:16;:23;;-1:-1:-1;;;;21242:23:0;-1:-1:-1;;;21242:23:0;;;;31698:24:::1;31716:4;31698:9;:24::i;:::-;31672:50;;31733:25;31761:76;31814:22;;31761:48;31788:20;;31761:22;;:26;;:48;;;;:::i;:::-;:52:::0;::::1;:76::i;:::-;31733:104;;31907:26;31936:29;31963:1;31936:22;;:26;;:29;;;;:::i;:::-;31907:58:::0;-1:-1:-1;31976:26:0::1;32005:39;:15:::0;31907:58;32005:19:::1;:39::i;:::-;31976:68:::0;-1:-1:-1;32093:21:0::1;32127:36;31976:68:::0;32127:16:::1;:36::i;:::-;32185:18;32206:44;:21;32232:17:::0;32206:25:::1;:44::i;:::-;32185:65;;32271:23;32297:61;32340:17;32297:38;32312:22;;32297:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;32271:87;;32369:21;32393:59;32434:17;32393:36;32408:20;;32393:10;:14;;:36;;;;:::i;:59::-;32369:83:::0;-1:-1:-1;32473:23:0::1;32499:50;32369:83:::0;32499:31:::1;:10:::0;32514:15;32499:14:::1;:31::i;:::-;:35:::0;::::1;:50::i;:::-;32473:76:::0;-1:-1:-1;32570:17:0::1;32613:3;32590:20;:15:::0;32608:2:::1;32590:20;:::i;:::-;:26;;;;:::i;:::-;32570:46:::0;-1:-1:-1;32627:28:0::1;32570:46:::0;32627:28;::::1;:::i;:::-;32701:1;32676:22;:26:::0;;;32713:22:::1;:26:::0;;;32750:20:::1;:24:::0;;;32821:14:::1;::::0;32813:54:::1;::::0;32627:28;;-1:-1:-1;32701:1:0;;-1:-1:-1;;;;;32821:14:0;;::::1;::::0;32849:13;;32701:1;32813:54;32701:1;32813:54;32849:13;32821:14;32813:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32899:16:0::1;::::0;32891:58:::1;::::0;32795:72;;-1:-1:-1;;;;;;32899:16:0::1;::::0;32929:15;;32891:58:::1;::::0;;;32929:15;32899:16;32891:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;32973:78:0::1;::::0;32878:71;;-1:-1:-1;32981:42:0::1;::::0;33037:9;;32973:78:::1;::::0;;;33037:9;32981:42;32973:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;32960:91:0;;-1:-1:-1;;33075:22:0;;;;;:45:::1;;;33119:1;33101:15;:19;33075:45;33072:216;;;33136:49;33149:18;33169:15;33136:12;:49::i;:::-;33205:71;::::0;;17227:25:1;;;17283:2;17268:18;;17261:34;;;17311:18;;;17304:34;;;33205:71:0::1;::::0;17215:2:1;17200:18;33205:71:0::1;;;;;;;33072:216;33402:16;::::0;33394:64:::1;::::0;-1:-1:-1;;;;;33402:16:0;;::::1;::::0;33432:21:::1;::::0;33394:64:::1;::::0;;;33432:21;33402:16;33394:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21288:16:0;:24;;-1:-1:-1;;;;21288:24:0;;;-1:-1:-1;;;;;;;;;;;;31621:1845:0:o;41879:235::-;41926:7;;:12;:34;;;;-1:-1:-1;41942:13:0;;:18;41926:34;41922:47;;;41879:235::o;41922:47::-;41999:7;;;41981:15;:25;42041:13;;;42017:21;:37;-1:-1:-1;42067:11:0;;;;42089:17;41879:235::o;34420:694::-;34576:7;34571:28;;34585:14;:12;:14::i;:::-;-1:-1:-1;;;;;34616:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34640:22:0;;;;;;:11;:22;;;;;;;;34639:23;34616:46;34612:467;;;34679:48;34701:6;34709:9;34720:6;34679:21;:48::i;:::-;34612:467;;;-1:-1:-1;;;;;34750:19:0;;;;;;:11;:19;;;;;;;;34749:20;:46;;;;-1:-1:-1;;;;;;34773:22:0;;;;;;:11;:22;;;;;;;;34749:46;34745:334;;;34812:46;34832:6;34840:9;34851:6;34812:19;:46::i;34745:334::-;-1:-1:-1;;;;;34880:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34903:22:0;;;;;;:11;:22;;;;;;;;34880:45;34876:203;;;34942:48;34964:6;34972:9;34983:6;34942:21;:48::i;34876:203::-;35023:44;35041:6;35049:9;35060:6;35023:17;:44::i;:::-;35091:15;42176;;42166:7;:25;42218:21;;42202:13;:37;42122:125;35091:15;34420:694;;;;:::o;39979:605::-;40077:7;;40030;;;;17642:16;40030:7;40131:338;40155:9;:16;40151:20;;40131:338;;;40239:7;40215;:21;40223:9;40233:1;40223:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40223:12:0;40215:21;;;;;;;;;;;;;:31;;:83;;;40291:7;40267;:21;40275:9;40285:1;40275:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40275:12:0;40267:21;;;;;;;;;;;;;:31;40215:83;40193:146;;;-1:-1:-1;;40322:7:0;;;17642:16;;-1:-1:-1;39979:605:0;-1:-1:-1;;39979:605:0:o;40193:146::-;40364:34;40376:7;:21;40384:9;40394:1;40384:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40384:12:0;40376:21;;;;;;;;;;;;;40364:7;;:11;:34::i;:::-;40354:44;;40423:34;40435:7;:21;40443:9;40453:1;40443:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40443:12:0;40435:21;;;;;;;;;;;;;40423:7;;:11;:34::i;:::-;40413:44;-1:-1:-1;40173:3:0;;;;:::i;:::-;;;;40131:338;;;-1:-1:-1;40493:7:0;;:20;;17642:16;40493:11;:20::i;:::-;40483:7;:30;40479:61;;;-1:-1:-1;;40523:7:0;;;17642:16;;-1:-1:-1;39979:605:0;-1:-1:-1;39979:605:0:o;40479:61::-;40559:7;;40568;;-1:-1:-1;39979:605:0;-1:-1:-1;39979:605:0:o;38825:412::-;38926:7;38948;38970;39005:12;39020:24;39036:7;39020:15;:24::i;:::-;39005:39;;39055:18;39076:30;39098:7;39076:21;:30::i;:::-;39055:51;-1:-1:-1;39117:23:0;39143:33;39055:51;39143:17;:7;39155:4;39143:11;:17::i;:33::-;39117:59;39212:4;;-1:-1:-1;39218:10:0;;-1:-1:-1;38825:412:0;;-1:-1:-1;;;38825:412:0:o;39245:554::-;39444:7;;;;39541:24;:7;39553:11;39541;:24::i;:::-;39523:42;-1:-1:-1;39576:12:0;39591:21;:4;39600:11;39591:8;:21::i;:::-;39576:36;-1:-1:-1;39623:18:0;39644:27;:10;39659:11;39644:14;:27::i;:::-;39623:48;-1:-1:-1;39682:23:0;39708:33;39623:48;39708:17;:7;39720:4;39708:11;:17::i;:33::-;39760:7;;;;-1:-1:-1;39786:4:0;;-1:-1:-1;39245:554:0;;-1:-1:-1;;;;;;;39245:554:0:o;33478:499::-;33568:16;;;33582:1;33568:16;;;;;;;;33544:21;;33568:16;;;;;;;;;;-1:-1:-1;33568:16:0;33544:40;;33613:4;33595;33600:1;33595:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33595:23:0;;;:7;;;;;;;;;;:23;;;;33639:15;;:22;;;-1:-1:-1;;;33639:22:0;;;;:15;;;;;:20;;:22;;;;;33595:7;;33639:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33629:4;33634:1;33629:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33629:32:0;;;:7;;;;;;;;;:32;33704:15;;33672:62;;33689:4;;33704:15;33722:11;33672:8;:62::i;:::-;33745:15;;:224;;-1:-1:-1;;;33745:224:0;;-1:-1:-1;;;;;33745:15:0;;;;:66;;:224;;33826:11;;33745:15;;33896:4;;33923;;33943:15;;33745:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33533:444;33478:499;:::o;1911:250::-;1969:7;1993:6;1989:47;;-1:-1:-1;2023:1:0;2016:8;;1989:47;2048:9;2060:5;2064:1;2060;:5;:::i;:::-;2048:17;-1:-1:-1;2093:1:0;2084:5;2088:1;2048:17;2084:5;:::i;:::-;:10;2076:56;;;;-1:-1:-1;;;2076:56:0;;18668:2:1;2076:56:0;;;18650:21:1;18707:2;18687:18;;;18680:30;18746:34;18726:18;;;18719:62;-1:-1:-1;;;18797:18:1;;;18790:31;18838:19;;2076:56:0;18466:397:1;33989:423:0;34102:15;;34070:62;;34087:4;;-1:-1:-1;;;;;34102:15:0;34120:11;34070:8;:62::i;:::-;34143:15;;34347:16;;34143:261;;-1:-1:-1;;;34143:261:0;;34215:4;34143:261;;;19217:34:1;19267:18;;;19260:34;;;34143:15:0;19310:18:1;;;19303:34;;;19353:18;;;19346:34;-1:-1:-1;;;;;34347:16:0;;;19396:19:1;;;19389:44;34378:15:0;19449:19:1;;;19442:35;34143:15:0;;;:31;;34182:9;;19151:19:1;;34143:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33989:423;;:::o;36461:686::-;36612:15;36642:23;36680:12;36707:23;36745:12;36772:18;36804:19;36815:7;36804:10;:19::i;:::-;-1:-1:-1;;;;;36852:15:0;;;;;;:7;:15;;;;;;36597:226;;-1:-1:-1;36597:226:0;;-1:-1:-1;36597:226:0;;-1:-1:-1;36597:226:0;-1:-1:-1;36597:226:0;-1:-1:-1;36597:226:0;-1:-1:-1;36852:28:0;;36872:7;36852:19;:28::i;:::-;-1:-1:-1;;;;;36834:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36909:7;:15;;;;:28;;36929:7;36909:19;:28::i;:::-;-1:-1:-1;;;;;36891:15:0;;;;;;;:7;:15;;;;;;:46;;;;36969:18;;;;;;;:39;;36992:15;36969:22;:39::i;:::-;-1:-1:-1;;;;;36948:18:0;;;;;;:7;:18;;;;;:60;37019:26;37034:10;37019:14;:26::i;:::-;37056:23;37068:4;37074;37056:11;:23::i;:::-;37112:9;-1:-1:-1;;;;;37095:44:0;37104:6;-1:-1:-1;;;;;37095:44:0;;37123:15;37095:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;37095:44:0;;;;;;;;36586:561;;;;;;36461:686;;;:::o;35755:698::-;35904:15;35934:23;35972:12;35999:23;36037:12;36064:18;36096:19;36107:7;36096:10;:19::i;:::-;-1:-1:-1;;;;;36144:15:0;;;;;;:7;:15;;;;;;35889:226;;-1:-1:-1;35889:226:0;;-1:-1:-1;35889:226:0;;-1:-1:-1;35889:226:0;-1:-1:-1;35889:226:0;-1:-1:-1;35889:226:0;-1:-1:-1;36144:28:0;;35889:226;36144:19;:28::i;:::-;-1:-1:-1;;;;;36126:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;36204:18;;;;;:7;:18;;;;;:39;;36227:15;36204:22;:39::i;:::-;-1:-1:-1;;;;;36183:18:0;;;;;;:7;:18;;;;;;;;:60;;;;36275:7;:18;;;;:39;;36298:15;36275:22;:39::i;37155:757::-;37306:15;37336:23;37374:12;37401:23;37439:12;37466:18;37498:19;37509:7;37498:10;:19::i;:::-;-1:-1:-1;;;;;37546:15:0;;;;;;:7;:15;;;;;;37291:226;;-1:-1:-1;37291:226:0;;-1:-1:-1;37291:226:0;;-1:-1:-1;37291:226:0;-1:-1:-1;37291:226:0;-1:-1:-1;37291:226:0;-1:-1:-1;37546:28:0;;37566:7;37546:19;:28::i;:::-;-1:-1:-1;;;;;37528:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37603:7;:15;;;;:28;;37623:7;37603:19;:28::i;35122:625::-;35269:15;35299:23;35337:12;35364:23;35402:12;35429:18;35461:19;35472:7;35461:10;:19::i;:::-;-1:-1:-1;;;;;35509:15:0;;;;;;:7;:15;;;;;;35254:226;;-1:-1:-1;35254:226:0;;-1:-1:-1;35254:226:0;;-1:-1:-1;35254:226:0;-1:-1:-1;35254:226:0;-1:-1:-1;35254:226:0;-1:-1:-1;35509:28:0;;35254:226;35509:19;:28::i;41559:130::-;41623:7;41650:31;41675:5;41650:20;41662:7;;41650;:11;;:20;;;;:::i;41697:174::-;41794:7;41826:37;41857:5;41826:26;41838:13;;41826:7;:11;;:26;;;;:::i;40592:959::-;17932:1;40658:15;;:22;40655:594;;;40754:13;;40735:16;;40722:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;40696:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;40836:13:0;;40819:14;;40806:27;;:10;:27;:::i;:::-;:43;;;;:::i;:::-;40782:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;40922:13:0;;40903:16;;40890:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;40864:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;40655:594:0;;-1:-1:-1;40655:594:0;;17972:1;40956:15;;:23;40953:296;;;41054:13;;41034:17;;41021:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;40995:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;41137:13:0;;41119:15;;41106:28;;:10;:28;:::i;:::-;:44;;;;:::i;:::-;41082:20;;:68;;;;;;;:::i;:::-;;;;-1:-1:-1;;41224:13:0;;41204:17;;41191:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;41165:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;40953:296:0;41259:19;41281:10;:8;:10::i;:::-;41259:32;-1:-1:-1;41302:18:0;41323:27;:10;41259:32;41323:14;:27::i;:::-;41402:4;41386:22;;;;:7;:22;;;;;;41302:48;;-1:-1:-1;41386:38:0;;41302:48;41386:26;:38::i;:::-;41377:4;41361:22;;;;:7;:22;;;;;;;;:63;;;;41439:11;:26;;;;;;41435:108;;;41521:4;41505:22;;;;:7;:22;;;;;;:38;;41532:10;41505:26;:38::i;:::-;41496:4;41480:22;;;;:7;:22;;;;;:63;41435:108;40644:907;;40592:959;:::o;37920:147::-;37998:7;;:17;;38010:4;37998:11;:17::i;:::-;37988:7;:27;38039:10;;:20;;38054:4;38039:14;:20::i;:::-;38026:10;:33;-1:-1:-1;;37920:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:315::-;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2948:247::-;3007:6;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3115:9;3102:23;3134:31;3159:5;3134:31;:::i;3200:118::-;3286:5;3279:13;3272:21;3265:5;3262:32;3252:60;;3308:1;3305;3298:12;3323:309;3388:6;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3501:9;3488:23;3478:33;;3561:2;3550:9;3546:18;3533:32;3574:28;3596:5;3574:28;:::i;:::-;3621:5;3611:15;;;3323:309;;;;;:::o;3637:388::-;3705:6;3713;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;3821:9;3808:23;3840:31;3865:5;3840:31;:::i;:::-;3890:5;-1:-1:-1;3947:2:1;3932:18;;3919:32;3960:33;3919:32;3960:33;:::i;4030:385::-;4116:6;4124;4132;4140;4193:3;4181:9;4172:7;4168:23;4164:33;4161:53;;;4210:1;4207;4200:12;4161:53;-1:-1:-1;;4233:23:1;;;4303:2;4288:18;;4275:32;;-1:-1:-1;4354:2:1;4339:18;;4326:32;;4405:2;4390:18;4377:32;;-1:-1:-1;4030:385:1;-1:-1:-1;4030:385:1:o;4420:382::-;4485:6;4493;4546:2;4534:9;4525:7;4521:23;4517:32;4514:52;;;4562:1;4559;4552:12;4514:52;4601:9;4588:23;4620:31;4645:5;4620:31;:::i;:::-;4670:5;-1:-1:-1;4727:2:1;4712:18;;4699:32;4740:30;4699:32;4740:30;:::i;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:356::-;5255:2;5237:21;;;5274:18;;;5267:30;5333:34;5328:2;5313:18;;5306:62;5400:2;5385:18;;5053:356::o;5414:127::-;5475:10;5470:3;5466:20;5463:1;5456:31;5506:4;5503:1;5496:15;5530:4;5527:1;5520:15;5546:168;5586:7;5652:1;5648;5644:6;5640:14;5637:1;5634:21;5629:1;5622:9;5615:17;5611:45;5608:71;;;5659:18;;:::i;:::-;-1:-1:-1;5699:9:1;;5546:168::o;6482:127::-;6543:10;6538:3;6534:20;6531:1;6524:31;6574:4;6571:1;6564:15;6598:4;6595:1;6588:15;6614:125;6654:4;6682:1;6679;6676:8;6673:34;;;6687:18;;:::i;:::-;-1:-1:-1;6724:9:1;;6614:125::o;6744:127::-;6805:10;6800:3;6796:20;6793:1;6786:31;6836:4;6833:1;6826:15;6860:4;6857:1;6850:15;6876:135;6915:3;-1:-1:-1;;6936:17:1;;6933:43;;;6956:18;;:::i;:::-;-1:-1:-1;7003:1:1;6992:13;;6876:135::o;7732:128::-;7772:3;7803:1;7799:6;7796:1;7793:13;7790:39;;;7809:18;;:::i;:::-;-1:-1:-1;7845:9:1;;7732:128::o;9113:251::-;9183:6;9236:2;9224:9;9215:7;9211:23;9207:32;9204:52;;;9252:1;9249;9242:12;9204:52;9284:9;9278:16;9303:31;9328:5;9303:31;:::i;10390:184::-;10460:6;10513:2;10501:9;10492:7;10488:23;10484:32;10481:52;;;10529:1;10526;10519:12;10481:52;-1:-1:-1;10552:16:1;;10390:184;-1:-1:-1;10390:184:1:o;10858:245::-;10925:6;10978:2;10966:9;10957:7;10953:23;10949:32;10946:52;;;10994:1;10991;10984:12;10946:52;11026:9;11020:16;11045:28;11067:5;11045:28;:::i;16593:217::-;16633:1;16659;16649:132;;16703:10;16698:3;16694:20;16691:1;16684:31;16738:4;16735:1;16728:15;16766:4;16763:1;16756:15;16649:132;-1:-1:-1;16795:9:1;;16593:217::o;17481:980::-;17743:4;17791:3;17780:9;17776:19;17822:6;17811:9;17804:25;17848:2;17886:6;17881:2;17870:9;17866:18;17859:34;17929:3;17924:2;17913:9;17909:18;17902:31;17953:6;17988;17982:13;18019:6;18011;18004:22;18057:3;18046:9;18042:19;18035:26;;18096:2;18088:6;18084:15;18070:29;;18117:1;18127:195;18141:6;18138:1;18135:13;18127:195;;;18206:13;;-1:-1:-1;;;;;18202:39:1;18190:52;;18297:15;;;;18262:12;;;;18238:1;18156:9;18127:195;;;-1:-1:-1;;;;;;;18378:32:1;;;;18373:2;18358:18;;18351:60;-1:-1:-1;;;18442:3:1;18427:19;18420:35;18339:3;17481:980;-1:-1:-1;;;17481:980:1:o;19488:306::-;19576:6;19584;19592;19645:2;19633:9;19624:7;19620:23;19616:32;19613:52;;;19661:1;19658;19651:12;19613:52;19690:9;19684:16;19674:26;;19740:2;19729:9;19725:18;19719:25;19709:35;;19784:2;19773:9;19769:18;19763:25;19753:35;;19488:306;;;;;:::o
Swarm Source
ipfs://d2d632d7b2051778598b9a234a1c529cea1634c80bde0217672bc47facff6b0a