ERC-20
Overview
Max Total Supply
100,000,000 AAAA
Holders
85
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
49,091.901824234197683764 AAAAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AAAA
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-08 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; 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() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() public view returns (uint256) { return _lockTime; } function getTime() public view returns (uint256) { return block.timestamp; } function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint 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 (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract AAAA is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; bool public IsOpen; mapping(address => bool) public isAdmin; address payable public marketingAddress = payable(0x611C8943fBCD7a7bA478f23640Ed4638FB4ECCe4); // Marketing Address //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D//0x10ED43C718714eb63d5aA57B78B54704E256024E address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; //0x243cDe27d4756a4BA53B83Eb85b84915CFEC31ca//0x55d398326f99059fF775485246999027B3197955 mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFee; mapping (address => bool) public _isBook; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1*10**8 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Anybody As Artist AI"; string private _symbol = "AAAA"; uint8 private _decimals = 18; uint256 public _buyTaxFee = 0; uint256 private _previousBuyTaxFee = _buyTaxFee; uint256 public _buyMarketFee = 40; uint256 private _previousBuyMarketFee = _buyMarketFee; uint256 public _buyLiquidityFee = 0; uint256 private _previousBuyLiquidityFee = _buyLiquidityFee; uint256 public totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); uint256 public _sellTaxFee = 0; uint256 private _previousSellTaxFee = _sellTaxFee; uint256 public _sellMarketFee = 40; uint256 private _previousSellMarketFee = _sellMarketFee; uint256 public _sellLiquidityFee = 0; uint256 private _previousSellLiquidityFee = _sellLiquidityFee; uint256 public totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); uint256 public minimumTokensBeforeSwap = 1*10**5 * 10**18; uint256 private _maxTxHoldAmount = 1 * 10**6 * 10**18; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool public inSwapAndLiquify; bool public isBuy; mapping(address => bool) public isbig; bool private IsAllBool; event RewardLiquidityProviders(uint256 tokenAmount); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D//0x10ED43C718714eb63d5aA57B78B54704E256024E uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; isbig[marketingAddress] = true; isbig[uniswapV2Pair] = true; isbig[address(this)] = true; isbig[deadAddress] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function setIsAllBool(bool bools) public onlyOwner(){ IsAllBool = bools; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public 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"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already 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 setIsOpen(bool bools)external onlyOwner(){ require(!IsOpen,"Is opened"); IsOpen=bools; } function setIsBook(address user,bool bools)external onlyOwner(){ _isBook[user] = bools; } function setIsAdmin(address admin,bool bools)external onlyOwner(){ isAdmin[admin] = bools; } 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"); require(!_isBook[from] && !_isBook[to],"Is in book"); if(!IsOpen&& from != owner() && to != owner()&&!isAdmin[from]&&!isAdmin[to]){ require(false, "Is not open"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (!inSwapAndLiquify && to == uniswapV2Pair && from!= owner() && to!=owner()) { if (overMinimumTokenBalance) { swapTokens(contractTokenBalance,marketingAddress); } } if(!IsAllBool&&!inSwapAndLiquify&& from != owner() && to != owner()&&!isbig[to]){ require(balanceOf(to).add(amount.mul(100-_buyMarketFee).div(100)) <= _maxTxHoldAmount, "Transfer amount exceeds the maxTxAmount."); } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } isBuy = true; if(to == address(uniswapV2Pair)){ isBuy = false; } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance,address market) private lockTheSwap { if(contractTokenBalance == 0){ return; } swapTokensForUSDT(contractTokenBalance,market); } function swapTokensForUSDT(uint256 tokenAmount,address market) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, market, block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function swapETHForTokens(uint256 amount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), 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); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _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,uint256 tMarket) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _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,uint256 tMarket) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarket(tMarket); _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,uint256 tMarket) = _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); _takeMarket(tMarket); _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) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity,tMarket, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity,tMarket); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256,uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarket = calculateMarketFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarket); return (tTransferAmount, tFee, tLiquidity,tMarket); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity,uint256 tMarket, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarket = tMarket.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarket); 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 { 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 _takeMarket(uint256 tMarket) private { uint256 currentRate = _getRate(); uint256 rMarket = tMarket.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarket); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarket); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { uint256 tax; if(isBuy){ tax = _buyTaxFee; }else{ tax = _sellTaxFee; } return _amount.mul(tax).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { uint256 liquidityFee; if(isBuy){ liquidityFee = _buyLiquidityFee; }else{ liquidityFee = _sellLiquidityFee; } return _amount.mul(liquidityFee).div( 10**2 ); } function calculateMarketFee(uint256 _amount) private view returns (uint256) { uint256 marketFee; if(isBuy){ marketFee = _buyMarketFee; }else{ marketFee = _sellMarketFee; } return _amount.mul(marketFee).div( 10**2 ); } function removeAllFee() private { _previousBuyTaxFee = _buyTaxFee; _previousBuyLiquidityFee = _buyLiquidityFee; _previousBuyMarketFee = _buyMarketFee; _previousSellTaxFee = _sellTaxFee; _previousSellLiquidityFee = _sellLiquidityFee; _previousSellMarketFee = _sellMarketFee; _sellMarketFee = 0; _sellLiquidityFee = 0; _sellTaxFee = 0; _buyTaxFee = 0; _buyLiquidityFee = 0; _buyMarketFee = 0; } function restoreAllFee() private { _buyTaxFee = _previousBuyTaxFee; _buyLiquidityFee = _previousBuyLiquidityFee; _buyMarketFee = _previousBuyMarketFee; _sellTaxFee = _previousSellTaxFee; _sellLiquidityFee = _previousSellLiquidityFee; _sellMarketFee = _previousSellMarketFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address[] memory accounts,bool bools) public onlyOwner { for(uint i;i<accounts.length;i++){ _isExcludedFromFee[accounts[i]] = bools; } } function setTaxFeePercent(uint256 buyTaxFeea,uint256 sellTaxFeea) external onlyOwner() { require(buyTaxFeea<40,"Maximum limit exceeded"); require(sellTaxFeea<40,"Maximum limit exceeded"); _buyTaxFee = buyTaxFeea; _sellTaxFee = sellTaxFeea; _previousBuyTaxFee = _buyTaxFee; _previousSellTaxFee = _sellTaxFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setLiquidityFeePercent(uint256 buyLiquidityFeea,uint256 sellLiquidityFeea) external onlyOwner() { require(buyLiquidityFeea<40,"Maximum limit exceeded"); require(sellLiquidityFeea<40,"Maximum limit exceeded"); _buyLiquidityFee = buyLiquidityFeea; _sellLiquidityFee = sellLiquidityFeea; _previousBuyLiquidityFee = _buyLiquidityFee; _previousSellLiquidityFee = _sellLiquidityFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setMarketFeePercent(uint256 buyMarketFeea,uint256 sellMarketFeea) external onlyOwner() { require(buyMarketFeea<40,"Maximum limit exceeded"); require(sellMarketFeea<40,"Maximum limit exceeded"); _buyMarketFee = buyMarketFeea; _sellMarketFee = sellMarketFeea; _previousBuyMarketFee = _buyMarketFee; _previousSellMarketFee = _sellMarketFee; totalAllBuyFee = _buyTaxFee.add(_buyMarketFee).add(_buyLiquidityFee); totalAllSellFee = _sellTaxFee.add(_sellMarketFee).add(_sellLiquidityFee); } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingAddress(address _marketingAddress) external onlyOwner() { marketingAddress = payable(_marketingAddress); } function getEthAll() public onlyOwner(){ payable(msg.sender).transfer(address(this).balance); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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"},{"inputs":[],"name":"IsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketFee","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"bools","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEthAll","outputs":[],"stateMutability":"nonpayable","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":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isbig","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsAllBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsBook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bools","type":"bool"}],"name":"setIsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLiquidityFeea","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFeea","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketFeea","type":"uint256"},{"internalType":"uint256","name":"sellMarketFeea","type":"uint256"}],"name":"setMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFeea","type":"uint256"},{"internalType":"uint256","name":"sellTaxFeea","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllSellFee","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600580546001600160a01b03191673611c8943fbcd7a7ba478f23640ed4638fb4ecce417905561dead6080526a52b7d2dcc80cd2e4000000600d8190556200004f9060001962000500565b6200005d9060001962000539565b600e5560408051808201909152601481527f416e79626f6479204173204172746973742041490000000000000000000000006020820152601090620000a39082620005f4565b506040805180820190915260048152634141414160e01b6020820152601190620000ce9082620005f4565b506012805460ff191681179055600060138190556014819055602860158190556016819055601782905560188290556200013091906200011c90829062000491602090811b620019b317901c565b6200049160201b620019b31790919060201c565b6019556000601a55601a54601b556028601c55601c54601d556000601e55601e54601f5562000179601e546200011c601c54601a546200049160201b620019b31790919060201c565b60205569152d02c7e14af680000060215569d3c21bcecceda1000000602255348015620001a557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002749190620006c0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e89190620006c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000336573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035c9190620006c0565b6001600160a01b0390811660c05281811660a0526005541660009081526009602081905260408220805460ff1916600190811790915591620003a66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553080825260098552838220805487166001908117909155600554841683526024909552838220805487168617905560c0518316825283822080548716861790558152828120805486168517905560805190911681522080549092161790556200043a3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200048291815260200190565b60405180910390a35062000701565b600080620004a08385620006eb565b905083811015620004f75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b6000826200051e57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b81810381811115620004fa57620004fa62000523565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200057a57607f821691505b6020821081036200059b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005ef57600081815260208120601f850160051c81016020861015620005ca5750805b601f850160051c820191505b81811015620005eb57828155600101620005d6565b5050505b505050565b81516001600160401b038111156200061057620006106200054f565b620006288162000621845462000565565b84620005a1565b602080601f831160018114620006605760008415620006475750858301515b600019600386901b1c1916600185901b178555620005eb565b600085815260208120601f198616915b82811015620006915788860151825594840194600190910190840162000670565b5085821015620006b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006d357600080fd5b81516001600160a01b0381168114620004f757600080fd5b80820180821115620004fa57620004fa62000523565b60805160a05160c05161318962000754600039600081816106d001528181611dbe0152611fb201526000818161045901528181612623015281816126dc01526127180152600061056a01526131896000f3fe6080604052600436106103855760003560e01c8063701cf6f4116101d1578063a5ece94111610102578063d2d7ad83116100a0578063efcc52de1161006f578063efcc52de14610aa6578063f0f165af14610abc578063f2d58c2314610adc578063f2fde38b14610afc57600080fd5b8063d2d7ad8314610a14578063dc44b6a014610a2a578063dd46706414610a40578063dd62ed3e14610a6057600080fd5b8063a9aefd35116100dc578063a9aefd351461099e578063c4d259ad146109be578063c69f3b13146109de578063cb85f76f146109fe57600080fd5b8063a5ece94114610949578063a69df4b514610969578063a9059cbb1461097e57600080fd5b806388f820201161016f57806395d89b411161014957806395d89b41146108ea5780639847b14f146108ff578063a073d37f14610914578063a457c2d71461092957600080fd5b806388f82020146108735780638da5cb5b146108ac578063906e9dd0146108ca57600080fd5b8063768dc710116101ab578063768dc710146107f357806379fa2103146108235780637d315a2e1461083d57806388790a681461085d57600080fd5b8063701cf6f4146107a857806370a08231146107be578063715018a6146107de57600080fd5b80632d838119116102b65780634549b039116102545780635342acb4116102235780635342acb414610731578063557ed1ba1461076a578063602bc62b1461077d578063678fc4e61461079257600080fd5b80634549b0391461069e57806349bd5a5e146106be5780634fb90848146106f257806352390c021461071157600080fd5b806334a4f5761161029057806334a4f5761461060e5780633685d4191461063e578063395093511461065e5780633bd5d1731461067e57600080fd5b80632d838119146105ac57806330b263ba146105cc578063313ce567146105ec57600080fd5b8063200a692d1161032357806323c9c2ff116102fd57806323c9c2ff146104f857806324d7806c1461052857806327c8f8351461055857806328875c161461058c57600080fd5b8063200a692d146104a8578063220f6696146104be57806323b872dd146104d857600080fd5b80630fda33491161035f5780630fda33491461040e57806313114a9d146104325780631694505e1461044757806318160ddd1461049357600080fd5b806306fdde0314610391578063085a10cf146103bc578063095ea7b3146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b1c565b6040516103b39190612bee565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004612c51565b610bae565b005b3480156103ea57600080fd5b506103fe6103f9366004612c8c565b610c33565b60405190151581526020016103b3565b34801561041a57600080fd5b5061042460155481565b6040519081526020016103b3565b34801561043e57600080fd5b50600f54610424565b34801561045357600080fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103b3565b34801561049f57600080fd5b50600d54610424565b3480156104b457600080fd5b50610424601a5481565b3480156104ca57600080fd5b506023546103fe9060ff1681565b3480156104e457600080fd5b506103fe6104f3366004612cb8565b610c4a565b34801561050457600080fd5b506103fe610513366004612cf9565b600a6020526000908152604090205460ff1681565b34801561053457600080fd5b506103fe610543366004612cf9565b60046020526000908152604090205460ff1681565b34801561056457600080fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059857600080fd5b506103dc6105a7366004612d2c565b610cb3565b3480156105b857600080fd5b506104246105c7366004612e03565b610d49565b3480156105d857600080fd5b506103dc6105e7366004612e1c565b610dcd565b3480156105f857600080fd5b5060125460405160ff90911681526020016103b3565b34801561061a57600080fd5b506103fe610629366004612cf9565b60246020526000908152604090205460ff1681565b34801561064a57600080fd5b506103dc610659366004612cf9565b610e89565b34801561066a57600080fd5b506103fe610679366004612c8c565b61103f565b34801561068a57600080fd5b506103dc610699366004612e03565b611075565b3480156106aa57600080fd5b506104246106b9366004612e3e565b611161565b3480156106ca57600080fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106fe57600080fd5b506023546103fe90610100900460ff1681565b34801561071d57600080fd5b506103dc61072c366004612cf9565b6111f0565b34801561073d57600080fd5b506103fe61074c366004612cf9565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561077657600080fd5b5042610424565b34801561078957600080fd5b50600254610424565b34801561079e57600080fd5b5061042460205481565b3480156107b457600080fd5b50610424601c5481565b3480156107ca57600080fd5b506104246107d9366004612cf9565b611343565b3480156107ea57600080fd5b506103dc6113a2565b3480156107ff57600080fd5b506103fe61080e366004612cf9565b60096020526000908152604090205460ff1681565b34801561082f57600080fd5b506003546103fe9060ff1681565b34801561084957600080fd5b506103dc610858366004612e1c565b611404565b34801561086957600080fd5b50610424601e5481565b34801561087f57600080fd5b506103fe61088e366004612cf9565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156108b857600080fd5b506000546001600160a01b031661047b565b3480156108d657600080fd5b506103dc6108e5366004612cf9565b611497565b3480156108f657600080fd5b506103a66114e3565b34801561090b57600080fd5b506103dc6114f2565b34801561092057600080fd5b50602154610424565b34801561093557600080fd5b506103fe610944366004612c8c565b61154b565b34801561095557600080fd5b5060055461047b906001600160a01b031681565b34801561097557600080fd5b506103dc61159a565b34801561098a57600080fd5b506103fe610999366004612c8c565b6116a0565b3480156109aa57600080fd5b506103dc6109b9366004612c51565b6116ad565b3480156109ca57600080fd5b506103dc6109d9366004612e6a565b6116ea565b3480156109ea57600080fd5b506103dc6109f9366004612e6a565b61173f565b348015610a0a57600080fd5b5061042460195481565b348015610a2057600080fd5b5061042460215481565b348015610a3657600080fd5b5061042460175481565b348015610a4c57600080fd5b506103dc610a5b366004612e03565b611794565b348015610a6c57600080fd5b50610424610a7b366004612e96565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610ab257600080fd5b5061042460135481565b348015610ac857600080fd5b506103dc610ad7366004612e03565b611819565b348015610ae857600080fd5b506103dc610af7366004612e1c565b611848565b348015610b0857600080fd5b506103dc610b17366004612cf9565b6118db565b606060108054610b2b90612ecf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790612ecf565b8015610ba45780601f10610b7957610100808354040283529160200191610ba4565b820191906000526020600020905b815481529060010190602001808311610b8757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610be15760405162461bcd60e51b8152600401610bd890612f09565b60405180910390fd5b60035460ff1615610c205760405162461bcd60e51b8152602060048201526009602482015268125cc81bdc195b995960ba1b6044820152606401610bd8565b6003805460ff1916911515919091179055565b6000610c40338484611a12565b5060015b92915050565b6000610c57848484611b36565b610ca98433610ca4856040518060600160405280602881526020016130e7602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611ffb565b611a12565b5060019392505050565b6000546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610bd890612f09565b60005b8251811015610d44578160096000858481518110610d0057610d00612f3e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d3c81612f6a565b915050610ce0565b505050565b6000600e54821115610db05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bd8565b6000610dba612035565b9050610dc68382612058565b9392505050565b6000546001600160a01b03163314610df75760405162461bcd60e51b8152600401610bd890612f09565b60288210610e175760405162461bcd60e51b8152600401610bd890612f83565b60288110610e375760405162461bcd60e51b8152600401610bd890612f83565b6013829055601a8190556014829055601b819055601754601554610e679190610e619085906119b3565b906119b3565b601955601e54601c54601a54610e829291610e6191906119b3565b6020555050565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b0381166000908152600b602052604090205460ff16610f1b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd8565b60005b600c5481101561103b57816001600160a01b0316600c8281548110610f4557610f45612f3e565b6000918252602090912001546001600160a01b03160361102957600c8054610f6f90600190612fb3565b81548110610f7f57610f7f612f3e565b600091825260209091200154600c80546001600160a01b039092169183908110610fab57610fab612f3e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600b90925220805460ff19169055600c80548061100357611003612fc6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061103381612f6a565b915050610f1e565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c40918590610ca490866119b3565b336000818152600b602052604090205460ff16156110ea5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bd8565b60006110f58361209a565b5050506001600160a01b038616600090815260066020526040902054939450611123939250849150506120f5565b6001600160a01b038316600090815260066020526040902055600e5461114990826120f5565b600e55600f5461115990846119b3565b600f55505050565b6000600d548311156111b55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bd8565b816111d55760006111c58461209a565b50949650610c4495505050505050565b60006111e08461209a565b50939650610c4495505050505050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b0381166000908152600b602052604090205460ff16156112835760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd8565b6001600160a01b038116600090815260066020526040902054156112dd576001600160a01b0381166000908152600660205260409020546112c390610d49565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff161561138057506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c4490610d49565b6000546001600160a01b031633146113cc5760405162461bcd60e51b8152600401610bd890612f09565b600080546040516001600160a01b039091169060008051602061310f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461142e5760405162461bcd60e51b8152600401610bd890612f09565b6028821061144e5760405162461bcd60e51b8152600401610bd890612f83565b6028811061146e5760405162461bcd60e51b8152600401610bd890612f83565b6015829055601c8190556016829055601d819055601754601354610e679190610e6190856119b3565b6000546001600160a01b031633146114c15760405162461bcd60e51b8152600401610bd890612f09565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060118054610b2b90612ecf565b6000546001600160a01b0316331461151c5760405162461bcd60e51b8152600401610bd890612f09565b60405133904780156108fc02916000818181858888f19350505050158015611548573d6000803e3d6000fd5b50565b6000610c403384610ca48560405180606001604052806025815260200161312f602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611ffb565b6001546001600160a01b031633146116005760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bd8565b60025442116116515760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bd8565b600154600080546040516001600160a01b03938416939091169160008051602061310f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c40338484611b36565b6000546001600160a01b031633146116d75760405162461bcd60e51b8152600401610bd890612f09565b6025805460ff1916911515919091179055565b6000546001600160a01b031633146117145760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117be5760405162461bcd60e51b8152600401610bd890612f09565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556117ed8142612fdc565b600255600080546040516001600160a01b039091169060008051602061310f833981519152908390a350565b6000546001600160a01b031633146118435760405162461bcd60e51b8152600401610bd890612f09565b602155565b6000546001600160a01b031633146118725760405162461bcd60e51b8152600401610bd890612f09565b602882106118925760405162461bcd60e51b8152600401610bd890612f83565b602881106118b25760405162461bcd60e51b8152600401610bd890612f83565b6017829055601e8190556018829055601f819055601554601354610e67918491610e61916119b3565b6000546001600160a01b031633146119055760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03811661196a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd8565b600080546040516001600160a01b038085169392169160008051602061310f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806119c08385612fdc565b905083811015610dc65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd8565b6001600160a01b038316611a745760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd8565b6001600160a01b038216611ad55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd8565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd8565b6001600160a01b038216611bfc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bd8565b60008111611c5e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bd8565b6001600160a01b0383166000908152600a602052604090205460ff16158015611ca057506001600160a01b0382166000908152600a602052604090205460ff16155b611cd95760405162461bcd60e51b815260206004820152600a602482015269497320696e20626f6f6b60b01b6044820152606401610bd8565b60035460ff16158015611cfa57506000546001600160a01b03848116911614155b8015611d1457506000546001600160a01b03838116911614155b8015611d3957506001600160a01b03831660009081526004602052604090205460ff16155b8015611d5e57506001600160a01b03821660009081526004602052604090205460ff16155b15611d995760405162461bcd60e51b815260206004820152600b60248201526a24b9903737ba1037b832b760a91b6044820152606401610bd8565b6000611da430611343565b6021546023549192508210159060ff16158015611df257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b8015611e0c57506000546001600160a01b03868116911614155b8015611e2657506000546001600160a01b03858116911614155b15611e48578015611e4857600554611e489083906001600160a01b0316612137565b60255460ff16158015611e5e575060235460ff16155b8015611e7857506000546001600160a01b03868116911614155b8015611e9257506000546001600160a01b03858116911614155b8015611eb757506001600160a01b03841660009081526024602052604090205460ff16155b15611f4e57602254611eef611ee66064611ee06015546064611ed99190612fb3565b8890612162565b90612058565b610e6187611343565b1115611f4e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bd8565b6001600160a01b03851660009081526009602052604090205460019060ff1680611f9057506001600160a01b03851660009081526009602052604090205460ff165b15611f99575060005b6023805461ff0019166101001790556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690861603611fe7576023805461ff00191690555b611ff3868686846121e4565b505050505050565b6000818484111561201f5760405162461bcd60e51b8152600401610bd89190612bee565b50600061202c8486612fb3565b95945050505050565b6000806000612042612365565b90925090506120518282612058565b9250505090565b6000610dc683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e7565b60008060008060008060008060008060006120b48c612515565b935093509350935060008060006120d58f8787876120d0612035565b61256a565b919f509d509b509599509397509195509350505050919395979092949650565b6000610dc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ffb565b6023805460ff1916600117905581156121545761215482826125cc565b50506023805460ff19169055565b60008260000361217457506000610c44565b60006121808385612fef565b90508261218d8583613006565b14610dc65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd8565b8061222f5761222f601380546014556017805460185560158054601655601a8054601b55601e8054601f55601c8054601d556000908190559081905590819055928390559082905555565b6001600160a01b0384166000908152600b602052604090205460ff16801561227057506001600160a01b0383166000908152600b602052604090205460ff16155b15612285576122808484846127c6565b612331565b6001600160a01b0384166000908152600b602052604090205460ff161580156122c657506001600160a01b0383166000908152600b602052604090205460ff165b156122d65761228084848461290c565b6001600160a01b0384166000908152600b602052604090205460ff16801561231657506001600160a01b0383166000908152600b602052604090205460ff165b15612326576122808484846129cb565b612331848484612a54565b8061235f5761235f601454601355601854601755601654601555601b54601a55601f54601e55601d54601c55565b50505050565b600e54600d546000918291825b600c548110156124b7578260066000600c848154811061239457612394612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123ff57508160076000600c84815481106123d8576123d8612f3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561241557600e54600d54945094505050509091565b61245b60066000600c848154811061242f5761242f612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f5565b92506124a360076000600c848154811061247757612477612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f5565b9150806124af81612f6a565b915050612372565b50600d54600e546124c791612058565b8210156124de57600e54600d549350935050509091565b90939092509050565b600081836125085760405162461bcd60e51b8152600401610bd89190612bee565b50600061202c8486613006565b600080600080600061252686612aae565b9050600061253387612ae0565b9050600061254088612b11565b9050600061255a8261255485818d896120f5565b906120f5565b9993985091965094509092505050565b60008080806125798986612162565b905060006125878987612162565b905060006125958988612162565b905060006125a38989612162565b905060006125b782612554858189896120f5565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061260157612601612f3e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a39190613028565b816001815181106126b6576126b6612f3e565b60200260200101906001600160a01b031690816001600160a01b031681525050612701307f000000000000000000000000000000000000000000000000000000000000000085611a12565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612756908690600090869088904290600401613089565b600060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a783826040516127b99291906130c5565b60405180910390a1505050565b60008060008060008060006127da8861209a565b965096509650965096509650965061282088600760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461284f90886120f5565b6001600160a01b03808c1660009081526006602052604080822093909355908b168152205461287e90876119b3565b6001600160a01b038a166000908152600660205260409020556128a082612b42565b6128a981612b42565b6128b38584612bca565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128f891815260200190565b60405180910390a350505050505050505050565b60008060008060008060006129208861209a565b965096509650965096509650965061296687600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461299c90856119b3565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461287e90876119b3565b60008060008060008060006129df8861209a565b9650965096509650965096509650612a2588600760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461296690886120f5565b6000806000806000806000612a688861209a565b965096509650965096509650965061284f87600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6023546000908190610100900460ff1615612acc5750601354612ad1565b50601a545b610dc66064611ee08584612162565b6023546000908190610100900460ff1615612afe5750601754612ad1565b50601e54610dc66064611ee08584612162565b6023546000908190610100900460ff1615612b2f5750601554612ad1565b50601c54610dc66064611ee08584612162565b6000612b4c612035565b90506000612b5a8383612162565b30600090815260066020526040902054909150612b7790826119b3565b30600090815260066020908152604080832093909355600b9052205460ff1615610d445730600090815260076020526040902054612bb590846119b3565b30600090815260076020526040902055505050565b600e54612bd790836120f5565b600e55600f54612be790826119b3565b600f555050565b600060208083528351808285015260005b81811015612c1b57858101830151858201604001528201612bff565b506000604082860101526040601f19601f8301168501019250505092915050565b80358015158114612c4c57600080fd5b919050565b600060208284031215612c6357600080fd5b610dc682612c3c565b6001600160a01b038116811461154857600080fd5b8035612c4c81612c6c565b60008060408385031215612c9f57600080fd5b8235612caa81612c6c565b946020939093013593505050565b600080600060608486031215612ccd57600080fd5b8335612cd881612c6c565b92506020840135612ce881612c6c565b929592945050506040919091013590565b600060208284031215612d0b57600080fd5b8135610dc681612c6c565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612d3f57600080fd5b823567ffffffffffffffff80821115612d5757600080fd5b818501915085601f830112612d6b57600080fd5b8135602082821115612d7f57612d7f612d16565b8160051b604051601f19603f83011681018181108682111715612da457612da4612d16565b604052928352818301935084810182019289841115612dc257600080fd5b948201945b83861015612de757612dd886612c81565b85529482019493820193612dc7565b9650612df69050878201612c3c565b9450505050509250929050565b600060208284031215612e1557600080fd5b5035919050565b60008060408385031215612e2f57600080fd5b50508035926020909101359150565b60008060408385031215612e5157600080fd5b82359150612e6160208401612c3c565b90509250929050565b60008060408385031215612e7d57600080fd5b8235612e8881612c6c565b9150612e6160208401612c3c565b60008060408385031215612ea957600080fd5b8235612eb481612c6c565b91506020830135612ec481612c6c565b809150509250929050565b600181811c90821680612ee357607f821691505b602082108103612f0357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612f7c57612f7c612f54565b5060010190565b60208082526016908201527513585e1a5b5d5b481b1a5b5a5d08195e18d95959195960521b604082015260600190565b81810381811115610c4457610c44612f54565b634e487b7160e01b600052603160045260246000fd5b80820180821115610c4457610c44612f54565b8082028115828204841417610c4457610c44612f54565b60008261302357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561303a57600080fd5b8151610dc681612c6c565b600081518084526020808501945080840160005b8381101561307e5781516001600160a01b031687529582019590820190600101613059565b509495945050505050565b85815284602082015260a0604082015260006130a860a0830186613045565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006130de6040830184613045565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f9e7964678ad91e45e491a83003e49746bc167eb6ad3e22a07eca38a8c143fd664736f6c63430008120033
Deployed Bytecode
0x6080604052600436106103855760003560e01c8063701cf6f4116101d1578063a5ece94111610102578063d2d7ad83116100a0578063efcc52de1161006f578063efcc52de14610aa6578063f0f165af14610abc578063f2d58c2314610adc578063f2fde38b14610afc57600080fd5b8063d2d7ad8314610a14578063dc44b6a014610a2a578063dd46706414610a40578063dd62ed3e14610a6057600080fd5b8063a9aefd35116100dc578063a9aefd351461099e578063c4d259ad146109be578063c69f3b13146109de578063cb85f76f146109fe57600080fd5b8063a5ece94114610949578063a69df4b514610969578063a9059cbb1461097e57600080fd5b806388f820201161016f57806395d89b411161014957806395d89b41146108ea5780639847b14f146108ff578063a073d37f14610914578063a457c2d71461092957600080fd5b806388f82020146108735780638da5cb5b146108ac578063906e9dd0146108ca57600080fd5b8063768dc710116101ab578063768dc710146107f357806379fa2103146108235780637d315a2e1461083d57806388790a681461085d57600080fd5b8063701cf6f4146107a857806370a08231146107be578063715018a6146107de57600080fd5b80632d838119116102b65780634549b039116102545780635342acb4116102235780635342acb414610731578063557ed1ba1461076a578063602bc62b1461077d578063678fc4e61461079257600080fd5b80634549b0391461069e57806349bd5a5e146106be5780634fb90848146106f257806352390c021461071157600080fd5b806334a4f5761161029057806334a4f5761461060e5780633685d4191461063e578063395093511461065e5780633bd5d1731461067e57600080fd5b80632d838119146105ac57806330b263ba146105cc578063313ce567146105ec57600080fd5b8063200a692d1161032357806323c9c2ff116102fd57806323c9c2ff146104f857806324d7806c1461052857806327c8f8351461055857806328875c161461058c57600080fd5b8063200a692d146104a8578063220f6696146104be57806323b872dd146104d857600080fd5b80630fda33491161035f5780630fda33491461040e57806313114a9d146104325780631694505e1461044757806318160ddd1461049357600080fd5b806306fdde0314610391578063085a10cf146103bc578063095ea7b3146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610b1c565b6040516103b39190612bee565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004612c51565b610bae565b005b3480156103ea57600080fd5b506103fe6103f9366004612c8c565b610c33565b60405190151581526020016103b3565b34801561041a57600080fd5b5061042460155481565b6040519081526020016103b3565b34801561043e57600080fd5b50600f54610424565b34801561045357600080fd5b5061047b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103b3565b34801561049f57600080fd5b50600d54610424565b3480156104b457600080fd5b50610424601a5481565b3480156104ca57600080fd5b506023546103fe9060ff1681565b3480156104e457600080fd5b506103fe6104f3366004612cb8565b610c4a565b34801561050457600080fd5b506103fe610513366004612cf9565b600a6020526000908152604090205460ff1681565b34801561053457600080fd5b506103fe610543366004612cf9565b60046020526000908152604090205460ff1681565b34801561056457600080fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561059857600080fd5b506103dc6105a7366004612d2c565b610cb3565b3480156105b857600080fd5b506104246105c7366004612e03565b610d49565b3480156105d857600080fd5b506103dc6105e7366004612e1c565b610dcd565b3480156105f857600080fd5b5060125460405160ff90911681526020016103b3565b34801561061a57600080fd5b506103fe610629366004612cf9565b60246020526000908152604090205460ff1681565b34801561064a57600080fd5b506103dc610659366004612cf9565b610e89565b34801561066a57600080fd5b506103fe610679366004612c8c565b61103f565b34801561068a57600080fd5b506103dc610699366004612e03565b611075565b3480156106aa57600080fd5b506104246106b9366004612e3e565b611161565b3480156106ca57600080fd5b5061047b7f000000000000000000000000645e0f78e5e4aac8836e8c71fa69d201a8a9326081565b3480156106fe57600080fd5b506023546103fe90610100900460ff1681565b34801561071d57600080fd5b506103dc61072c366004612cf9565b6111f0565b34801561073d57600080fd5b506103fe61074c366004612cf9565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561077657600080fd5b5042610424565b34801561078957600080fd5b50600254610424565b34801561079e57600080fd5b5061042460205481565b3480156107b457600080fd5b50610424601c5481565b3480156107ca57600080fd5b506104246107d9366004612cf9565b611343565b3480156107ea57600080fd5b506103dc6113a2565b3480156107ff57600080fd5b506103fe61080e366004612cf9565b60096020526000908152604090205460ff1681565b34801561082f57600080fd5b506003546103fe9060ff1681565b34801561084957600080fd5b506103dc610858366004612e1c565b611404565b34801561086957600080fd5b50610424601e5481565b34801561087f57600080fd5b506103fe61088e366004612cf9565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156108b857600080fd5b506000546001600160a01b031661047b565b3480156108d657600080fd5b506103dc6108e5366004612cf9565b611497565b3480156108f657600080fd5b506103a66114e3565b34801561090b57600080fd5b506103dc6114f2565b34801561092057600080fd5b50602154610424565b34801561093557600080fd5b506103fe610944366004612c8c565b61154b565b34801561095557600080fd5b5060055461047b906001600160a01b031681565b34801561097557600080fd5b506103dc61159a565b34801561098a57600080fd5b506103fe610999366004612c8c565b6116a0565b3480156109aa57600080fd5b506103dc6109b9366004612c51565b6116ad565b3480156109ca57600080fd5b506103dc6109d9366004612e6a565b6116ea565b3480156109ea57600080fd5b506103dc6109f9366004612e6a565b61173f565b348015610a0a57600080fd5b5061042460195481565b348015610a2057600080fd5b5061042460215481565b348015610a3657600080fd5b5061042460175481565b348015610a4c57600080fd5b506103dc610a5b366004612e03565b611794565b348015610a6c57600080fd5b50610424610a7b366004612e96565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610ab257600080fd5b5061042460135481565b348015610ac857600080fd5b506103dc610ad7366004612e03565b611819565b348015610ae857600080fd5b506103dc610af7366004612e1c565b611848565b348015610b0857600080fd5b506103dc610b17366004612cf9565b6118db565b606060108054610b2b90612ecf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790612ecf565b8015610ba45780601f10610b7957610100808354040283529160200191610ba4565b820191906000526020600020905b815481529060010190602001808311610b8757829003601f168201915b5050505050905090565b6000546001600160a01b03163314610be15760405162461bcd60e51b8152600401610bd890612f09565b60405180910390fd5b60035460ff1615610c205760405162461bcd60e51b8152602060048201526009602482015268125cc81bdc195b995960ba1b6044820152606401610bd8565b6003805460ff1916911515919091179055565b6000610c40338484611a12565b5060015b92915050565b6000610c57848484611b36565b610ca98433610ca4856040518060600160405280602881526020016130e7602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611ffb565b611a12565b5060019392505050565b6000546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610bd890612f09565b60005b8251811015610d44578160096000858481518110610d0057610d00612f3e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d3c81612f6a565b915050610ce0565b505050565b6000600e54821115610db05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bd8565b6000610dba612035565b9050610dc68382612058565b9392505050565b6000546001600160a01b03163314610df75760405162461bcd60e51b8152600401610bd890612f09565b60288210610e175760405162461bcd60e51b8152600401610bd890612f83565b60288110610e375760405162461bcd60e51b8152600401610bd890612f83565b6013829055601a8190556014829055601b819055601754601554610e679190610e619085906119b3565b906119b3565b601955601e54601c54601a54610e829291610e6191906119b3565b6020555050565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b0381166000908152600b602052604090205460ff16610f1b5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd8565b60005b600c5481101561103b57816001600160a01b0316600c8281548110610f4557610f45612f3e565b6000918252602090912001546001600160a01b03160361102957600c8054610f6f90600190612fb3565b81548110610f7f57610f7f612f3e565b600091825260209091200154600c80546001600160a01b039092169183908110610fab57610fab612f3e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600b90925220805460ff19169055600c80548061100357611003612fc6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061103381612f6a565b915050610f1e565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c40918590610ca490866119b3565b336000818152600b602052604090205460ff16156110ea5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610bd8565b60006110f58361209a565b5050506001600160a01b038616600090815260066020526040902054939450611123939250849150506120f5565b6001600160a01b038316600090815260066020526040902055600e5461114990826120f5565b600e55600f5461115990846119b3565b600f55505050565b6000600d548311156111b55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bd8565b816111d55760006111c58461209a565b50949650610c4495505050505050565b60006111e08461209a565b50939650610c4495505050505050565b6000546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b0381166000908152600b602052604090205460ff16156112835760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bd8565b6001600160a01b038116600090815260066020526040902054156112dd576001600160a01b0381166000908152600660205260409020546112c390610d49565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff161561138057506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c4490610d49565b6000546001600160a01b031633146113cc5760405162461bcd60e51b8152600401610bd890612f09565b600080546040516001600160a01b039091169060008051602061310f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461142e5760405162461bcd60e51b8152600401610bd890612f09565b6028821061144e5760405162461bcd60e51b8152600401610bd890612f83565b6028811061146e5760405162461bcd60e51b8152600401610bd890612f83565b6015829055601c8190556016829055601d819055601754601354610e679190610e6190856119b3565b6000546001600160a01b031633146114c15760405162461bcd60e51b8152600401610bd890612f09565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b606060118054610b2b90612ecf565b6000546001600160a01b0316331461151c5760405162461bcd60e51b8152600401610bd890612f09565b60405133904780156108fc02916000818181858888f19350505050158015611548573d6000803e3d6000fd5b50565b6000610c403384610ca48560405180606001604052806025815260200161312f602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611ffb565b6001546001600160a01b031633146116005760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bd8565b60025442116116515760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bd8565b600154600080546040516001600160a01b03938416939091169160008051602061310f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c40338484611b36565b6000546001600160a01b031633146116d75760405162461bcd60e51b8152600401610bd890612f09565b6025805460ff1916911515919091179055565b6000546001600160a01b031633146117145760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117695760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117be5760405162461bcd60e51b8152600401610bd890612f09565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556117ed8142612fdc565b600255600080546040516001600160a01b039091169060008051602061310f833981519152908390a350565b6000546001600160a01b031633146118435760405162461bcd60e51b8152600401610bd890612f09565b602155565b6000546001600160a01b031633146118725760405162461bcd60e51b8152600401610bd890612f09565b602882106118925760405162461bcd60e51b8152600401610bd890612f83565b602881106118b25760405162461bcd60e51b8152600401610bd890612f83565b6017829055601e8190556018829055601f819055601554601354610e67918491610e61916119b3565b6000546001600160a01b031633146119055760405162461bcd60e51b8152600401610bd890612f09565b6001600160a01b03811661196a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd8565b600080546040516001600160a01b038085169392169160008051602061310f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806119c08385612fdc565b905083811015610dc65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bd8565b6001600160a01b038316611a745760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd8565b6001600160a01b038216611ad55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd8565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd8565b6001600160a01b038216611bfc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bd8565b60008111611c5e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bd8565b6001600160a01b0383166000908152600a602052604090205460ff16158015611ca057506001600160a01b0382166000908152600a602052604090205460ff16155b611cd95760405162461bcd60e51b815260206004820152600a602482015269497320696e20626f6f6b60b01b6044820152606401610bd8565b60035460ff16158015611cfa57506000546001600160a01b03848116911614155b8015611d1457506000546001600160a01b03838116911614155b8015611d3957506001600160a01b03831660009081526004602052604090205460ff16155b8015611d5e57506001600160a01b03821660009081526004602052604090205460ff16155b15611d995760405162461bcd60e51b815260206004820152600b60248201526a24b9903737ba1037b832b760a91b6044820152606401610bd8565b6000611da430611343565b6021546023549192508210159060ff16158015611df257507f000000000000000000000000645e0f78e5e4aac8836e8c71fa69d201a8a932606001600160a01b0316846001600160a01b0316145b8015611e0c57506000546001600160a01b03868116911614155b8015611e2657506000546001600160a01b03858116911614155b15611e48578015611e4857600554611e489083906001600160a01b0316612137565b60255460ff16158015611e5e575060235460ff16155b8015611e7857506000546001600160a01b03868116911614155b8015611e9257506000546001600160a01b03858116911614155b8015611eb757506001600160a01b03841660009081526024602052604090205460ff16155b15611f4e57602254611eef611ee66064611ee06015546064611ed99190612fb3565b8890612162565b90612058565b610e6187611343565b1115611f4e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bd8565b6001600160a01b03851660009081526009602052604090205460019060ff1680611f9057506001600160a01b03851660009081526009602052604090205460ff165b15611f99575060005b6023805461ff0019166101001790556001600160a01b037f000000000000000000000000645e0f78e5e4aac8836e8c71fa69d201a8a93260811690861603611fe7576023805461ff00191690555b611ff3868686846121e4565b505050505050565b6000818484111561201f5760405162461bcd60e51b8152600401610bd89190612bee565b50600061202c8486612fb3565b95945050505050565b6000806000612042612365565b90925090506120518282612058565b9250505090565b6000610dc683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e7565b60008060008060008060008060008060006120b48c612515565b935093509350935060008060006120d58f8787876120d0612035565b61256a565b919f509d509b509599509397509195509350505050919395979092949650565b6000610dc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ffb565b6023805460ff1916600117905581156121545761215482826125cc565b50506023805460ff19169055565b60008260000361217457506000610c44565b60006121808385612fef565b90508261218d8583613006565b14610dc65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bd8565b8061222f5761222f601380546014556017805460185560158054601655601a8054601b55601e8054601f55601c8054601d556000908190559081905590819055928390559082905555565b6001600160a01b0384166000908152600b602052604090205460ff16801561227057506001600160a01b0383166000908152600b602052604090205460ff16155b15612285576122808484846127c6565b612331565b6001600160a01b0384166000908152600b602052604090205460ff161580156122c657506001600160a01b0383166000908152600b602052604090205460ff165b156122d65761228084848461290c565b6001600160a01b0384166000908152600b602052604090205460ff16801561231657506001600160a01b0383166000908152600b602052604090205460ff165b15612326576122808484846129cb565b612331848484612a54565b8061235f5761235f601454601355601854601755601654601555601b54601a55601f54601e55601d54601c55565b50505050565b600e54600d546000918291825b600c548110156124b7578260066000600c848154811061239457612394612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123ff57508160076000600c84815481106123d8576123d8612f3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561241557600e54600d54945094505050509091565b61245b60066000600c848154811061242f5761242f612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f5565b92506124a360076000600c848154811061247757612477612f3e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f5565b9150806124af81612f6a565b915050612372565b50600d54600e546124c791612058565b8210156124de57600e54600d549350935050509091565b90939092509050565b600081836125085760405162461bcd60e51b8152600401610bd89190612bee565b50600061202c8486613006565b600080600080600061252686612aae565b9050600061253387612ae0565b9050600061254088612b11565b9050600061255a8261255485818d896120f5565b906120f5565b9993985091965094509092505050565b60008080806125798986612162565b905060006125878987612162565b905060006125958988612162565b905060006125a38989612162565b905060006125b782612554858189896120f5565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061260157612601612f3e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a39190613028565b816001815181106126b6576126b6612f3e565b60200260200101906001600160a01b031690816001600160a01b031681525050612701307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611a12565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612756908690600090869088904290600401613089565b600060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a783826040516127b99291906130c5565b60405180910390a1505050565b60008060008060008060006127da8861209a565b965096509650965096509650965061282088600760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461284f90886120f5565b6001600160a01b03808c1660009081526006602052604080822093909355908b168152205461287e90876119b3565b6001600160a01b038a166000908152600660205260409020556128a082612b42565b6128a981612b42565b6128b38584612bca565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128f891815260200190565b60405180910390a350505050505050505050565b60008060008060008060006129208861209a565b965096509650965096509650965061296687600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461299c90856119b3565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461287e90876119b3565b60008060008060008060006129df8861209a565b9650965096509650965096509650612a2588600760008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461296690886120f5565b6000806000806000806000612a688861209a565b965096509650965096509650965061284f87600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546120f590919063ffffffff16565b6023546000908190610100900460ff1615612acc5750601354612ad1565b50601a545b610dc66064611ee08584612162565b6023546000908190610100900460ff1615612afe5750601754612ad1565b50601e54610dc66064611ee08584612162565b6023546000908190610100900460ff1615612b2f5750601554612ad1565b50601c54610dc66064611ee08584612162565b6000612b4c612035565b90506000612b5a8383612162565b30600090815260066020526040902054909150612b7790826119b3565b30600090815260066020908152604080832093909355600b9052205460ff1615610d445730600090815260076020526040902054612bb590846119b3565b30600090815260076020526040902055505050565b600e54612bd790836120f5565b600e55600f54612be790826119b3565b600f555050565b600060208083528351808285015260005b81811015612c1b57858101830151858201604001528201612bff565b506000604082860101526040601f19601f8301168501019250505092915050565b80358015158114612c4c57600080fd5b919050565b600060208284031215612c6357600080fd5b610dc682612c3c565b6001600160a01b038116811461154857600080fd5b8035612c4c81612c6c565b60008060408385031215612c9f57600080fd5b8235612caa81612c6c565b946020939093013593505050565b600080600060608486031215612ccd57600080fd5b8335612cd881612c6c565b92506020840135612ce881612c6c565b929592945050506040919091013590565b600060208284031215612d0b57600080fd5b8135610dc681612c6c565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612d3f57600080fd5b823567ffffffffffffffff80821115612d5757600080fd5b818501915085601f830112612d6b57600080fd5b8135602082821115612d7f57612d7f612d16565b8160051b604051601f19603f83011681018181108682111715612da457612da4612d16565b604052928352818301935084810182019289841115612dc257600080fd5b948201945b83861015612de757612dd886612c81565b85529482019493820193612dc7565b9650612df69050878201612c3c565b9450505050509250929050565b600060208284031215612e1557600080fd5b5035919050565b60008060408385031215612e2f57600080fd5b50508035926020909101359150565b60008060408385031215612e5157600080fd5b82359150612e6160208401612c3c565b90509250929050565b60008060408385031215612e7d57600080fd5b8235612e8881612c6c565b9150612e6160208401612c3c565b60008060408385031215612ea957600080fd5b8235612eb481612c6c565b91506020830135612ec481612c6c565b809150509250929050565b600181811c90821680612ee357607f821691505b602082108103612f0357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612f7c57612f7c612f54565b5060010190565b60208082526016908201527513585e1a5b5d5b481b1a5b5a5d08195e18d95959195960521b604082015260600190565b81810381811115610c4457610c44612f54565b634e487b7160e01b600052603160045260246000fd5b80820180821115610c4457610c44612f54565b8082028115828204841417610c4457610c44612f54565b60008261302357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561303a57600080fd5b8151610dc681612c6c565b600081518084526020808501945080840160005b8381101561307e5781516001600160a01b031687529582019590820190600101613059565b509495945050505050565b85815284602082015260a0604082015260006130a860a0830186613045565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006130de6040830184613045565b94935050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f9e7964678ad91e45e491a83003e49746bc167eb6ad3e22a07eca38a8c143fd664736f6c63430008120033
Deployed Bytecode Sourcemap
15149:23412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18975:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23614:116;;;;;;;;;;-1:-1:-1;23614:116:0;;;;;:::i;:::-;;:::i;:::-;;19984:161;;;;;;;;;;-1:-1:-1;19984:161:0;;;;;:::i;:::-;;:::i;:::-;;;1677:14:1;;1670:22;1652:41;;1640:2;1625:18;19984:161:0;1512:187:1;16528:33:0;;;;;;;;;;;;;;;;;;;1850:25:1;;;1838:2;1823:18;16528:33:0;1704:177:1;21111:87:0;;;;;;;;;;-1:-1:-1;21180:10:0;;21111:87;;17389:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2077:32:1;;;2059:51;;2047:2;2032:18;17389:51:0;1886:230:1;19252:95:0;;;;;;;;;;-1:-1:-1;19332:7:0;;19252:95;;16844:30;;;;;;;;;;;;;;;;17492:28;;;;;;;;;;-1:-1:-1;17492:28:0;;;;;;;;20159:313;;;;;;;;;;-1:-1:-1;20159:313:0;;;;;:::i;:::-;;:::i;15974:41::-;;;;;;;;;;-1:-1:-1;15974:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15292:39;;;;;;;;;;-1:-1:-1;15292:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15553:81;;;;;;;;;;;;;;;35910:196;;;;;;;;;;-1:-1:-1;35910:196:0;;;;;:::i;:::-;;:::i;22180:253::-;;;;;;;;;;-1:-1:-1;22180:253:0;;;;;:::i;:::-;;:::i;36116:534::-;;;;;;;;;;-1:-1:-1;36116:534:0;;;;;:::i;:::-;;:::i;19161:83::-;;;;;;;;;;-1:-1:-1;19227:9:0;;19161:83;;19227:9;;;;4950:36:1;;4938:2;4923:18;19161:83:0;4808:184:1;17551:37:0;;;;;;;;;;-1:-1:-1;17551:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22784:479;;;;;;;;;;-1:-1:-1;22784:479:0;;;;;:::i;:::-;;:::i;20480:218::-;;;;;;;;;;-1:-1:-1;20480:218:0;;;;;:::i;:::-;;:::i;21344:378::-;;;;;;;;;;-1:-1:-1;21344:378:0;;;;;:::i;:::-;;:::i;21734:438::-;;;;;;;;;;-1:-1:-1;21734:438:0;;;;;:::i;:::-;;:::i;17447:38::-;;;;;;;;;;;;;;;17527:17;;;;;;;;;;-1:-1:-1;17527:17:0;;;;;;;;;;;22441:335;;;;;;;;;;-1:-1:-1;22441:335:0;;;;;:::i;:::-;;:::i;35775:123::-;;;;;;;;;;-1:-1:-1;35775:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35863:27:0;35839:4;35863:27;;;:18;:27;;;;;;;;;35775:123;6539:90;;;;;;;;;;-1:-1:-1;6606:15:0;6539:90;;6437;;;;;;;;;;-1:-1:-1;6510:9:0;;6437:90;;17169:87;;;;;;;;;;;;;;;;16943:34;;;;;;;;;;;;;;;;19452:198;;;;;;;;;;-1:-1:-1;19452:198:0;;;;;:::i;:::-;;:::i;6029:148::-;;;;;;;;;;;;;:::i;15915:52::-;;;;;;;;;;-1:-1:-1;15915:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15265:18;;;;;;;;;;-1:-1:-1;15265:18:0;;;;;;;;37288:581;;;;;;;;;;-1:-1:-1;37288:581:0;;;;;:::i;:::-;;:::i;17052:36::-;;;;;;;;;;;;;;;;20983:120;;;;;;;;;;-1:-1:-1;20983:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21075:20:0;21051:4;21075:20;;;:11;:20;;;;;;;;;20983:120;5804:79;;;;;;;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;5869:6:0;5804:79;;38064:141;;;;;;;;;;-1:-1:-1;38064:141:0;;;;;:::i;:::-;;:::i;19066:87::-;;;;;;;;;;;;;:::i;38217:109::-;;;;;;;;;;;;;:::i;21210:120::-;;;;;;;;;;-1:-1:-1;21299:23:0;;21210:120;;20706:269;;;;;;;;;;-1:-1:-1;20706:269:0;;;;;:::i;:::-;;:::i;15338:93::-;;;;;;;;;;-1:-1:-1;15338:93:0;;;;-1:-1:-1;;;;;15338:93:0;;;6875:305;;;;;;;;;;;;;:::i;19658:167::-;;;;;;;;;;-1:-1:-1;19658:167:0;;;;;:::i;:::-;;:::i;19356:88::-;;;;;;;;;;-1:-1:-1;19356:88:0;;;;;:::i;:::-;;:::i;23837:102::-;;;;;;;;;;-1:-1:-1;23837:102:0;;;;;:::i;:::-;;:::i;23733:99::-;;;;;;;;;;-1:-1:-1;23733:99:0;;;;;:::i;:::-;;:::i;16748:83::-;;;;;;;;;;;;;;;;17263:57;;;;;;;;;;;;;;;;16634:35;;;;;;;;;;;;;;;;6637:226;;;;;;;;;;-1:-1:-1;6637:226:0;;;;;:::i;:::-;;:::i;19833:143::-;;;;;;;;;;-1:-1:-1;19833:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19941:18:0;;;19914:7;19941:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19833:143;16432:29;;;;;;;;;;;;;;;;37885:166;;;;;;;;;;-1:-1:-1;37885:166:0;;;;;:::i;:::-;;:::i;36662:612::-;;;;;;;;;;-1:-1:-1;36662:612:0;;;;;:::i;:::-;;:::i;6185:244::-;;;;;;;;;;-1:-1:-1;6185:244:0;;;;;:::i;:::-;;:::i;18975:83::-;19012:13;19045:5;19038:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18975:83;:::o;23614:116::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;;;;;;;;;23684:6:::1;::::0;::::1;;23683:7;23675:28;;;::::0;-1:-1:-1;;;23675:28:0;;7135:2:1;23675:28:0::1;::::0;::::1;7117:21:1::0;7174:1;7154:18;;;7147:29;-1:-1:-1;;;7192:18:1;;;7185:39;7241:18;;23675:28:0::1;6933:332:1::0;23675:28:0::1;23712:6;:12:::0;;-1:-1:-1;;23712:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23614:116::o;19984:161::-;20059:4;20076:39;196:10;20099:7;20108:6;20076:8;:39::i;:::-;-1:-1:-1;20133:4:0;19984:161;;;;;:::o;20159:313::-;20257:4;20274:36;20284:6;20292:9;20303:6;20274:9;:36::i;:::-;20321:121;20330:6;196:10;20352:89;20390:6;20352:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20352:19:0;;;;;;:11;:19;;;;;;;;196:10;20352:33;;;;;;;;;;:37;:89::i;:::-;20321:8;:121::i;:::-;-1:-1:-1;20460:4:0;20159:313;;;;;:::o;35910:196::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36004:6:::1;36000:99;36013:8;:15;36011:1;:17;36000:99;;;36082:5;36048:18;:31;36067:8;36076:1;36067:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;36048:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;36048:31:0;:39;;-1:-1:-1;;36048:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36029:3;::::1;::::0;::::1;:::i;:::-;;;;36000:99;;;;35910:196:::0;;:::o;22180:253::-;22246:7;22285;;22274;:18;;22266:73;;;;-1:-1:-1;;;22266:73:0;;7876:2:1;22266:73:0;;;7858:21:1;7915:2;7895:18;;;7888:30;7954:34;7934:18;;;7927:62;-1:-1:-1;;;8005:18:1;;;7998:40;8055:19;;22266:73:0;7674:406:1;22266:73:0;22350:19;22373:10;:8;:10::i;:::-;22350:33;-1:-1:-1;22401:24:0;:7;22350:33;22401:11;:24::i;:::-;22394:31;22180:253;-1:-1:-1;;;22180:253:0:o;36116:534::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36235:2:::1;36224:10;:13;36216:47;;;;-1:-1:-1::0;;;36216:47:0::1;;;;;;;:::i;:::-;36296:2;36284:11;:14;36276:48;;;;-1:-1:-1::0;;;36276:48:0::1;;;;;;;:::i;:::-;36335:10;:23:::0;;;36369:11:::1;:25:::0;;;36405:18:::1;:31:::0;;;36447:19:::1;:33:::0;;;36542:16:::1;::::0;36523:13:::1;::::0;36508:51:::1;::::0;36542:16;36508:29:::1;::::0;36348:10;;36508:14:::1;:29::i;:::-;:33:::0;::::1;:51::i;:::-;36491:14;:68:::0;36624:17:::1;::::0;36604:14:::1;::::0;36588:11:::1;::::0;:54:::1;::::0;36624:17;36588:31:::1;::::0;:11;:15:::1;:31::i;:54::-;36570:15;:72:::0;-1:-1:-1;;36116:534:0:o;22784:479::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22866:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22858:60;;;::::0;-1:-1:-1;;;22858:60:0;;8638:2:1;22858:60:0::1;::::0;::::1;8620:21:1::0;8677:2;8657:18;;;8650:30;8716:29;8696:18;;;8689:57;8763:18;;22858:60:0::1;8436:351:1::0;22858:60:0::1;22934:9;22929:327;22953:9;:16:::0;22949:20;::::1;22929:327;;;23011:7;-1:-1:-1::0;;;;;22995:23:0::1;:9;23005:1;22995:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22995:12:0::1;:23:::0;22991:254:::1;;23054:9;23064:16:::0;;:20:::1;::::0;23083:1:::1;::::0;23064:20:::1;:::i;:::-;23054:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23039:9:::1;:12:::0;;-1:-1:-1;;;;;23054:31:0;;::::1;::::0;23049:1;;23039:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23039:46:0::1;-1:-1:-1::0;;;;;23039:46:0;;::::1;;::::0;;23104:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23143:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23143:28:0::1;::::0;;23190:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23190:15:0;;;;;-1:-1:-1;;;;;;23190:15:0::1;::::0;;;;;22929:327:::1;22784:479:::0;:::o;22991:254::-:1;22971:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22929:327;;;;22784:479:::0;:::o;20480:218::-;196:10;20568:4;20617:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20617:34:0;;;;;;;;;;20568:4;;20585:83;;20608:7;;20617:50;;20656:10;20617:38;:50::i;21344:378::-;196:10;21396:14;21445:19;;;:11;:19;;;;;;;;21444:20;21436:77;;;;-1:-1:-1;;;21436:77:0;;9259:2:1;21436:77:0;;;9241:21:1;9298:2;9278:18;;;9271:30;9337:34;9317:18;;;9310:62;-1:-1:-1;;;9388:18:1;;;9381:42;9440:19;;21436:77:0;9057:408:1;21436:77:0;21525:15;21550:19;21561:7;21550:10;:19::i;:::-;-1:-1:-1;;;;;;;;21598:15:0;;;;;;:7;:15;;;;;;21524:45;;-1:-1:-1;21598:28:0;;:15;-1:-1:-1;21524:45:0;;-1:-1:-1;;21598:19:0;:28::i;:::-;-1:-1:-1;;;;;21580:15:0;;;;;;:7;:15;;;;;:46;21647:7;;:20;;21659:7;21647:11;:20::i;:::-;21637:7;:30;21691:10;;:23;;21706:7;21691:14;:23::i;:::-;21678:10;:36;-1:-1:-1;;;21344:378:0:o;21734:438::-;21824:7;21863;;21852;:18;;21844:62;;;;-1:-1:-1;;;21844:62:0;;9672:2:1;21844:62:0;;;9654:21:1;9711:2;9691:18;;;9684:30;9750:33;9730:18;;;9723:61;9801:18;;21844:62:0;9470:355:1;21844:62:0;21922:17;21917:248;;21957:15;21982:19;21993:7;21982:10;:19::i;:::-;-1:-1:-1;21956:45:0;;-1:-1:-1;22016:14:0;;-1:-1:-1;;;;;;22016:14:0;21917:248;22065:23;22097:19;22108:7;22097:10;:19::i;:::-;-1:-1:-1;22063:53:0;;-1:-1:-1;22131:22:0;;-1:-1:-1;;;;;;22131:22:0;22441:335;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22526:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22525:21;22517:61;;;::::0;-1:-1:-1;;;22517:61:0;;8638:2:1;22517:61:0::1;::::0;::::1;8620:21:1::0;8677:2;8657:18;;;8650:30;8716:29;8696:18;;;8689:57;8763:18;;22517:61:0::1;8436:351:1::0;22517:61:0::1;-1:-1:-1::0;;;;;22592:16:0;::::1;22611:1;22592:16:::0;;;:7:::1;:16;::::0;;;;;:20;22589:108:::1;;-1:-1:-1::0;;;;;22668:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22648:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22629:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22589:108:::1;-1:-1:-1::0;;;;;22707:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22707:27:0::1;22730:4;22707:27:::0;;::::1;::::0;;;22745:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22745:23:0::1;::::0;;::::1;::::0;;22441:335::o;19452:198::-;-1:-1:-1;;;;;19542:20:0;;19518:7;19542:20;;;:11;:20;;;;;;;;19538:49;;;-1:-1:-1;;;;;;19571:16:0;;;;;:7;:16;;;;;;;19452:198::o;19538:49::-;-1:-1:-1;;;;;19625:16:0;;;;;;:7;:16;;;;;;19605:37;;:19;:37::i;6029:148::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;6136:1:::1;6120:6:::0;;6099:40:::1;::::0;-1:-1:-1;;;;;6120:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6099:40:0;6136:1;;6099:40:::1;6167:1;6150:19:::0;;-1:-1:-1;;;;;;6150:19:0::1;::::0;;6029:148::o;37288:581::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37419:2:::1;37405:13;:16;37397:50;;;;-1:-1:-1::0;;;37397:50:0::1;;;;;;;:::i;:::-;37483:2;37468:14;:17;37460:51;;;;-1:-1:-1::0;;;37460:51:0::1;;;;;;;:::i;:::-;37524:13;:29:::0;;;37566:14:::1;:31:::0;;;37610:21:::1;:37:::0;;;37660:22:::1;:39:::0;;;37761:16:::1;::::0;37727:10:::1;::::0;:51:::1;::::0;37761:16;37727:29:::1;::::0;37540:13;37727:14:::1;:29::i;38064:141::-:0;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;38152:16:::1;:45:::0;;-1:-1:-1;;;;;;38152:45:0::1;-1:-1:-1::0;;;;;38152:45:0;;;::::1;::::0;;;::::1;::::0;;38064:141::o;19066:87::-;19105:13;19138:7;19131:14;;;;;:::i;38217:109::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;38267:51:::1;::::0;38275:10:::1;::::0;38296:21:::1;38267:51:::0;::::1;;;::::0;::::1;::::0;;;38296:21;38275:10;38267:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38217:109::o:0;20706:269::-;20799:4;20816:129;196:10;20839:7;20848:96;20887:15;20848:96;;;;;;;;;;;;;;;;;196:10;20848:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20848:34:0;;;;;;;;;;;;:38;:96::i;6875:305::-;6927:14;;-1:-1:-1;;;;;6927:14:0;6945:10;6927:28;6919:76;;;;-1:-1:-1;;;6919:76:0;;10032:2:1;6919:76:0;;;10014:21:1;10071:2;10051:18;;;10044:30;10110:34;10090:18;;;10083:62;-1:-1:-1;;;10161:18:1;;;10154:33;10204:19;;6919:76:0;9830:399:1;6919:76:0;7032:9;;7014:15;:27;7006:72;;;;-1:-1:-1;;;7006:72:0;;10436:2:1;7006:72:0;;;10418:21:1;10475:2;10455:18;;;10448:30;10514:33;10494:18;;;10487:61;10565:18;;7006:72:0;10234:355:1;7006:72:0;7123:14;;;7115:6;;7094:44;;-1:-1:-1;;;;;7123:14:0;;;;7115:6;;;;-1:-1:-1;;;;;;;;;;;7094:44:0;;7158:14;;;7149:23;;-1:-1:-1;;;;;;7149:23:0;-1:-1:-1;;;;;7158:14:0;;;7149:23;;;;;;6875:305::o;19658:167::-;19736:4;19753:42;196:10;19777:9;19788:6;19753:9;:42::i;19356:88::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;19419:9:::1;:17:::0;;-1:-1:-1;;19419:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19356:88::o;23837:102::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23911:14:0;;;::::1;;::::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;23911:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23837:102::o;23733:99::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23805:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;23805:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23733:99::o;6637:226::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;6718:6:::1;::::0;;;6701:23;;-1:-1:-1;;;;;;6701:23:0;;::::1;-1:-1:-1::0;;;;;6718:6:0;::::1;6701:23;::::0;;;6735:19:::1;::::0;;6777:22:::1;6795:4:::0;6777:15:::1;:22;:::i;:::-;6765:9;:34:::0;6852:1:::1;6836:6:::0;;6815:40:::1;::::0;-1:-1:-1;;;;;6836:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6815:40:0;6852:1;;6815:40:::1;6637:226:::0;:::o;37885:166::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;37993:23:::1;:50:::0;37885:166::o;36662:612::-;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;36805:2:::1;36788:16;:19;36780:53;;;;-1:-1:-1::0;;;36780:53:0::1;;;;;;;:::i;:::-;36872:2;36854:17;:20;36846:54;;;;-1:-1:-1::0;;;36846:54:0::1;;;;;;;:::i;:::-;36911:16;:35:::0;;;36957:17:::1;:37:::0;;;37005:24:::1;:43:::0;;;37059:25:::1;:45:::0;;;37147:13:::1;::::0;37132:10:::1;::::0;:51:::1;::::0;36930:16;;37132:29:::1;::::0;:14:::1;:29::i;6185:244::-:0;5938:6;;-1:-1:-1;;;;;5938:6:0;196:10;5938:22;5930:67;;;;-1:-1:-1;;;5930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6274:22:0;::::1;6266:73;;;::::0;-1:-1:-1;;;6266:73:0;;10926:2:1;6266:73:0::1;::::0;::::1;10908:21:1::0;10965:2;10945:18;;;10938:30;11004:34;10984:18;;;10977:62;-1:-1:-1;;;11055:18:1;;;11048:36;11101:19;;6266:73:0::1;10724:402:1::0;6266:73:0::1;6376:6;::::0;;6355:38:::1;::::0;-1:-1:-1;;;;;6355:38:0;;::::1;::::0;6376:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6355:38:0;::::1;6404:6;:17:::0;;-1:-1:-1;;;;;;6404:17:0::1;-1:-1:-1::0;;;;;6404:17:0;;;::::1;::::0;;;::::1;::::0;;6185:244::o;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;11333:2:1;1276:46:0;;;11315:21:1;11372:2;11352:18;;;11345:30;11411:29;11391:18;;;11384:57;11458:18;;1276:46:0;11131:351:1;23271:337:0;-1:-1:-1;;;;;23364:19:0;;23356:68;;;;-1:-1:-1;;;23356:68:0;;11689:2:1;23356:68:0;;;11671:21:1;11728:2;11708:18;;;11701:30;11767:34;11747:18;;;11740:62;-1:-1:-1;;;11818:18:1;;;11811:34;11862:19;;23356:68:0;11487:400:1;23356:68:0;-1:-1:-1;;;;;23443:21:0;;23435:68;;;;-1:-1:-1;;;23435:68:0;;12094:2:1;23435:68:0;;;12076:21:1;12133:2;12113:18;;;12106:30;12172:34;12152:18;;;12145:62;-1:-1:-1;;;12223:18:1;;;12216:32;12265:19;;23435:68:0;11892:398:1;23435:68:0;-1:-1:-1;;;;;23516:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23568:32;;1850:25:1;;;23568:32:0;;1823:18:1;23568:32:0;;;;;;;23271:337;;;:::o;23949:1639::-;-1:-1:-1;;;;;24071:18:0;;24063:68;;;;-1:-1:-1;;;24063:68:0;;12497:2:1;24063:68:0;;;12479:21:1;12536:2;12516:18;;;12509:30;12575:34;12555:18;;;12548:62;-1:-1:-1;;;12626:18:1;;;12619:35;12671:19;;24063:68:0;12295:401:1;24063:68:0;-1:-1:-1;;;;;24150:16:0;;24142:64;;;;-1:-1:-1;;;24142:64:0;;12903:2:1;24142:64:0;;;12885:21:1;12942:2;12922:18;;;12915:30;12981:34;12961:18;;;12954:62;-1:-1:-1;;;13032:18:1;;;13025:33;13075:19;;24142:64:0;12701:399:1;24142:64:0;24234:1;24225:6;:10;24217:64;;;;-1:-1:-1;;;24217:64:0;;13307:2:1;24217:64:0;;;13289:21:1;13346:2;13326:18;;;13319:30;13385:34;13365:18;;;13358:62;-1:-1:-1;;;13436:18:1;;;13429:39;13485:19;;24217:64:0;13105:405:1;24217:64:0;-1:-1:-1;;;;;24301:13:0;;;;;;:7;:13;;;;;;;;24300:14;:30;;;;-1:-1:-1;;;;;;24319:11:0;;;;;;:7;:11;;;;;;;;24318:12;24300:30;24292:52;;;;-1:-1:-1;;;24292:52:0;;13717:2:1;24292:52:0;;;13699:21:1;13756:2;13736:18;;;13729:30;-1:-1:-1;;;13775:18:1;;;13768:40;13825:18;;24292:52:0;13515:334:1;24292:52:0;24360:6;;;;24359:7;:25;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24369:15:0;;;5869:6;;24369:15;;24359:25;:42;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24388:13:0;;;5869:6;;24388:13;;24359:42;:58;;;;-1:-1:-1;;;;;;24404:13:0;;;;;;:7;:13;;;;;;;;24403:14;24359:58;:72;;;;-1:-1:-1;;;;;;24420:11:0;;;;;;:7;:11;;;;;;;;24419:12;24359:72;24356:133;;;24448:29;;-1:-1:-1;;;24448:29:0;;14056:2:1;24448:29:0;;;14038:21:1;14095:2;14075:18;;;14068:30;-1:-1:-1;;;14114:18:1;;;14107:41;14165:18;;24448:29:0;13854:335:1;24448:29:0;24499:28;24530:24;24548:4;24530:9;:24::i;:::-;24620:23;;24669:16;;24499:55;;-1:-1:-1;24596:47:0;;;;24669:16;;24668:17;:40;;;;;24695:13;-1:-1:-1;;;;;24689:19:0;:2;-1:-1:-1;;;;;24689:19:0;;24668:40;:58;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24712:14:0;;;5869:6;;24712:14;;24668:58;:73;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24730:11:0;;;5869:6;;24730:11;;24668:73;24664:249;;;24762:23;24758:144;;;24851:16;;24819:49;;24830:20;;-1:-1:-1;;;;;24851:16:0;24819:10;:49::i;:::-;24933:9;;;;24932:10;:29;;;;-1:-1:-1;24945:16:0;;;;24944:17;24932:29;:47;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24964:15:0;;;5869:6;;24964:15;;24932:47;:64;;;;-1:-1:-1;5842:7:0;5869:6;-1:-1:-1;;;;;24983:13:0;;;5869:6;;24983:13;;24932:64;:76;;;;-1:-1:-1;;;;;;24999:9:0;;;;;;:5;:9;;;;;;;;24998:10;24932:76;24929:238;;;25094:16;;25033:57;25051:38;25085:3;25051:29;25066:13;;25062:3;:17;;;;:::i;:::-;25051:6;;:10;:29::i;:::-;:33;;:38::i;:::-;25033:13;25043:2;25033:9;:13::i;:57::-;:77;;25025:130;;;;-1:-1:-1;;;25025:130:0;;14396:2:1;25025:130:0;;;14378:21:1;14435:2;14415:18;;;14408:30;14474:34;14454:18;;;14447:62;-1:-1:-1;;;14525:18:1;;;14518:38;14573:19;;25025:130:0;14194:404:1;25025:130:0;-1:-1:-1;;;;;25314:24:0;;25187:12;25314:24;;;:18;:24;;;;;;25202:4;;25314:24;;;:50;;-1:-1:-1;;;;;;25342:22:0;;;;;;:18;:22;;;;;;;;25314:50;25311:96;;;-1:-1:-1;25390:5:0;25311:96;25419:5;:12;;-1:-1:-1;;25419:12:0;;;;;-1:-1:-1;;;;;25459:13:0;25445:28;;;;;;25442:72;;25489:5;:13;;-1:-1:-1;;25489:13:0;;;25442:72;25542:38;25557:4;25562:2;25565:6;25572:7;25542:14;:38::i;:::-;24052:1536;;;23949:1639;;;:::o;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;32420:163::-;32461:7;32482:15;32499;32518:19;:17;:19::i;:::-;32481:56;;-1:-1:-1;32481:56:0;-1:-1:-1;32555:20:0;32481:56;;32555:11;:20::i;:::-;32548:27;;;;32420:163;:::o;1963:132::-;2021:7;2048:39;2052:1;2055;2048:39;;;;;;;;;;;;;;;;;:3;:39::i;31011:459::-;31070:7;31079;31088;31097;31106;31115;31123;31144:23;31169:12;31183:18;31202:15;31221:20;31233:7;31221:11;:20::i;:::-;31143:98;;;;;;;;31253:15;31270:23;31295:12;31311:58;31323:7;31332:4;31338:10;31349:7;31358:10;:8;:10::i;:::-;31311:11;:58::i;:::-;31252:117;;-1:-1:-1;31252:117:0;-1:-1:-1;31252:117:0;-1:-1:-1;31420:15:0;;-1:-1:-1;31437:4:0;;-1:-1:-1;31443:10:0;;-1:-1:-1;31454:7:0;-1:-1:-1;;;;31011:459:0;;;;;;;;;:::o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;25596:222::-;18041:16;:23;;-1:-1:-1;;18041:23:0;18060:4;18041:23;;;25692:62;;25736:7:::1;25692:62;25764:46;25782:20;25803:6;25764:17;:46::i;:::-;-1:-1:-1::0;;18087:16:0;:24;;-1:-1:-1;;18087:24:0;;;25596:222::o;1703:250::-;1761:7;1785:1;1790;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;15200:2:1;1868:56:0;;;15182:21:1;15239:2;15219:18;;;15212:30;15278:34;15258:18;;;15251:62;-1:-1:-1;;;15329:18:1;;;15322:31;15370:19;;1868:56:0;14998:397:1;27616:704:0;27727:7;27723:40;;27749:14;34968:10;;;34947:18;:31;35016:16;;;34989:24;:43;35067:13;;;35043:21;:37;35113:11;;;35091:19;:33;35163:17;;;35135:25;:45;35216:14;;;35191:22;:39;-1:-1:-1;35251:18:0;;;;35280:21;;;;35312:15;;;;35338:14;;;;35363:20;;;;35394:17;34894:525;27749:14;-1:-1:-1;;;;;27788:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27812:22:0;;;;;;:11;:22;;;;;;;;27811:23;27788:46;27784:467;;;27851:48;27873:6;27881:9;27892:6;27851:21;:48::i;:::-;27784:467;;;-1:-1:-1;;;;;27922:19:0;;;;;;:11;:19;;;;;;;;27921:20;:46;;;;-1:-1:-1;;;;;;27945:22:0;;;;;;:11;:22;;;;;;;;27921:46;27917:334;;;27984:46;28004:6;28012:9;28023:6;27984:19;:46::i;27917:334::-;-1:-1:-1;;;;;28052:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28075:22:0;;;;;;:11;:22;;;;;;;;28052:45;28048:203;;;28114:48;28136:6;28144:9;28155:6;28114:21;:48::i;28048:203::-;28195:44;28213:6;28221:9;28232:6;28195:17;:44::i;:::-;28275:7;28271:41;;28297:15;35487:18;;35474:10;:31;35534:24;;35515:16;:43;35584:21;;35568:13;:37;35629:19;;35615:11;:33;35678:25;;35658:17;:45;35730:22;;35713:14;:39;35431:338;28297:15;27616:704;;;;:::o;32591:561::-;32688:7;;32724;;32641;;;;;32748:289;32772:9;:16;32768:20;;32748:289;;;32838:7;32814;:21;32822:9;32832:1;32822:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32822:12:0;32814:21;;;;;;;;;;;;;:31;;:66;;;32873:7;32849;:21;32857:9;32867:1;32857:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32857:12:0;32849:21;;;;;;;;;;;;;:31;32814:66;32810:97;;;32890:7;;32899;;32882:25;;;;;;;32591:561;;:::o;32810:97::-;32932:34;32944:7;:21;32952:9;32962:1;32952:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32952:12:0;32944:21;;;;;;;;;;;;;32932:7;;:11;:34::i;:::-;32922:44;;32991:34;33003:7;:21;33011:9;33021:1;33011:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33011:12:0;33003:21;;;;;;;;;;;;;32991:7;;:11;:34::i;:::-;32981:44;-1:-1:-1;32790:3:0;;;;:::i;:::-;;;;32748:289;;;-1:-1:-1;33073:7:0;;33061;;:20;;:11;:20::i;:::-;33051:7;:30;33047:61;;;33091:7;;33100;;33083:25;;;;;;32591:561;;:::o;33047:61::-;33127:7;;33136;;-1:-1:-1;32591:561:0;-1:-1:-1;32591:561:0:o;2103:278::-;2189:7;2224:12;2217:5;2209:28;;;;-1:-1:-1;;;2209:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2248:9:0;2260:5;2264:1;2260;:5;:::i;31478:415::-;31538:7;31547;31556;31564;31584:12;31599:24;31615:7;31599:15;:24::i;:::-;31584:39;;31634:18;31655:30;31677:7;31655:21;:30::i;:::-;31634:51;;31696:15;31714:27;31733:7;31714:18;:27::i;:::-;31696:45;-1:-1:-1;31752:23:0;31778:46;31696:45;31778:33;31800:10;31778:33;:7;31790:4;31778:11;:17::i;:::-;:21;;:33::i;:46::-;31752:72;31860:4;;-1:-1:-1;31866:10:0;;-1:-1:-1;31866:10:0;-1:-1:-1;31478:415:0;;-1:-1:-1;;;31478:415:0:o;31901:511::-;32032:7;;;;32088:24;:7;32100:11;32088;:24::i;:::-;32070:42;-1:-1:-1;32123:12:0;32138:21;:4;32147:11;32138:8;:21::i;:::-;32123:36;-1:-1:-1;32170:18:0;32191:27;:10;32206:11;32191:14;:27::i;:::-;32170:48;-1:-1:-1;32229:15:0;32247:24;:7;32259:11;32247;:24::i;:::-;32229:42;-1:-1:-1;32282:23:0;32308:46;32229:42;32308:33;32330:10;32308:33;:7;32320:4;32308:11;:17::i;:46::-;32373:7;;;;-1:-1:-1;32399:4:0;;-1:-1:-1;31901:511:0;;-1:-1:-1;;;;;;;;;31901:511:0:o;25836:561::-;25942:16;;;25956:1;25942:16;;;;;;;;25918:21;;25942:16;;;;;;;;;;-1:-1:-1;25942:16:0;25918:40;;25987:4;25969;25974:1;25969:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25969:23:0;;;-1:-1:-1;;;;;25969:23:0;;;;;26013:15;-1:-1:-1;;;;;26013:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26003:4;26008:1;26003:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26003:32:0;;;-1:-1:-1;;;;;26003:32:0;;;;;26048:62;26065:4;26080:15;26098:11;26048:8;:62::i;:::-;26149:189;;-1:-1:-1;;;26149:189:0;;-1:-1:-1;;;;;26149:15:0;:66;;;;:189;;26230:11;;26256:1;;26272:4;;26291:6;;26312:15;;26149:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26354:35;26371:11;26384:4;26354:35;;;;;;;:::i;:::-;;;;;;;;25907:490;25836:561;;:::o;29535:612::-;29638:15;29655:23;29680:12;29694:23;29719:12;29733:18;29752:15;29771:19;29782:7;29771:10;:19::i;:::-;29637:153;;;;;;;;;;;;;;29816:28;29836:7;29816;:15;29824:6;-1:-1:-1;;;;;29816:15:0;-1:-1:-1;;;;;29816:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;29798:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29873:7;:15;;;;:28;;29893:7;29873:19;:28::i;:::-;-1:-1:-1;;;;;29855:15:0;;;;;;;:7;:15;;;;;;:46;;;;29933:18;;;;;;;:39;;29956:15;29933:22;:39::i;:::-;-1:-1:-1;;;;;29912:18:0;;;;;;:7;:18;;;;;:60;29986:26;30001:10;29986:14;:26::i;:::-;30025:20;30037:7;30025:11;:20::i;:::-;30056:23;30068:4;30074;30056:11;:23::i;:::-;30112:9;-1:-1:-1;;;;;30095:44:0;30104:6;-1:-1:-1;;;;;30095:44:0;;30123:15;30095:44;;;;1850:25:1;;1838:2;1823:18;;1704:177;30095:44:0;;;;;;;;29626:521;;;;;;;29535:612;;;:::o;28895:632::-;28996:15;29013:23;29038:12;29052:23;29077:12;29091:18;29110:15;29129:19;29140:7;29129:10;:19::i;:::-;28995:153;;;;;;;;;;;;;;29174:28;29194:7;29174;:15;29182:6;-1:-1:-1;;;;;29174:15:0;-1:-1:-1;;;;;29174:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;29156:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29234:18;;;;;:7;:18;;;;;:39;;29257:15;29234:22;:39::i;:::-;-1:-1:-1;;;;;29213:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29305:7;:18;;;;:39;;29328:15;29305:22;:39::i;30155:688::-;30258:15;30275:23;30300:12;30314:23;30339:12;30353:18;30372:15;30391:19;30402:7;30391:10;:19::i;:::-;30257:153;;;;;;;;;;;;;;30436:28;30456:7;30436;:15;30444:6;-1:-1:-1;;;;;30436:15:0;-1:-1:-1;;;;;30436:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;30418:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30493:7;:15;;;;:28;;30513:7;30493:19;:28::i;28328:559::-;28427:15;28444:23;28469:12;28483:23;28508:12;28522:18;28541:15;28560:19;28571:7;28560:10;:19::i;:::-;28426:153;;;;;;;;;;;;;;28607:28;28627:7;28607;:15;28615:6;-1:-1:-1;;;;;28607:15:0;-1:-1:-1;;;;;28607:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;33900:283::-;34010:5;;33964:7;;;;34010:5;;;;;34007:100;;;-1:-1:-1;34037:10:0;;34007:100;;;-1:-1:-1;34084:11:0;;34007:100;34124:51;34159:5;34124:16;:7;34136:3;34124:11;:16::i;34195:342::-;34325:5;;34265:7;;;;34325:5;;;;;34322:130;;;-1:-1:-1;34361:16:0;;34322:130;;;-1:-1:-1;34423:17:0;;34469:60;34513:5;34469:25;:7;34481:12;34469:11;:25::i;34551:331::-;34685:5;;34618:7;;;;34685:5;;;;;34682:118;;;-1:-1:-1;34718:13:0;;34682:118;;;-1:-1:-1;34774:14:0;;34817:57;34858:5;34817:22;:7;34829:9;34817:11;:22::i;33164:368::-;33227:19;33250:10;:8;:10::i;:::-;33227:33;-1:-1:-1;33271:18:0;33292:27;:10;33227:33;33292:14;:27::i;:::-;33381:4;33365:22;;;;:7;:22;;;;;;33271:48;;-1:-1:-1;33365:38:0;;33271:48;33365:26;:38::i;:::-;33356:4;33340:22;;;;:7;:22;;;;;;;;:63;;;;33417:11;:26;;;;;;33414:107;;;33499:4;33483:22;;;;:7;:22;;;;;;:38;;33510:10;33483:26;:38::i;:::-;33474:4;33458:22;;;;:7;:22;;;;;:63;33216:316;;33164:368;:::o;30851:152::-;30934:7;;:17;;30946:4;30934:11;:17::i;:::-;30924:7;:27;30975:10;;:20;;30990:4;30975:14;:20::i;:::-;30962:10;:33;-1:-1:-1;;30851:152:0:o;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:160::-;632:20;;688:13;;681:21;671:32;;661:60;;717:1;714;707:12;661:60;567:160;;;:::o;732:180::-;788:6;841:2;829:9;820:7;816:23;812:32;809:52;;;857:1;854;847:12;809:52;880:26;896:9;880:26;:::i;917:131::-;-1:-1:-1;;;;;992:31:1;;982:42;;972:70;;1038:1;1035;1028:12;1053:134;1121:20;;1150:31;1121:20;1150:31;:::i;1192:315::-;1260:6;1268;1321:2;1309:9;1300:7;1296:23;1292:32;1289:52;;;1337:1;1334;1327:12;1289:52;1376:9;1363:23;1395:31;1420:5;1395:31;:::i;:::-;1445:5;1497:2;1482:18;;;;1469:32;;-1:-1:-1;;;1192:315:1:o;2121:456::-;2198:6;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:52;;;2283:1;2280;2273:12;2235:52;2322:9;2309:23;2341:31;2366:5;2341:31;:::i;:::-;2391:5;-1:-1:-1;2448:2:1;2433:18;;2420:32;2461:33;2420:32;2461:33;:::i;:::-;2121:456;;2513:7;;-1:-1:-1;;;2567:2:1;2552:18;;;;2539:32;;2121:456::o;2582:247::-;2641:6;2694:2;2682:9;2673:7;2669:23;2665:32;2662:52;;;2710:1;2707;2700:12;2662:52;2749:9;2736:23;2768:31;2793:5;2768:31;:::i;3042:127::-;3103:10;3098:3;3094:20;3091:1;3084:31;3134:4;3131:1;3124:15;3158:4;3155:1;3148:15;3174:1191;3264:6;3272;3325:2;3313:9;3304:7;3300:23;3296:32;3293:52;;;3341:1;3338;3331:12;3293:52;3381:9;3368:23;3410:18;3451:2;3443:6;3440:14;3437:34;;;3467:1;3464;3457:12;3437:34;3505:6;3494:9;3490:22;3480:32;;3550:7;3543:4;3539:2;3535:13;3531:27;3521:55;;3572:1;3569;3562:12;3521:55;3608:2;3595:16;3630:4;3653:2;3649;3646:10;3643:36;;;3659:18;;:::i;:::-;3705:2;3702:1;3698:10;3737:2;3731:9;3800:2;3796:7;3791:2;3787;3783:11;3779:25;3771:6;3767:38;3855:6;3843:10;3840:22;3835:2;3823:10;3820:18;3817:46;3814:72;;;3866:18;;:::i;:::-;3902:2;3895:22;3952:18;;;3986:15;;;;-1:-1:-1;4028:11:1;;;4024:20;;;4056:19;;;4053:39;;;4088:1;4085;4078:12;4053:39;4112:11;;;;4132:148;4148:6;4143:3;4140:15;4132:148;;;4214:23;4233:3;4214:23;:::i;:::-;4202:36;;4165:12;;;;4258;;;;4132:148;;;4299:6;-1:-1:-1;4324:35:1;;-1:-1:-1;4340:18:1;;;4324:35;:::i;:::-;4314:45;;;;;;3174:1191;;;;;:::o;4370:180::-;4429:6;4482:2;4470:9;4461:7;4457:23;4453:32;4450:52;;;4498:1;4495;4488:12;4450:52;-1:-1:-1;4521:23:1;;4370:180;-1:-1:-1;4370:180:1:o;4555:248::-;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;-1:-1:-1;;4723:23:1;;;4793:2;4778:18;;;4765:32;;-1:-1:-1;4555:248:1:o;4997:::-;5062:6;5070;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5175:9;5162:23;5152:33;;5204:35;5235:2;5224:9;5220:18;5204:35;:::i;:::-;5194:45;;4997:248;;;;;:::o;5474:315::-;5539:6;5547;5600:2;5588:9;5579:7;5575:23;5571:32;5568:52;;;5616:1;5613;5606:12;5568:52;5655:9;5642:23;5674:31;5699:5;5674:31;:::i;:::-;5724:5;-1:-1:-1;5748:35:1;5779:2;5764:18;;5748:35;:::i;5794:388::-;5862:6;5870;5923:2;5911:9;5902:7;5898:23;5894:32;5891:52;;;5939:1;5936;5929:12;5891:52;5978:9;5965:23;5997:31;6022:5;5997:31;:::i;:::-;6047:5;-1:-1:-1;6104:2:1;6089:18;;6076:32;6117:33;6076:32;6117:33;:::i;:::-;6169:7;6159:17;;;5794:388;;;;;:::o;6187:380::-;6266:1;6262:12;;;;6309;;;6330:61;;6384:4;6376:6;6372:17;6362:27;;6330:61;6437:2;6429:6;6426:14;6406:18;6403:38;6400:161;;6483:10;6478:3;6474:20;6471:1;6464:31;6518:4;6515:1;6508:15;6546:4;6543:1;6536:15;6400:161;;6187:380;;;:::o;6572:356::-;6774:2;6756:21;;;6793:18;;;6786:30;6852:34;6847:2;6832:18;;6825:62;6919:2;6904:18;;6572:356::o;7270:127::-;7331:10;7326:3;7322:20;7319:1;7312:31;7362:4;7359:1;7352:15;7386:4;7383:1;7376:15;7402:127;7463:10;7458:3;7454:20;7451:1;7444:31;7494:4;7491:1;7484:15;7518:4;7515:1;7508:15;7534:135;7573:3;7594:17;;;7591:43;;7614:18;;:::i;:::-;-1:-1:-1;7661:1:1;7650:13;;7534:135::o;8085:346::-;8287:2;8269:21;;;8326:2;8306:18;;;8299:30;-1:-1:-1;;;8360:2:1;8345:18;;8338:52;8422:2;8407:18;;8085:346::o;8792:128::-;8859:9;;;8880:11;;;8877:37;;;8894:18;;:::i;8925:127::-;8986:10;8981:3;8977:20;8974:1;8967:31;9017:4;9014:1;9007:15;9041:4;9038:1;9031:15;10594:125;10659:9;;;10680:10;;;10677:36;;;10693:18;;:::i;14603:168::-;14676:9;;;14707;;14724:15;;;14718:22;;14704:37;14694:71;;14745:18;;:::i;14776:217::-;14816:1;14842;14832:132;;14886:10;14881:3;14877:20;14874:1;14867:31;14921:4;14918:1;14911:15;14949:4;14946:1;14939:15;14832:132;-1:-1:-1;14978:9:1;;14776:217::o;15400:251::-;15470:6;15523:2;15511:9;15502:7;15498:23;15494:32;15491:52;;;15539:1;15536;15529:12;15491:52;15571:9;15565:16;15590:31;15615:5;15590:31;:::i;15656:461::-;15709:3;15747:5;15741:12;15774:6;15769:3;15762:19;15800:4;15829:2;15824:3;15820:12;15813:19;;15866:2;15859:5;15855:14;15887:1;15897:195;15911:6;15908:1;15905:13;15897:195;;;15976:13;;-1:-1:-1;;;;;15972:39:1;15960:52;;16032:12;;;;16067:15;;;;16008:1;15926:9;15897:195;;;-1:-1:-1;16108:3:1;;15656:461;-1:-1:-1;;;;;15656:461:1:o;16122:582::-;16421:6;16410:9;16403:25;16464:6;16459:2;16448:9;16444:18;16437:34;16507:3;16502:2;16491:9;16487:18;16480:31;16384:4;16528:57;16580:3;16569:9;16565:19;16557:6;16528:57;:::i;:::-;-1:-1:-1;;;;;16621:32:1;;;;16616:2;16601:18;;16594:60;-1:-1:-1;16685:3:1;16670:19;16663:35;16520:65;16122:582;-1:-1:-1;;;16122:582:1:o;16709:332::-;16916:6;16905:9;16898:25;16959:2;16954;16943:9;16939:18;16932:30;16879:4;16979:56;17031:2;17020:9;17016:18;17008:6;16979:56;:::i;:::-;16971:64;16709:332;-1:-1:-1;;;;16709:332:1:o
Swarm Source
ipfs://f9e7964678ad91e45e491a83003e49746bc167eb6ad3e22a07eca38a8c143fd6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.