Overview
Max Total Supply
100,000,000 GCME
Holders
37 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (-17.15%)
Onchain Market Cap
$34,780.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,763.047043744 GCMEValue
$0.61 ( ~0.000207797129931931 Eth) [0.0018%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | LATOKEN | GCME-USDT | $0.0004 0.0000001 Eth | $35.28 93,096.978 GCME | 35.8276% |
2 | PancakeSwap (v2) | 0X9528CCEB678B90DAF02CA5CA45622D5CBAF58A30-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $0.0003 0.0000001 Eth | $34.31 108,790.287 0X9528CCEB678B90DAF02CA5CA45622D5CBAF58A30 | 41.8670% |
3 | RadioShack (BSC) | 0X30807D3B851A31D62415B8BB7AF7DCA59390434A-0X9528CCEB678B90DAF02CA5CA45622D5CBAF58A30 | $0.0005 0.0000001 Eth | $30.57 57,960.043 0X30807D3B851A31D62415B8BB7AF7DCA59390434A | 22.3054% |
Contract Name:
GoCryptoMe
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-22 */ // SPDX-License-Identifier: MIT 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 GoCryptoMe is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; // SafeMoon Variables --------------------------------------------------- // mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = type(uint256).max; uint256 private _tTotal = 100000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "GoCryptoMe"; string private _symbol = "GCME"; uint8 private _decimals = 9; uint256 public _taxFee = 0; uint256 private _previousTaxFee; uint256 public _lockerFee = 0; uint256 private _previousLockerFee; uint256 public _liquidityFee = 0; uint256 private _previousLiquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 public _maxTxAmount = 100000000 * 10**9; // Additional Variables ------------------------------------------------- // uint256 public constant MAX_FEE_VALUE = 20; uint256 private minimumTokensBeforeSwap = 200 * 10**9; address payable public constant DEAD_ADDRESS = payable(0x000000000000000000000000000000000000dEaD); address payable public marketingAddress = payable(0x000000000000000000000000000000000000dEaD); address payable public lockerAddress = payable(0x000000000000000000000000000000000000dEaD); uint256 public _buyLiquidityFee = 0; uint256 public _buyLockerFee = 0; uint256 public _sellLiquidityFee = 0; uint256 public _sellLockerFee = 0; uint256 public _amountTokensLastSold = 0; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event RewardLiquidityProviders(uint256 tokenAmount); event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { address payable marketingAddress_; address payable lockerAddress_; uint256 taxFee; uint256 liquidityFee; uint256 buyLockerFee; uint256 buyLiquidityFee; uint256 sellLockerFee; uint256 sellLiquidityFee; require(taxFee < MAX_FEE_VALUE, "fees outside of range"); require(liquidityFee < MAX_FEE_VALUE, "fees outside of range"); require(buyLockerFee < MAX_FEE_VALUE, "fees outside of range"); require(buyLiquidityFee < MAX_FEE_VALUE, "fees outside of range"); require(sellLockerFee < MAX_FEE_VALUE, "fees outside of range"); require(sellLiquidityFee < MAX_FEE_VALUE, "fees outside of range"); // Set addresses. marketingAddress = marketingAddress_; lockerAddress = lockerAddress_; // Set fees. _taxFee = taxFee; _previousTaxFee = taxFee; _liquidityFee = liquidityFee; _previousLiquidityFee = liquidityFee; _buyLockerFee = buyLockerFee; _buyLiquidityFee = buyLiquidityFee; _sellLockerFee = sellLockerFee; _sellLiquidityFee = sellLiquidityFee; _rOwned[_msgSender()] = _rTotal; // Create pair. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; // Exclude current owner and this contract from fees. _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } // SafeMoon Getters ----------------------------------------------------- // 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 balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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); } // Additional Getters --------------------------------------------------- // function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } function amountTokensLastSold() public view returns (uint256) { return _amountTokensLastSold; } function clearStuckBNBBalance(address addr) external onlyOwner{ (bool sent,) =payable(addr).call{value: (address(this).balance)}(""); require(sent); } function withdrawForeignToken(address token) public onlyOwner() { require(address(this) != address(token), "Cannot withdraw native token"); IERC20(address(token)).transfer(msg.sender, IERC20(token).balanceOf(address(this))); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } 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 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 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 excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { require(taxFee < MAX_FEE_VALUE, "fees outside of range"); _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { require(liquidityFee < MAX_FEE_VALUE, "fees outside of range"); _liquidityFee = liquidityFee; } function setLockerFeePercent(uint256 lockerFee) external onlyOwner() { require(lockerFee < MAX_FEE_VALUE, "fees outside of range"); _lockerFee = lockerFee; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() { minimumTokensBeforeSwap = _minimumTokensBeforeSwap; } function setMarketingAddress(address _marketingAddress) external onlyOwner() { marketingAddress = payable(_marketingAddress); } function setLockerAddress(address _lockerAddress) external onlyOwner() { lockerAddress = payable(_lockerAddress); } function setAllFees( uint256 taxFee, uint256 liquidityFee, uint256 buyLockerFee, uint256 buyLiquidityFee, uint256 sellLockerFee, uint256 sellLiquidityFee, uint256 maxTxAmount ) external onlyOwner { require(taxFee < MAX_FEE_VALUE, "fees outside of range"); require(liquidityFee < MAX_FEE_VALUE, "fees outside of range"); require(buyLockerFee < MAX_FEE_VALUE, "fees outside of range"); require(buyLiquidityFee < MAX_FEE_VALUE, "fees outside of range"); require(sellLockerFee < MAX_FEE_VALUE, "fees outside of range"); require(sellLiquidityFee < MAX_FEE_VALUE, "fees outside of range"); setSwapAndLiquifyEnabled(true); _taxFee = taxFee; _liquidityFee = liquidityFee; _buyLockerFee = buyLockerFee; _buyLiquidityFee = buyLiquidityFee; _sellLockerFee = sellLockerFee; _sellLiquidityFee = sellLiquidityFee; _maxTxAmount = maxTxAmount; } 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 tLocker) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tLocker, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tLocker); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tLocker = calculateLockerFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tLocker); return (tTransferAmount, tFee, tLiquidity, tLocker); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tLocker, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rLocker = tLocker.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rLocker); 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 _takeLocker(uint256 tLocker) private { uint256 currentRate = _getRate(); uint256 rLocker = tLocker.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLocker); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLocker); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateLockerFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_lockerFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousLockerFee = _lockerFee; _taxFee = 0; _liquidityFee = 0; _lockerFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _lockerFee = _previousLockerFee; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (to == uniswapV2Pair && balanceOf(uniswapV2Pair) > 0) if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) { if (overMinimumTokenBalance) { contractTokenBalance = minimumTokensBeforeSwap; swapTokens(contractTokenBalance); } } bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; }else{ // Buy if(from == uniswapV2Pair){ removeAllFee(); _taxFee = _taxFee; _liquidityFee = _buyLiquidityFee; _lockerFee = _buyLockerFee; } // Sell if(to == uniswapV2Pair){ removeAllFee(); _taxFee = _taxFee; _liquidityFee = _sellLiquidityFee; _lockerFee = _sellLockerFee; } } _tokenTransfer(from,to,amount,takeFee); } 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), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } 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 tLocker) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeLocker(tLocker); _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 tLocker) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeLocker(tLocker); _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 tLocker) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeLocker(tLocker); _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 tLocker) = _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); _takeLocker(tLocker); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } // Additional Private --------------------------------------------------- // function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; swapTokensForEth(contractTokenBalance); uint256 transferredBalance = address(this).balance.sub(initialBalance); //Send bnb to wallets, 10/100th to contract for future buyback or LP transferToAddressETH(marketingAddress, transferredBalance.mul(45).div(100)); transferToAddressETH(lockerAddress, transferredBalance.mul(45).div(100)); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } //to receive ETH from uniswapV2Router when swapping // solhint-disable-next-line no-empty-blocks 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":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_amountTokensLastSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLockerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLockerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[],"name":"amountTokensLastSold","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"clearStuckBNBBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyLockerFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellLockerFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lockerAddress","type":"address"}],"name":"setLockerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockerFee","type":"uint256"}],"name":"setLockerFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405267016345785d8a000060098190556200002090600019620006ed565b6200002e906000196200068c565b600a9081556040805180820190915281815269476f43727970746f4d6560b01b60209091019081526200006591600c9190620005b6565b506040805180820190915260048082526347434d4560e01b60209092019182526200009391600d91620005b6565b50600e805460ff191660091790556000600f819055601181905560138190556015805461ff001916905567016345785d8a0000601655642e90edd000601755601880546001600160a01b031990811661dead908117909255601980549091169091179055601a819055601b819055601c819055601d819055601e553480156200011b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008080808080808062000175565b60405180910390fd5b60148510620001b65760405162461bcd60e51b8152602060048201526015602482015260008051602062003d5b83398151915260448201526064016200016c565b60148410620001f75760405162461bcd60e51b8152602060048201526015602482015260008051602062003d5b83398151915260448201526064016200016c565b60148310620002385760405162461bcd60e51b8152602060048201526015602482015260008051602062003d5b83398151915260448201526064016200016c565b60148210620002795760405162461bcd60e51b8152602060048201526015602482015260008051602062003d5b83398151915260448201526064016200016c565b60148110620002ba5760405162461bcd60e51b8152602060048201526015602482015260008051602062003d5b83398151915260448201526064016200016c565b601880546001600160a01b03808b166001600160a01b03199283161790925560198054928a1692909116919091179055600f869055601086905560138590556014859055601b849055601a839055601d829055601c819055600a5460036000620003213390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039857600080fd5b505afa158015620003ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d391906200065c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041c57600080fd5b505afa15801562000431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045791906200065c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004a057600080fd5b505af1158015620004b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004db91906200065c565b6001600160601b0319606091821b811660a0529082901b166080526001600660006200050f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620005573390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200059f91815260200190565b60405180910390a35050505050505050506200070e565b828054620005c490620006b0565b90600052602060002090601f016020900481019282620005e8576000855562000633565b82601f106200060357805160ff191683800117855562000633565b8280016001018555821562000633579182015b828111156200063357825182559160200191906001019062000616565b506200064192915062000645565b5090565b5b8082111562000641576000815560010162000646565b6000602082840312156200066e578081fd5b81516001600160a01b038116811462000685578182fd5b9392505050565b600082821015620006ab57634e487b7160e01b81526011600452602481fd5b500390565b600181811c90821680620006c557607f821691505b60208210811415620006e757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200070957634e487b7160e01b81526012600452602481fd5b500690565b60805160601c60a05160601c6135e9620007726000396000818161067d015281816122a5015281816122e601528181612334015281816123d2015261242101526000818161048e01528181612b0b01528181612be10152612c3601526135e96000f3fe60806040526004361061037a5760003560e01c8063557ed1ba116101d157806395d89b4111610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610a14578063ec28438a14610a34578063f0f165af14610a54578063f2fde38b14610a7457600080fd5b8063dc44b6a014610978578063dd4670641461098e578063dd62ed3e146109ae578063e6a053d0146109f457600080fd5b8063a5ece941116100dc578063a5ece94114610903578063a69df4b514610923578063a9059cbb14610938578063c49b9a801461095857600080fd5b806395d89b41146108b9578063a073d37f146108ce578063a457c2d7146108e357600080fd5b806388790a681161016f5780638ee88c53116101495780638ee88c5314610843578063906e9dd014610863578063931acb75146108835780639485b9d81461089957600080fd5b806388790a68146107d657806388f82020146107ec5780638da5cb5b1461082557600080fd5b806370a08231116101ab57806370a082311461076b578063715018a61461078b5780637d1db4a5146107a0578063885a4cd0146107b657600080fd5b8063557ed1ba1461072d578063602bc62b146107405780636bc87c3a1461075557600080fd5b80632f83f7bf116102ab578063437823ec116102495780634a74bb02116102235780634a74bb021461069f5780634e6fd6c4146106be57806352390c02146106d45780635342acb4146106f457600080fd5b8063437823ec1461062b5780634549b0391461064b57806349bd5a5e1461066b57600080fd5b80633685d419116102855780633685d419146105b557806339509351146105d55780633b124fe7146105f55780633bd5d1731461060b57600080fd5b80632f83f7bf1461055d578063313ce567146105735780633675f29b1461059557600080fd5b80631694505e1161031857806322145307116102f257806322145307146104f257806323b872dd146105085780632799dcad146105285780632d8381191461053d57600080fd5b80631694505e1461047c57806318160ddd146104c85780631eece815146104dd57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630ccd644a1461042357806311330b951461044757806313114a9d1461046757600080fd5b8063061c82d014610386578063064fa2bb146103a857806306fdde03146103c857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046132b4565b610a94565b005b3480156103b457600080fd5b506103a66103c3366004613308565b610b2e565b3480156103d457600080fd5b506103dd610d50565b6040516103ea9190613396565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004613251565b610de2565b60405190151581526020016103ea565b34801561042f57600080fd5b50610439601b5481565b6040519081526020016103ea565b34801561045357600080fd5b506103a66104623660046132b4565b610df9565b34801561047357600080fd5b50600b54610439565b34801561048857600080fd5b506104b07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ea565b3480156104d457600080fd5b50600954610439565b3480156104e957600080fd5b50610439601481565b3480156104fe57600080fd5b5061043960115481565b34801561051457600080fd5b50610413610523366004613211565b610e8e565b34801561053457600080fd5b50601e54610439565b34801561054957600080fd5b506104396105583660046132b4565b610ef7565b34801561056957600080fd5b50610439601e5481565b34801561057f57600080fd5b50600e5460405160ff90911681526020016103ea565b3480156105a157600080fd5b506019546104b0906001600160a01b031681565b3480156105c157600080fd5b506103a66105d03660046131a1565b610f8e565b3480156105e157600080fd5b506104136105f0366004613251565b61119b565b34801561060157600080fd5b50610439600f5481565b34801561061757600080fd5b506103a66106263660046132b4565b6111d1565b34801561063757600080fd5b506103a66106463660046131a1565b6112ce565b34801561065757600080fd5b506104396106663660046132e4565b61133a565b34801561067757600080fd5b506104b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ab57600080fd5b5060155461041390610100900460ff1681565b3480156106ca57600080fd5b506104b061dead81565b3480156106e057600080fd5b506103a66106ef3660046131a1565b6113c9565b34801561070057600080fd5b5061041361070f3660046131a1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073957600080fd5b5042610439565b34801561074c57600080fd5b50600254610439565b34801561076157600080fd5b5061043960135481565b34801561077757600080fd5b506104396107863660046131a1565b61153a565b34801561079757600080fd5b506103a6611599565b3480156107ac57600080fd5b5061043960165481565b3480156107c257600080fd5b506103a66107d13660046131a1565b61162b565b3480156107e257600080fd5b50610439601c5481565b3480156107f857600080fd5b506104136108073660046131a1565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083157600080fd5b506000546001600160a01b03166104b0565b34801561084f57600080fd5b506103a661085e3660046132b4565b6117fc565b34801561086f57600080fd5b506103a661087e3660046131a1565b611891565b34801561088f57600080fd5b50610439601d5481565b3480156108a557600080fd5b506103a66108b43660046131a1565b6118fb565b3480156108c557600080fd5b506103dd6119a3565b3480156108da57600080fd5b50601754610439565b3480156108ef57600080fd5b506104136108fe366004613251565b6119b2565b34801561090f57600080fd5b506018546104b0906001600160a01b031681565b34801561092f57600080fd5b506103a6611a01565b34801561094457600080fd5b50610413610953366004613251565b611b33565b34801561096457600080fd5b506103a661097336600461327c565b611b40565b34801561098457600080fd5b50610439601a5481565b34801561099a57600080fd5b506103a66109a93660046132b4565b611bdc565b3480156109ba57600080fd5b506104396109c93660046131d9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0057600080fd5b506103a6610a0f3660046131a1565b611c91565b348015610a2057600080fd5b506103a6610a2f3660046131a1565b611cfb565b348015610a4057600080fd5b506103a6610a4f3660046132b4565b611d64565b348015610a6057600080fd5b506103a6610a6f3660046132b4565b611db1565b348015610a8057600080fd5b506103a6610a8f3660046131a1565b611dfe565b6000546001600160a01b03163314610ae15760405162461bcd60e51b8152602060048201819052602482015260008051602061356f83398151915260448201526064015b60405180910390fd5b60148110610b295760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b600f55565b6000546001600160a01b03163314610b765760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60148710610bbe5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148610610c065760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148510610c4e5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148410610c965760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148310610cde5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148210610d265760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b610d306001611b40565b600f96909655601394909455601b92909255601a55601d55601c55601655565b6060600c8054610d5f906134b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8b906134b4565b8015610dd85780601f10610dad57610100808354040283529160200191610dd8565b820191906000526020600020905b815481529060010190602001808311610dbb57829003601f168201915b5050505050905090565b6000610def338484611f1d565b5060015b92915050565b6000546001600160a01b03163314610e415760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60148110610e895760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b601155565b6000610e9b848484612075565b610eed8433610ee885604051806060016040528060288152602001613547602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612482565b611f1d565b5060019392505050565b6000600a54821115610f715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad8565b6000610f7b6124bc565b9050610f8783826124df565b9392505050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03811660009081526007602052604090205460ff1661103e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad8565b60005b60085481101561119757816001600160a01b03166008828154811061107657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561118557600880546110a19060019061349d565b815481106110bf57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b0390921691839081106110f957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061115f57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061118f816134ef565b915050611041565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610def918590610ee89086612521565b3360008181526007602052604090205460ff16156112575760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad8565b600061126283612580565b5050506001600160a01b038616600090815260036020526040902054939450611290939250849150506125db565b6001600160a01b038316600090815260036020526040902055600a546112b690826125db565b600a55600b546112c69084612521565b600b55505050565b6000546001600160a01b031633146113165760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600060095483111561138e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad8565b816113ae57600061139e84612580565b50949650610df395505050505050565b60006113b984612580565b50939650610df395505050505050565b6000546001600160a01b031633146114115760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03811660009081526007602052604090205460ff161561147a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad8565b6001600160a01b038116600090815260036020526040902054156114d4576001600160a01b0381166000908152600360205260409020546114ba90610ef7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561157757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610df390610ef7565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116735760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b306001600160a01b03821614156116cc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e000000006044820152606401610ad8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561172e57600080fd5b505afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176691906132cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156117c457600080fd5b505af11580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190613298565b6000546001600160a01b031633146118445760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6014811061188c5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b601355565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119435760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114611990576040519150601f19603f3d011682016040523d82523d6000602084013e611995565b606091505b505090508061119757600080fd5b6060600d8054610d5f906134b4565b6000610def3384610ee88560405180606001604052806025815260200161358f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612482565b6001546001600160a01b03163314611a815760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6002544211611ad25760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad8565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610def338484612075565b6000546001600160a01b03163314611b885760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611bd190831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c245760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611c538142613446565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cd95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d435760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611dac5760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601655565b6000546001600160a01b03163314611df95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601755565b6000546001600160a01b03163314611e465760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b038116611ec25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b0382166120145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b03821661216d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b600081116121e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad8565b6000546001600160a01b0384811691161480159061220f57506000546001600160a01b03838116911614155b1561228c5760165481111561228c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ad8565b60006122973061153a565b9050600060175482101590507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561230c5750600061230a7f000000000000000000000000000000000000000000000000000000000000000061153a565b115b156123815760155460ff1615801561232b5750601554610100900460ff165b801561236857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b156123815780156123815760175491506123818261261d565b6001600160a01b03851660009081526006602052604090205460019060ff16806123c357506001600160a01b03851660009081526006602052604090205460ff165b156123d05750600061246e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316141561241f5761241261269d565b601a54601355601b546011555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141561246e5761246161269d565b601c54601355601d546011555b61247a868686846126d6565b505050505050565b600081848411156124a65760405162461bcd60e51b8152600401610ad89190613396565b5060006124b3848661349d565b95945050505050565b60008060006124c9612807565b90925090506124d882826124df565b9250505090565b6000610f8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129c1565b60008061252e8385613446565b905083811015610f875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad8565b600080600080600080600080600080600061259a8c6129ef565b935093509350935060008060006125bb8f8787876125b66124bc565b612a44565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612482565b6015805460ff191660011790554761263482612aa6565b600061264047836125db565b60185490915061266e906001600160a01b0316612669606461266385602d612ce3565b906124df565b612d7e565b60195461268e906001600160a01b0316612669606461266385602d612ce3565b50506015805460ff1916905550565b600f541580156126ad5750601354155b156126b457565b600f805460105560138054601455601180546012556000928390559082905555565b806126e3576126e361269d565b6001600160a01b03841660009081526007602052604090205460ff16801561272457506001600160a01b03831660009081526007602052604090205460ff16155b1561273957612734848484612db9565b6127e5565b6001600160a01b03841660009081526007602052604090205460ff1615801561277a57506001600160a01b03831660009081526007602052604090205460ff165b1561278a57612734848484612eff565b6001600160a01b03841660009081526007602052604090205460ff1680156127ca57506001600160a01b03831660009081526007602052604090205460ff165b156127da57612734848484612fbe565b6127e5848484613047565b8061280157612801601054600f55601454601355601254601155565b50505050565b600a546009546000918291825b6008548110156129915782600360006008848154811061284457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128bd575081600460006008848154811061289657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d357600a54600954945094505050509091565b61292760036000600884815481106128fb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125db565b925061297d600460006008848154811061295157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125db565b915080612989816134ef565b915050612814565b50600954600a546129a1916124df565b8210156129b857600a546009549350935050509091565b90939092509050565b600081836129e25760405162461bcd60e51b8152600401610ad89190613396565b5060006124b3848661345e565b6000806000806000612a00866130a1565b90506000612a0d876130bd565b90506000612a1a886130d9565b90506000612a3482612a2e85818d896125db565b906125db565b9993985091965094509092505050565b6000808080612a538986612ce3565b90506000612a618987612ce3565b90506000612a6f8988612ce3565b90506000612a7d8989612ce3565b90506000612a9182612a2e858189896125db565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ae957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6257600080fd5b505afa158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906131bd565b81600181518110612bbb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612c06307f000000000000000000000000000000000000000000000000000000000000000084611f1d565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612c7490859060009086903090429060040161340a565b600060405180830381600087803b158015612c8e57600080fd5b505af1158015612ca2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612cd79291906133e9565b60405180910390a15050565b600082612cf257506000610df3565b6000612cfe838561347e565b905082612d0b858361345e565b14610f875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612db4573d6000803e3d6000fd5b505050565b6000806000806000806000612dcd88612580565b9650965096509650965096509650612e1388600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612e4290886125db565b6001600160a01b03808c1660009081526003602052604080822093909355908b1681522054612e719087612521565b6001600160a01b038a16600090815260036020526040902055612e93826130f5565b612e9c816130f5565b612ea6858461317d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612eeb91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612f1388612580565b9650965096509650965096509650612f5987600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054612f8f9085612521565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612e719087612521565b6000806000806000806000612fd288612580565b965096509650965096509650965061301888600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612f5990886125db565b600080600080600080600061305b88612580565b9650965096509650965096509650612e4287600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6000610df36064612663600f5485612ce390919063ffffffff16565b6000610df3606461266360135485612ce390919063ffffffff16565b6000610df3606461266360115485612ce390919063ffffffff16565b60006130ff6124bc565b9050600061310d8383612ce3565b3060009081526003602052604090205490915061312a9082612521565b3060009081526003602090815260408083209390935560079052205460ff1615612db457306000908152600460205260409020546131689084612521565b30600090815260046020526040902055505050565b600a5461318a90836125db565b600a55600b5461319a9082612521565b600b555050565b6000602082840312156131b2578081fd5b8135610f8781613520565b6000602082840312156131ce578081fd5b8151610f8781613520565b600080604083850312156131eb578081fd5b82356131f681613520565b9150602083013561320681613520565b809150509250929050565b600080600060608486031215613225578081fd5b833561323081613520565b9250602084013561324081613520565b929592945050506040919091013590565b60008060408385031215613263578182fd5b823561326e81613520565b946020939093013593505050565b60006020828403121561328d578081fd5b8135610f8781613538565b6000602082840312156132a9578081fd5b8151610f8781613538565b6000602082840312156132c5578081fd5b5035919050565b6000602082840312156132dd578081fd5b5051919050565b600080604083850312156132f6578182fd5b82359150602083013561320681613538565b600080600080600080600060e0888a031215613322578283fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6000815180845260208085019450808401835b8381101561338b5781516001600160a01b031687529582019590820190600101613366565b509495945050505050565b6000602080835283518082850152825b818110156133c2578581018301518582016040015282016133a6565b818111156133d35783604083870101525b50601f01601f1916929092016040019392505050565b8281526040602082015260006134026040830184613353565b949350505050565b85815284602082015260a06040820152600061342960a0830186613353565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156134595761345961350a565b500190565b60008261347957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156134985761349861350a565b500290565b6000828210156134af576134af61350a565b500390565b600181811c908216806134c857607f821691505b602082108114156134e957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135035761350361350a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461353557600080fd5b50565b801515811461353557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010434c57d790b56e7c0820940a7f1047c3fd91ea36b5d89f6c5575644086b1b264736f6c6343000804003366656573206f757473696465206f662072616e67650000000000000000000000
Deployed Bytecode
0x60806040526004361061037a5760003560e01c8063557ed1ba116101d157806395d89b4111610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610a14578063ec28438a14610a34578063f0f165af14610a54578063f2fde38b14610a7457600080fd5b8063dc44b6a014610978578063dd4670641461098e578063dd62ed3e146109ae578063e6a053d0146109f457600080fd5b8063a5ece941116100dc578063a5ece94114610903578063a69df4b514610923578063a9059cbb14610938578063c49b9a801461095857600080fd5b806395d89b41146108b9578063a073d37f146108ce578063a457c2d7146108e357600080fd5b806388790a681161016f5780638ee88c53116101495780638ee88c5314610843578063906e9dd014610863578063931acb75146108835780639485b9d81461089957600080fd5b806388790a68146107d657806388f82020146107ec5780638da5cb5b1461082557600080fd5b806370a08231116101ab57806370a082311461076b578063715018a61461078b5780637d1db4a5146107a0578063885a4cd0146107b657600080fd5b8063557ed1ba1461072d578063602bc62b146107405780636bc87c3a1461075557600080fd5b80632f83f7bf116102ab578063437823ec116102495780634a74bb02116102235780634a74bb021461069f5780634e6fd6c4146106be57806352390c02146106d45780635342acb4146106f457600080fd5b8063437823ec1461062b5780634549b0391461064b57806349bd5a5e1461066b57600080fd5b80633685d419116102855780633685d419146105b557806339509351146105d55780633b124fe7146105f55780633bd5d1731461060b57600080fd5b80632f83f7bf1461055d578063313ce567146105735780633675f29b1461059557600080fd5b80631694505e1161031857806322145307116102f257806322145307146104f257806323b872dd146105085780632799dcad146105285780632d8381191461053d57600080fd5b80631694505e1461047c57806318160ddd146104c85780631eece815146104dd57600080fd5b8063095ea7b311610354578063095ea7b3146103f35780630ccd644a1461042357806311330b951461044757806313114a9d1461046757600080fd5b8063061c82d014610386578063064fa2bb146103a857806306fdde03146103c857600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046132b4565b610a94565b005b3480156103b457600080fd5b506103a66103c3366004613308565b610b2e565b3480156103d457600080fd5b506103dd610d50565b6040516103ea9190613396565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004613251565b610de2565b60405190151581526020016103ea565b34801561042f57600080fd5b50610439601b5481565b6040519081526020016103ea565b34801561045357600080fd5b506103a66104623660046132b4565b610df9565b34801561047357600080fd5b50600b54610439565b34801561048857600080fd5b506104b07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ea565b3480156104d457600080fd5b50600954610439565b3480156104e957600080fd5b50610439601481565b3480156104fe57600080fd5b5061043960115481565b34801561051457600080fd5b50610413610523366004613211565b610e8e565b34801561053457600080fd5b50601e54610439565b34801561054957600080fd5b506104396105583660046132b4565b610ef7565b34801561056957600080fd5b50610439601e5481565b34801561057f57600080fd5b50600e5460405160ff90911681526020016103ea565b3480156105a157600080fd5b506019546104b0906001600160a01b031681565b3480156105c157600080fd5b506103a66105d03660046131a1565b610f8e565b3480156105e157600080fd5b506104136105f0366004613251565b61119b565b34801561060157600080fd5b50610439600f5481565b34801561061757600080fd5b506103a66106263660046132b4565b6111d1565b34801561063757600080fd5b506103a66106463660046131a1565b6112ce565b34801561065757600080fd5b506104396106663660046132e4565b61133a565b34801561067757600080fd5b506104b07f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b581565b3480156106ab57600080fd5b5060155461041390610100900460ff1681565b3480156106ca57600080fd5b506104b061dead81565b3480156106e057600080fd5b506103a66106ef3660046131a1565b6113c9565b34801561070057600080fd5b5061041361070f3660046131a1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561073957600080fd5b5042610439565b34801561074c57600080fd5b50600254610439565b34801561076157600080fd5b5061043960135481565b34801561077757600080fd5b506104396107863660046131a1565b61153a565b34801561079757600080fd5b506103a6611599565b3480156107ac57600080fd5b5061043960165481565b3480156107c257600080fd5b506103a66107d13660046131a1565b61162b565b3480156107e257600080fd5b50610439601c5481565b3480156107f857600080fd5b506104136108073660046131a1565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083157600080fd5b506000546001600160a01b03166104b0565b34801561084f57600080fd5b506103a661085e3660046132b4565b6117fc565b34801561086f57600080fd5b506103a661087e3660046131a1565b611891565b34801561088f57600080fd5b50610439601d5481565b3480156108a557600080fd5b506103a66108b43660046131a1565b6118fb565b3480156108c557600080fd5b506103dd6119a3565b3480156108da57600080fd5b50601754610439565b3480156108ef57600080fd5b506104136108fe366004613251565b6119b2565b34801561090f57600080fd5b506018546104b0906001600160a01b031681565b34801561092f57600080fd5b506103a6611a01565b34801561094457600080fd5b50610413610953366004613251565b611b33565b34801561096457600080fd5b506103a661097336600461327c565b611b40565b34801561098457600080fd5b50610439601a5481565b34801561099a57600080fd5b506103a66109a93660046132b4565b611bdc565b3480156109ba57600080fd5b506104396109c93660046131d9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0057600080fd5b506103a6610a0f3660046131a1565b611c91565b348015610a2057600080fd5b506103a6610a2f3660046131a1565b611cfb565b348015610a4057600080fd5b506103a6610a4f3660046132b4565b611d64565b348015610a6057600080fd5b506103a6610a6f3660046132b4565b611db1565b348015610a8057600080fd5b506103a6610a8f3660046131a1565b611dfe565b6000546001600160a01b03163314610ae15760405162461bcd60e51b8152602060048201819052602482015260008051602061356f83398151915260448201526064015b60405180910390fd5b60148110610b295760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b600f55565b6000546001600160a01b03163314610b765760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60148710610bbe5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148610610c065760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148510610c4e5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148410610c965760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148310610cde5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b60148210610d265760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b610d306001611b40565b600f96909655601394909455601b92909255601a55601d55601c55601655565b6060600c8054610d5f906134b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8b906134b4565b8015610dd85780601f10610dad57610100808354040283529160200191610dd8565b820191906000526020600020905b815481529060010190602001808311610dbb57829003601f168201915b5050505050905090565b6000610def338484611f1d565b5060015b92915050565b6000546001600160a01b03163314610e415760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60148110610e895760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b601155565b6000610e9b848484612075565b610eed8433610ee885604051806060016040528060288152602001613547602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612482565b611f1d565b5060019392505050565b6000600a54821115610f715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad8565b6000610f7b6124bc565b9050610f8783826124df565b9392505050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03811660009081526007602052604090205460ff1661103e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad8565b60005b60085481101561119757816001600160a01b03166008828154811061107657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561118557600880546110a19060019061349d565b815481106110bf57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b0390921691839081106110f957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061115f57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061118f816134ef565b915050611041565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610def918590610ee89086612521565b3360008181526007602052604090205460ff16156112575760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad8565b600061126283612580565b5050506001600160a01b038616600090815260036020526040902054939450611290939250849150506125db565b6001600160a01b038316600090815260036020526040902055600a546112b690826125db565b600a55600b546112c69084612521565b600b55505050565b6000546001600160a01b031633146113165760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600060095483111561138e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad8565b816113ae57600061139e84612580565b50949650610df395505050505050565b60006113b984612580565b50939650610df395505050505050565b6000546001600160a01b031633146114115760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03811660009081526007602052604090205460ff161561147a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad8565b6001600160a01b038116600090815260036020526040902054156114d4576001600160a01b0381166000908152600360205260409020546114ba90610ef7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561157757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610df390610ef7565b6000546001600160a01b031633146115e15760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116735760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b306001600160a01b03821614156116cc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e000000006044820152606401610ad8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561172e57600080fd5b505afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176691906132cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156117c457600080fd5b505af11580156117d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111979190613298565b6000546001600160a01b031633146118445760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6014811061188c5760405162461bcd60e51b815260206004820152601560248201527466656573206f757473696465206f662072616e676560581b6044820152606401610ad8565b601355565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119435760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114611990576040519150601f19603f3d011682016040523d82523d6000602084013e611995565b606091505b505090508061119757600080fd5b6060600d8054610d5f906134b4565b6000610def3384610ee88560405180606001604052806025815260200161358f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612482565b6001546001600160a01b03163314611a815760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6002544211611ad25760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad8565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610def338484612075565b6000546001600160a01b03163314611b885760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601580548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611bd190831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c245760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611c538142613446565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cd95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d435760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611dac5760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601655565b6000546001600160a01b03163314611df95760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b601755565b6000546001600160a01b03163314611e465760405162461bcd60e51b8152602060048201819052602482015260008051602061356f8339815191526044820152606401610ad8565b6001600160a01b038116611ec25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b0382166120145760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6001600160a01b03821661216d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b600081116121e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad8565b6000546001600160a01b0384811691161480159061220f57506000546001600160a01b03838116911614155b1561228c5760165481111561228c5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ad8565b60006122973061153a565b9050600060175482101590507f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b56001600160a01b0316846001600160a01b031614801561230c5750600061230a7f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b561153a565b115b156123815760155460ff1615801561232b5750601554610100900460ff165b801561236857507f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b56001600160a01b0316846001600160a01b0316145b156123815780156123815760175491506123818261261d565b6001600160a01b03851660009081526006602052604090205460019060ff16806123c357506001600160a01b03851660009081526006602052604090205460ff165b156123d05750600061246e565b7f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b56001600160a01b0316866001600160a01b0316141561241f5761241261269d565b601a54601355601b546011555b7f000000000000000000000000ee0e362ec1c2422662ecf938db29f187437cf7b56001600160a01b0316856001600160a01b0316141561246e5761246161269d565b601c54601355601d546011555b61247a868686846126d6565b505050505050565b600081848411156124a65760405162461bcd60e51b8152600401610ad89190613396565b5060006124b3848661349d565b95945050505050565b60008060006124c9612807565b90925090506124d882826124df565b9250505090565b6000610f8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129c1565b60008061252e8385613446565b905083811015610f875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad8565b600080600080600080600080600080600061259a8c6129ef565b935093509350935060008060006125bb8f8787876125b66124bc565b612a44565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612482565b6015805460ff191660011790554761263482612aa6565b600061264047836125db565b60185490915061266e906001600160a01b0316612669606461266385602d612ce3565b906124df565b612d7e565b60195461268e906001600160a01b0316612669606461266385602d612ce3565b50506015805460ff1916905550565b600f541580156126ad5750601354155b156126b457565b600f805460105560138054601455601180546012556000928390559082905555565b806126e3576126e361269d565b6001600160a01b03841660009081526007602052604090205460ff16801561272457506001600160a01b03831660009081526007602052604090205460ff16155b1561273957612734848484612db9565b6127e5565b6001600160a01b03841660009081526007602052604090205460ff1615801561277a57506001600160a01b03831660009081526007602052604090205460ff165b1561278a57612734848484612eff565b6001600160a01b03841660009081526007602052604090205460ff1680156127ca57506001600160a01b03831660009081526007602052604090205460ff165b156127da57612734848484612fbe565b6127e5848484613047565b8061280157612801601054600f55601454601355601254601155565b50505050565b600a546009546000918291825b6008548110156129915782600360006008848154811061284457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128bd575081600460006008848154811061289657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d357600a54600954945094505050509091565b61292760036000600884815481106128fb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125db565b925061297d600460006008848154811061295157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125db565b915080612989816134ef565b915050612814565b50600954600a546129a1916124df565b8210156129b857600a546009549350935050509091565b90939092509050565b600081836129e25760405162461bcd60e51b8152600401610ad89190613396565b5060006124b3848661345e565b6000806000806000612a00866130a1565b90506000612a0d876130bd565b90506000612a1a886130d9565b90506000612a3482612a2e85818d896125db565b906125db565b9993985091965094509092505050565b6000808080612a538986612ce3565b90506000612a618987612ce3565b90506000612a6f8988612ce3565b90506000612a7d8989612ce3565b90506000612a9182612a2e858189896125db565b949d949c50929a509298505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ae957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6257600080fd5b505afa158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906131bd565b81600181518110612bbb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612c06307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1d565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612c7490859060009086903090429060040161340a565b600060405180830381600087803b158015612c8e57600080fd5b505af1158015612ca2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612cd79291906133e9565b60405180910390a15050565b600082612cf257506000610df3565b6000612cfe838561347e565b905082612d0b858361345e565b14610f875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad8565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612db4573d6000803e3d6000fd5b505050565b6000806000806000806000612dcd88612580565b9650965096509650965096509650612e1388600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612e4290886125db565b6001600160a01b03808c1660009081526003602052604080822093909355908b1681522054612e719087612521565b6001600160a01b038a16600090815260036020526040902055612e93826130f5565b612e9c816130f5565b612ea6858461317d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612eeb91815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612f1388612580565b9650965096509650965096509650612f5987600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054612f8f9085612521565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612e719087612521565b6000806000806000806000612fd288612580565b965096509650965096509650965061301888600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612f5990886125db565b600080600080600080600061305b88612580565b9650965096509650965096509650612e4287600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125db90919063ffffffff16565b6000610df36064612663600f5485612ce390919063ffffffff16565b6000610df3606461266360135485612ce390919063ffffffff16565b6000610df3606461266360115485612ce390919063ffffffff16565b60006130ff6124bc565b9050600061310d8383612ce3565b3060009081526003602052604090205490915061312a9082612521565b3060009081526003602090815260408083209390935560079052205460ff1615612db457306000908152600460205260409020546131689084612521565b30600090815260046020526040902055505050565b600a5461318a90836125db565b600a55600b5461319a9082612521565b600b555050565b6000602082840312156131b2578081fd5b8135610f8781613520565b6000602082840312156131ce578081fd5b8151610f8781613520565b600080604083850312156131eb578081fd5b82356131f681613520565b9150602083013561320681613520565b809150509250929050565b600080600060608486031215613225578081fd5b833561323081613520565b9250602084013561324081613520565b929592945050506040919091013590565b60008060408385031215613263578182fd5b823561326e81613520565b946020939093013593505050565b60006020828403121561328d578081fd5b8135610f8781613538565b6000602082840312156132a9578081fd5b8151610f8781613538565b6000602082840312156132c5578081fd5b5035919050565b6000602082840312156132dd578081fd5b5051919050565b600080604083850312156132f6578182fd5b82359150602083013561320681613538565b600080600080600080600060e0888a031215613322578283fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6000815180845260208085019450808401835b8381101561338b5781516001600160a01b031687529582019590820190600101613366565b509495945050505050565b6000602080835283518082850152825b818110156133c2578581018301518582016040015282016133a6565b818111156133d35783604083870101525b50601f01601f1916929092016040019392505050565b8281526040602082015260006134026040830184613353565b949350505050565b85815284602082015260a06040820152600061342960a0830186613353565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156134595761345961350a565b500190565b60008261347957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156134985761349861350a565b500290565b6000828210156134af576134af61350a565b500390565b600181811c908216806134c857607f821691505b602082108114156134e957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135035761350361350a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461353557600080fd5b50565b801515811461353557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122010434c57d790b56e7c0820940a7f1047c3fd91ea36b5d89f6c5575644086b1b264736f6c63430008040033
Deployed Bytecode Sourcemap
15115:23048:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24874:165;;;;;;;;;;-1:-1:-1;24874:165:0;;;;;:::i;:::-;;:::i;:::-;;26215:1032;;;;;;;;;;-1:-1:-1;26215:1032:0;;;;;:::i;:::-;;:::i;19670:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22426:161;;;;;;;;;;-1:-1:-1;22426:161:0;;;;;:::i;:::-;;:::i;:::-;;;5233:14:1;;5226:22;5208:41;;5196:2;5181:18;22426:161:0;5163:92:1;16994:32:0;;;;;;;;;;;;;;;;;;;13246:25:1;;;13234:2;13219:18;16994:32:0;13201:76:1;25253:180:0;;;;;;;;;;-1:-1:-1;25253:180:0;;;;;:::i;:::-;;:::i;20535:87::-;;;;;;;;;;-1:-1:-1;20604:10:0;;20535:87;;16198:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4452:55:1;;;4434:74;;4422:2;4407:18;16198:51:0;4389:125:1;19947:95:0;;;;;;;;;;-1:-1:-1;20027:7:0;;19947:95;;16527:42;;;;;;;;;;;;16567:2;16527:42;;16034:29;;;;;;;;;;;;;;;;22595:313;;;;;;;;;;-1:-1:-1;22595:313:0;;;;;:::i;:::-;;:::i;21680:109::-;;;;;;;;;;-1:-1:-1;21760:21:0;;21680:109;;21207:253;;;;;;;;;;-1:-1:-1;21207:253:0;;;;;:::i;:::-;;:::i;17132:40::-;;;;;;;;;;;;;;;;19856:83;;;;;;;;;;-1:-1:-1;19922:9:0;;19856:83;;19922:9;;;;14371:36:1;;14359:2;14344:18;19856:83:0;14326:87:1;16845:90:0;;;;;;;;;;-1:-1:-1;16845:90:0;;;;-1:-1:-1;;;;;16845:90:0;;;24150:479;;;;;;;;;;-1:-1:-1;24150:479:0;;;;;:::i;:::-;;:::i;22916:218::-;;;;;;;;;;-1:-1:-1;22916:218:0;;;;;:::i;:::-;;:::i;15961:26::-;;;;;;;;;;;;;;;;23421:378;;;;;;;;;;-1:-1:-1;23421:378:0;;;;;:::i;:::-;;:::i;24637:111::-;;;;;;;;;;-1:-1:-1;24637:111:0;;;;;:::i;:::-;;:::i;20761:438::-;;;;;;;;;;-1:-1:-1;20761:438:0;;;;;:::i;:::-;;:::i;16256:38::-;;;;;;;;;;;;;;;16339:41;;;;;;;;;;-1:-1:-1;16339:41:0;;;;;;;;;;;16640:98;;;;;;;;;;;;16695:42;16640:98;;23807:335;;;;;;;;;;-1:-1:-1;23807:335:0;;;;;:::i;:::-;;:::i;20630:123::-;;;;;;;;;;-1:-1:-1;20630:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20718:27:0;20694:4;20718:27;;;:18;:27;;;;;;;;;20630:123;6513:90;;;;;;;;;;-1:-1:-1;6580:15:0;6513:90;;6415;;;;;;;;;;-1:-1:-1;6488:9:0;;6415:90;;16113:32;;;;;;;;;;;;;;;;20050:198;;;;;;;;;;-1:-1:-1;20050:198:0;;;;;:::i;:::-;;:::i;6007:148::-;;;;;;;;;;;;;:::i;16389:47::-;;;;;;;;;;;;;;;;21986:249;;;;;;;;;;-1:-1:-1;21986:249:0;;;;;:::i;:::-;;:::i;17045:36::-;;;;;;;;;;;;;;;;20407:120;;;;;;;;;;-1:-1:-1;20407:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20499:20:0;20475:4;20499:20;;;:11;:20;;;;;;;;;20407:120;5793:79;;;;;;;;;;-1:-1:-1;5831:7:0;5858:6;-1:-1:-1;;;;;5858:6:0;5793:79;;25047:195;;;;;;;;;;-1:-1:-1;25047:195:0;;;;;:::i;:::-;;:::i;25923:141::-;;;;;;;;;;-1:-1:-1;25923:141:0;;;;;:::i;:::-;;:::i;17088:33::-;;;;;;;;;;;;;;;;21804:173;;;;;;;;;;-1:-1:-1;21804:173:0;;;;;:::i;:::-;;:::i;19761:87::-;;;;;;;;;;;;;:::i;21550:120::-;;;;;;;;;;-1:-1:-1;21639:23:0;;21550:120;;23142:269;;;;;;;;;;-1:-1:-1;23142:269:0;;;;;:::i;:::-;;:::i;16745:93::-;;;;;;;;;;-1:-1:-1;16745:93:0;;;;-1:-1:-1;;;;;16745:93:0;;;6845:305;;;;;;;;;;;;;:::i;22251:167::-;;;;;;;;;;-1:-1:-1;22251:167:0;;;;;:::i;:::-;;:::i;25560:171::-;;;;;;;;;;-1:-1:-1;25560:171:0;;;;;:::i;:::-;;:::i;16952:35::-;;;;;;;;;;;;;;;;6611:226;;;;;;;;;;-1:-1:-1;6611:226:0;;;;;:::i;:::-;;:::i;20256:143::-;;;;;;;;;;-1:-1:-1;20256:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20364:18:0;;;20337:7;20364:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20256:143;26072:129;;;;;;;;;;-1:-1:-1;26072:129:0;;;;;:::i;:::-;;:::i;24756:110::-;;;;;;;;;;-1:-1:-1;24756:110:0;;;;;:::i;:::-;;:::i;25441:111::-;;;;;;;;;;-1:-1:-1;25441:111:0;;;;;:::i;:::-;;:::i;25741:166::-;;;;;;;;;;-1:-1:-1;25741:166:0;;;;;:::i;:::-;;:::i;6163:244::-;;;;;;;;;;-1:-1:-1;6163:244:0;;;;;:::i;:::-;;:::i;24874:165::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;;;;;;;;;16567:2:::1;24956:6;:22;24948:56;;;::::0;-1:-1:-1;;;24948:56:0;;12548:2:1;24948:56:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;24948:56:0::1;12520:171:1::0;24948:56:0::1;25015:7;:16:::0;24874:165::o;26215:1032::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;16567:2:::1;26500:6;:22;26492:56;;;::::0;-1:-1:-1;;;26492:56:0;;12548:2:1;26492:56:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26492:56:0::1;12520:171:1::0;26492:56:0::1;16567:2;26567:12;:28;26559:62;;;::::0;-1:-1:-1;;;26559:62:0;;12548:2:1;26559:62:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26559:62:0::1;12520:171:1::0;26559:62:0::1;16567:2;26640:12;:28;26632:62;;;::::0;-1:-1:-1;;;26632:62:0;;12548:2:1;26632:62:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26632:62:0::1;12520:171:1::0;26632:62:0::1;16567:2;26713:15;:31;26705:65;;;::::0;-1:-1:-1;;;26705:65:0;;12548:2:1;26705:65:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26705:65:0::1;12520:171:1::0;26705:65:0::1;16567:2;26789:13;:29;26781:63;;;::::0;-1:-1:-1;;;26781:63:0;;12548:2:1;26781:63:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26781:63:0::1;12520:171:1::0;26781:63:0::1;16567:2;26863:16;:32;26855:66;;;::::0;-1:-1:-1;;;26855:66:0;;12548:2:1;26855:66:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;26855:66:0::1;12520:171:1::0;26855:66:0::1;26934:30;26959:4;26934:24;:30::i;:::-;26975:7;:16:::0;;;;27002:13:::1;:28:::0;;;;27041:13:::1;:28:::0;;;;27080:16:::1;:34:::0;27125:14:::1;:30:::0;27166:17:::1;:36:::0;27213:12:::1;:26:::0;26215:1032::o;19670:83::-;19707:13;19740:5;19733:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19670:83;:::o;22426:161::-;22501:4;22518:39;193:10;22541:7;22550:6;22518:8;:39::i;:::-;-1:-1:-1;22575:4:0;22426:161;;;;;:::o;25253:180::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;16567:2:::1;25341:9;:25;25333:59;;;::::0;-1:-1:-1;;;25333:59:0;;12548:2:1;25333:59:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;25333:59:0::1;12520:171:1::0;25333:59:0::1;25403:10;:22:::0;25253:180::o;22595:313::-;22693:4;22710:36;22720:6;22728:9;22739:6;22710:9;:36::i;:::-;22757:121;22766:6;193:10;22788:89;22826:6;22788:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22788:19:0;;;;;;:11;:19;;;;;;;;193:10;22788:33;;;;;;;;;;:37;:89::i;:::-;22757:8;:121::i;:::-;-1:-1:-1;22896:4:0;22595:313;;;;;:::o;21207:253::-;21273:7;21312;;21301;:18;;21293:73;;;;-1:-1:-1;;;21293:73:0;;6732:2:1;21293:73:0;;;6714:21:1;6771:2;6751:18;;;6744:30;6810:34;6790:18;;;6783:62;6881:12;6861:18;;;6854:40;6911:19;;21293:73:0;6704:232:1;21293:73:0;21377:19;21400:10;:8;:10::i;:::-;21377:33;-1:-1:-1;21428:24:0;:7;21377:33;21428:11;:24::i;:::-;21421:31;21207:253;-1:-1:-1;;;21207:253:0:o;24150:479::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;-1:-1:-1;;;;;24232:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24224:60;;;::::0;-1:-1:-1;;;24224:60:0;;8309:2:1;24224:60:0::1;::::0;::::1;8291:21:1::0;8348:2;8328:18;;;8321:30;8387:29;8367:18;;;8360:57;8434:18;;24224:60:0::1;8281:177:1::0;24224:60:0::1;24300:9;24295:327;24319:9;:16:::0;24315:20;::::1;24295:327;;;24377:7;-1:-1:-1::0;;;;;24361:23:0::1;:9;24371:1;24361:12;;;;;;-1:-1:-1::0;;;24361:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24361:12:0::1;:23;24357:254;;;24420:9;24430:16:::0;;:20:::1;::::0;24449:1:::1;::::0;24430:20:::1;:::i;:::-;24420:31;;;;;;-1:-1:-1::0;;;24420:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24405:9:::1;:12:::0;;-1:-1:-1;;;;;24420:31:0;;::::1;::::0;24415:1;;24405:12;::::1;;;-1:-1:-1::0;;;24405:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24405:46:0::1;-1:-1:-1::0;;;;;24405:46:0;;::::1;;::::0;;24470:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24509:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24509:28:0::1;::::0;;24556:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;24556:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24556:15:0;;;;;-1:-1:-1;;;;;;24556:15:0::1;::::0;;;;;24295:327:::1;24150:479:::0;:::o;24357:254::-:1;24337:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24295:327;;;;24150:479:::0;:::o;22916:218::-;193:10;23004:4;23053:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23053:34:0;;;;;;;;;;23004:4;;23021:83;;23044:7;;23053:50;;23092:10;23053:38;:50::i;23421:378::-;193:10;23473:14;23522:19;;;:11;:19;;;;;;;;23521:20;23513:77;;;;-1:-1:-1;;;23513:77:0;;12135:2:1;23513:77:0;;;12117:21:1;12174:2;12154:18;;;12147:30;12213:34;12193:18;;;12186:62;12284:14;12264:18;;;12257:42;12316:19;;23513:77:0;12107:234:1;23513:77:0;23602:15;23627:19;23638:7;23627:10;:19::i;:::-;-1:-1:-1;;;;;;;;23675:15:0;;;;;;:7;:15;;;;;;23601:45;;-1:-1:-1;23675:28:0;;:15;-1:-1:-1;23601:45:0;;-1:-1:-1;;23675:19:0;:28::i;:::-;-1:-1:-1;;;;;23657:15:0;;;;;;:7;:15;;;;;:46;23724:7;;:20;;23736:7;23724:11;:20::i;:::-;23714:7;:30;23768:10;;:23;;23783:7;23768:14;:23::i;:::-;23755:10;:36;-1:-1:-1;;;23421:378:0:o;24637:111::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;-1:-1:-1;;;;;24706:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24706:34:0::1;24736:4;24706:34;::::0;;24637:111::o;20761:438::-;20851:7;20890;;20879;:18;;20871:62;;;;-1:-1:-1;;;20871:62:0;;8665:2:1;20871:62:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743:33;8723:18;;;8716:61;8794:18;;20871:62:0;8637:181:1;20871:62:0;20949:17;20944:248;;20984:15;21009:19;21020:7;21009:10;:19::i;:::-;-1:-1:-1;20983:45:0;;-1:-1:-1;21043:14:0;;-1:-1:-1;;;;;;21043:14:0;20944:248;21092:23;21124:19;21135:7;21124:10;:19::i;:::-;-1:-1:-1;21090:53:0;;-1:-1:-1;21158:22:0;;-1:-1:-1;;;;;;21158:22:0;23807:335;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;-1:-1:-1;;;;;23892:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23891:21;23883:61;;;::::0;-1:-1:-1;;;23883:61:0;;8309:2:1;23883:61:0::1;::::0;::::1;8291:21:1::0;8348:2;8328:18;;;8321:30;8387:29;8367:18;;;8360:57;8434:18;;23883:61:0::1;8281:177:1::0;23883:61:0::1;-1:-1:-1::0;;;;;23958:16:0;::::1;23977:1;23958:16:::0;;;:7:::1;:16;::::0;;;;;:20;23955:108:::1;;-1:-1:-1::0;;;;;24034:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24014:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23995:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23955:108:::1;-1:-1:-1::0;;;;;24073:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24073:27:0::1;24096:4;24073:27:::0;;::::1;::::0;;;24111:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24111:23:0::1;::::0;;::::1;::::0;;23807:335::o;20050:198::-;-1:-1:-1;;;;;20140:20:0;;20116:7;20140:20;;;:11;:20;;;;;;;;20136:49;;;-1:-1:-1;;;;;;20169:16:0;;;;;:7;:16;;;;;;;20050:198::o;20136:49::-;-1:-1:-1;;;;;20223:16:0;;;;;;:7;:16;;;;;;20203:37;;:19;:37::i;6007:148::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;6114:1:::1;6098:6:::0;;6077:40:::1;::::0;-1:-1:-1;;;;;6098:6:0;;::::1;::::0;6077:40:::1;::::0;6114:1;;6077:40:::1;6145:1;6128:19:::0;;-1:-1:-1;;;;;;6128:19:0::1;::::0;;6007:148::o;21986:249::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;22077:4:::1;-1:-1:-1::0;;;;;22069:31:0;::::1;;;22061:72;;;::::0;-1:-1:-1;;;22061:72:0;;10197:2:1;22061:72:0::1;::::0;::::1;10179:21:1::0;10236:2;10216:18;;;10209:30;10275;10255:18;;;10248:58;10323:18;;22061:72:0::1;10169:178:1::0;22061:72:0::1;22188:38;::::0;;;;22220:4:::1;22188:38;::::0;::::1;4434:74:1::0;-1:-1:-1;;;;;22144:31:0;::::1;::::0;::::1;::::0;22176:10:::1;::::0;22144:31;;22188:23:::1;::::0;4407:18:1;;22188:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22144:83;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;4958:55:1;;;22144:83:0::1;::::0;::::1;4940:74:1::0;5030:18;;;5023:34;4913:18;;22144:83:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25047:195::-:0;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;16567:2:::1;25141:12;:28;25133:62;;;::::0;-1:-1:-1;;;25133:62:0;;12548:2:1;25133:62:0::1;::::0;::::1;12530:21:1::0;12587:2;12567:18;;;12560:30;-1:-1:-1;;;12606:18:1;;;12599:51;12667:18;;25133:62:0::1;12520:171:1::0;25133:62:0::1;25206:13;:28:::0;25047:195::o;25923:141::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;26011:16:::1;:45:::0;;-1:-1:-1;;;;;;26011:45:0::1;-1:-1:-1::0;;;;;26011:45:0;;;::::1;::::0;;;::::1;::::0;;25923:141::o;21804:173::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;21878:9:::1;21899:4;-1:-1:-1::0;;;;;21891:18:0::1;21918:21;21891:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21877:68;;;21964:4;21956:13;;;::::0;::::1;19761:87:::0;19800:13;19833:7;19826:14;;;;;:::i;23142:269::-;23235:4;23252:129;193:10;23275:7;23284:96;23323:15;23284:96;;;;;;;;;;;;;;;;;193:10;23284:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23284:34:0;;;;;;;;;;;;:38;:96::i;6845:305::-;6897:14;;-1:-1:-1;;;;;6897:14:0;6915:10;6897:28;6889:76;;;;-1:-1:-1;;;6889:76:0;;12898:2:1;6889:76:0;;;12880:21:1;12937:2;12917:18;;;12910:30;12976:34;12956:18;;;12949:62;13047:5;13027:18;;;13020:33;13070:19;;6889:76:0;12870:225:1;6889:76:0;7002:9;;6984:15;:27;6976:72;;;;-1:-1:-1;;;6976:72:0;;11775:2:1;6976:72:0;;;11757:21:1;11814:2;11794:18;;;11787:30;11853:33;11833:18;;;11826:61;11904:18;;6976:72:0;11747:181:1;6976:72:0;7093:14;;;7085:6;;7064:44;;-1:-1:-1;;;;;7093:14:0;;;;7085:6;;;;7064:44;;;7128:14;;;7119:23;;-1:-1:-1;;;;;;7119:23:0;-1:-1:-1;;;;;7128:14:0;;;7119:23;;;;;;6845:305::o;22251:167::-;22329:4;22346:42;193:10;22370:9;22381:6;22346:9;:42::i;25560:171::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;25637:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;25637:32:0;;::::1;;::::0;;25685:38:::1;::::0;::::1;::::0;::::1;::::0;25661:8;5233:14:1;5226:22;5208:41;;5196:2;5181:18;;5163:92;25685:38:0::1;;;;;;;;25560:171:::0;:::o;6611:226::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;6692:6:::1;::::0;;;6675:23;;-1:-1:-1;;;;;;6675:23:0;;::::1;-1:-1:-1::0;;;;;6692:6:0;::::1;6675:23;::::0;;;6709:19:::1;::::0;;6751:22:::1;6769:4:::0;6751:15:::1;:22;:::i;:::-;6739:9;:34:::0;6826:1:::1;6810:6:::0;;6789:40:::1;::::0;-1:-1:-1;;;;;6810:6:0;;::::1;::::0;6789:40:::1;::::0;6826:1;;6789:40:::1;6611:226:::0;:::o;26072:129::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;26154:13:::1;:39:::0;;-1:-1:-1;;;;;;26154:39:0::1;-1:-1:-1::0;;;;;26154:39:0;;;::::1;::::0;;;::::1;::::0;;26072:129::o;24756:110::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;-1:-1:-1;;;;;24823:27:0::1;24853:5;24823:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24823:35:0::1;::::0;;24756:110::o;25441:111::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;25518:12:::1;:26:::0;25441:111::o;25741:166::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;25849:23:::1;:50:::0;25741:166::o;6163:244::-;5920:6;;-1:-1:-1;;;;;5920:6:0;193:10;5920:22;5912:67;;;;-1:-1:-1;;;5912:67:0;;9836:2:1;5912:67:0;;;9818:21:1;;;9855:18;;;9848:30;-1:-1:-1;;;;;;;;;;;9894:18:1;;;9887:62;9966:18;;5912:67:0;9808:182:1;5912:67:0;-1:-1:-1;;;;;6252:22:0;::::1;6244:73;;;::::0;-1:-1:-1;;;6244:73:0;;7143:2:1;6244:73:0::1;::::0;::::1;7125:21:1::0;7182:2;7162:18;;;7155:30;7221:34;7201:18;;;7194:62;7292:8;7272:18;;;7265:36;7318:19;;6244:73:0::1;7115:228:1::0;6244:73:0::1;6354:6;::::0;;6333:38:::1;::::0;-1:-1:-1;;;;;6333:38:0;;::::1;::::0;6354:6;::::1;::::0;6333:38:::1;::::0;::::1;6382:6;:17:::0;;-1:-1:-1;;;;;;6382:17:0::1;-1:-1:-1::0;;;;;6382:17:0;;;::::1;::::0;;;::::1;::::0;;6163:244::o;31261:337::-;-1:-1:-1;;;;;31354:19:0;;31346:68;;;;-1:-1:-1;;;31346:68:0;;11370:2:1;31346:68:0;;;11352:21:1;11409:2;11389:18;;;11382:30;11448:34;11428:18;;;11421:62;11519:6;11499:18;;;11492:34;11543:19;;31346:68:0;11342:226:1;31346:68:0;-1:-1:-1;;;;;31433:21:0;;31425:68;;;;-1:-1:-1;;;31425:68:0;;7550:2:1;31425:68:0;;;7532:21:1;7589:2;7569:18;;;7562:30;7628:34;7608:18;;;7601:62;7699:4;7679:18;;;7672:32;7721:19;;31425:68:0;7522:224:1;31425:68:0;-1:-1:-1;;;;;31506:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31558:32;;13246:25:1;;;31558:32:0;;13219:18:1;31558:32:0;;;;;;;31261:337;;;:::o;31606:1799::-;-1:-1:-1;;;;;31728:18:0;;31720:68;;;;-1:-1:-1;;;31720:68:0;;10964:2:1;31720:68:0;;;10946:21:1;11003:2;10983:18;;;10976:30;11042:34;11022:18;;;11015:62;11113:7;11093:18;;;11086:35;11138:19;;31720:68:0;10936:227:1;31720:68:0;-1:-1:-1;;;;;31807:16:0;;31799:64;;;;-1:-1:-1;;;31799:64:0;;6328:2:1;31799:64:0;;;6310:21:1;6367:2;6347:18;;;6340:30;6406:34;6386:18;;;6379:62;6477:5;6457:18;;;6450:33;6500:19;;31799:64:0;6300:225:1;31799:64:0;31891:1;31882:6;:10;31874:64;;;;-1:-1:-1;;;31874:64:0;;10554:2:1;31874:64:0;;;10536:21:1;10593:2;10573:18;;;10566:30;10632:34;10612:18;;;10605:62;10703:11;10683:18;;;10676:39;10732:19;;31874:64:0;10526:231:1;31874:64:0;5831:7;5858:6;-1:-1:-1;;;;;31952:15:0;;;5858:6;;31952:15;;;;:32;;-1:-1:-1;5831:7:0;5858:6;-1:-1:-1;;;;;31971:13:0;;;5858:6;;31971:13;;31952:32;31949:139;;;32019:12;;32009:6;:22;;32001:75;;;;-1:-1:-1;;;32001:75:0;;9025:2:1;32001:75:0;;;9007:21:1;9064:2;9044:18;;;9037:30;9103:34;9083:18;;;9076:62;9174:10;9154:18;;;9147:38;9202:19;;32001:75:0;8997:230:1;32001:75:0;32100:28;32131:24;32149:4;32131:9;:24::i;:::-;32100:55;;32166:28;32221:23;;32197:20;:47;;32166:78;;32267:13;-1:-1:-1;;;;;32261:19:0;:2;-1:-1:-1;;;;;32261:19:0;;:51;;;;;32311:1;32284:24;32294:13;32284:9;:24::i;:::-;:28;32261:51;32257:345;;;32341:16;;;;32340:17;:42;;;;-1:-1:-1;32361:21:0;;;;;;;32340:42;:65;;;;;32392:13;-1:-1:-1;;;;;32386:19:0;:2;-1:-1:-1;;;;;32386:19:0;;32340:65;32336:266;;;32426:23;32422:161;;;32493:23;;32470:46;;32535:32;32546:20;32535:10;:32::i;:::-;-1:-1:-1;;;;;32733:24:0;;32614:12;32733:24;;;:18;:24;;;;;;32629:4;;32733:24;;;:50;;-1:-1:-1;;;;;;32761:22:0;;;;;;:18;:22;;;;;;;;32733:50;32730:617;;;-1:-1:-1;32809:5:0;32730:617;;;32880:13;-1:-1:-1;;;;;32872:21:0;:4;-1:-1:-1;;;;;32872:21:0;;32869:206;;;32913:14;:12;:14::i;:::-;32998:16;;32982:13;:32;33046:13;;33033:10;:26;32869:206;33119:13;-1:-1:-1;;;;;33113:19:0;:2;-1:-1:-1;;;;;33113:19:0;;33110:224;;;33152:14;:12;:14::i;:::-;33255:17;;33239:13;:33;33304:14;;33291:10;:27;33110:224;33359:38;33374:4;33379:2;33382:6;33389:7;33359:14;:38::i;:::-;31606:1799;;;;;;:::o;1504:192::-;1590:7;1626:12;1618:6;;;;1610:29;;;;-1:-1:-1;;;1610:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1650:9:0;1662:5;1666:1;1662;:5;:::i;:::-;1650:17;1504:192;-1:-1:-1;;;;;1504:192:0:o;28826:163::-;28867:7;28888:15;28905;28924:19;:17;:19::i;:::-;28887:56;;-1:-1:-1;28887:56:0;-1:-1:-1;28961:20:0;28887:56;;28961:11;:20::i;:::-;28954:27;;;;28826:163;:::o;1964:132::-;2022:7;2049:39;2053:1;2056;2049:39;;;;;;;;;;;;;;;;;:3;:39::i;1171:181::-;1229:7;;1261:5;1265:1;1261;:5;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;-1:-1:-1;;;1277:46:0;;7953:2:1;1277:46:0;;;7935:21:1;7992:2;7972:18;;;7965:30;8031:29;8011:18;;;8004:57;8078:18;;1277:46:0;7925:177:1;27410:463:0;27469:7;27478;27487;27496;27505;27514;27523;27544:23;27569:12;27583:18;27603:15;27622:20;27634:7;27622:11;:20::i;:::-;27543:99;;;;;;;;27654:15;27671:23;27696:12;27712:59;27724:7;27733:4;27739:10;27751:7;27760:10;:8;:10::i;:::-;27712:11;:59::i;:::-;27653:118;;-1:-1:-1;27653:118:0;-1:-1:-1;27653:118:0;-1:-1:-1;27822:15:0;;-1:-1:-1;27839:4:0;;-1:-1:-1;27845:10:0;;-1:-1:-1;27857:7:0;-1:-1:-1;;;;27410:463:0;;;;;;;;;:::o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;37344:528::-;17651:16;:23;;-1:-1:-1;;17651:23:0;17670:4;17651:23;;;37452:21:::1;37484:38;37501:20:::0;37484:16:::1;:38::i;:::-;37533:26;37562:41;:21;37588:14:::0;37562:25:::1;:41::i;:::-;37715:16;::::0;37533:70;;-1:-1:-1;37694:75:0::1;::::0;-1:-1:-1;;;;;37715:16:0::1;37733:35;37764:3;37733:26;37533:70:::0;37756:2:::1;37733:22;:26::i;:::-;:30:::0;::::1;:35::i;:::-;37694:20;:75::i;:::-;37801:13;::::0;37780:72:::1;::::0;-1:-1:-1;;;;;37801:13:0::1;37816:35;37847:3;37816:26;:18:::0;37839:2:::1;37816:22;:26::i;37780:72::-;-1:-1:-1::0;;17697:16:0;:24;;-1:-1:-1;;17697:24:0;;;-1:-1:-1;37344:528:0:o;30777:301::-;30823:7;;:12;:34;;;;-1:-1:-1;30839:13:0;;:18;30823:34;30820:46;;;30777:301::o;30820:46::-;30896:7;;;30878:15;:25;30938:13;;;30914:21;:37;30983:10;;;30962:18;:31;-1:-1:-1;31006:11:0;;;;31028:17;;;;31056:14;30777:301::o;34077:688::-;34188:7;34184:40;;34210:14;:12;:14::i;:::-;-1:-1:-1;;;;;34241:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34265:22:0;;;;;;:11;:22;;;;;;;;34264:23;34241:46;34237:467;;;34304:48;34326:6;34334:9;34345:6;34304:21;:48::i;:::-;34237:467;;;-1:-1:-1;;;;;34375:19:0;;;;;;:11;:19;;;;;;;;34374:20;:46;;;;-1:-1:-1;;;;;;34398:22:0;;;;;;:11;:22;;;;;;;;34374:46;34370:334;;;34437:46;34457:6;34465:9;34476:6;34437:19;:46::i;34370:334::-;-1:-1:-1;;;;;34505:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34528:22:0;;;;;;:11;:22;;;;;;;;34505:45;34501:203;;;34567:48;34589:6;34597:9;34608:6;34567:21;:48::i;34501:203::-;34648:44;34666:6;34674:9;34685:6;34648:17;:44::i;:::-;34720:7;34716:41;;34742:15;31140;;31130:7;:25;31182:21;;31166:13;:37;31227:18;;31214:10;:31;31086:167;34742:15;34077:688;;;;:::o;28997:555::-;29094:7;;29130;;29047;;;;;29148:289;29172:9;:16;29168:20;;29148:289;;;29238:7;29214;:21;29222:9;29232:1;29222:12;;;;;;-1:-1:-1;;;29222:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29222:12:0;29214:21;;;;;;;;;;;;;:31;;:66;;;29273:7;29249;:21;29257:9;29267:1;29257:12;;;;;;-1:-1:-1;;;29257:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29257:12:0;29249:21;;;;;;;;;;;;;:31;29214:66;29210:97;;;29290:7;;29299;;29282:25;;;;;;;28997:555;;:::o;29210:97::-;29332:34;29344:7;:21;29352:9;29362:1;29352:12;;;;;;-1:-1:-1;;;29352:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29352:12:0;29344:21;;;;;;;;;;;;;29332:7;;:11;:34::i;:::-;29322:44;;29391:34;29403:7;:21;29411:9;29421:1;29411:12;;;;;;-1:-1:-1;;;29411:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29411:12:0;29403:21;;;;;;;;;;;;;29391:7;;:11;:34::i;:::-;29381:44;-1:-1:-1;29190:3:0;;;;:::i;:::-;;;;29148:289;;;-1:-1:-1;29473:7:0;;29461;;:20;;:11;:20::i;:::-;29451:7;:30;29447:61;;;29491:7;;29500;;29483:25;;;;;;28997:555;;:::o;29447:61::-;29527:7;;29536;;-1:-1:-1;28997:555:0;-1:-1:-1;28997:555:0:o;2104:278::-;2190:7;2225:12;2218:5;2210:28;;;;-1:-1:-1;;;2210:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2249:9:0;2261:5;2265:1;2261;:5;:::i;27881:417::-;27941:7;27950;27959;27968;27988:12;28003:24;28019:7;28003:15;:24::i;:::-;27988:39;;28038:18;28059:30;28081:7;28059:21;:30::i;:::-;28038:51;;28100:15;28118:27;28137:7;28118:18;:27::i;:::-;28100:45;-1:-1:-1;28156:23:0;28182:46;28100:45;28182:33;28204:10;28182:33;:7;28194:4;28182:11;:17::i;:::-;:21;;:33::i;:46::-;28156:72;28264:4;;-1:-1:-1;28270:10:0;;-1:-1:-1;28270:10:0;-1:-1:-1;27881:417:0;;-1:-1:-1;;;27881:417:0:o;28306:512::-;28438:7;;;;28494:24;:7;28506:11;28494;:24::i;:::-;28476:42;-1:-1:-1;28529:12:0;28544:21;:4;28553:11;28544:8;:21::i;:::-;28529:36;-1:-1:-1;28576:18:0;28597:27;:10;28612:11;28597:14;:27::i;:::-;28576:48;-1:-1:-1;28635:15:0;28653:24;:7;28665:11;28653;:24::i;:::-;28635:42;-1:-1:-1;28688:23:0;28714:46;28635:42;28714:33;28736:10;28714:33;:7;28726:4;28714:11;:17::i;:46::-;28779:7;;;;-1:-1:-1;28805:4:0;;-1:-1:-1;28306:512:0;;-1:-1:-1;;;;;;;;;28306:512:0:o;33413:656::-;33563:16;;;33577:1;33563:16;;;;;;;;33539:21;;33563:16;;;;;;;;;;-1:-1:-1;33563:16:0;33539:40;;33608:4;33590;33595:1;33590:7;;;;;;-1:-1:-1;;;33590:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;33590:23:0;;;-1:-1:-1;;;;;33590:23:0;;;;;33634:15;-1:-1:-1;;;;;33634:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33624:4;33629:1;33624:7;;;;;;-1:-1:-1;;;33624:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;33624:32:0;;;-1:-1:-1;;;;;33624:32:0;;;;;33669:62;33686:4;33701:15;33719:11;33669:8;:62::i;:::-;33770:240;;;;;-1:-1:-1;;;;;33770:15:0;:66;;;;:240;;33851:11;;33877:1;;33921:4;;33948;;33984:15;;33770:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34026:35;34043:11;34056:4;34026:35;;;;;;;:::i;:::-;;;;;;;;33413:656;;:::o;1704:250::-;1762:7;1786:6;1782:47;;-1:-1:-1;1816:1:0;1809:8;;1782:47;1841:9;1853:5;1857:1;1853;:5;:::i;:::-;1841:17;-1:-1:-1;1886:1:0;1877:5;1881:1;1841:17;1877:5;:::i;:::-;:10;1869:56;;;;-1:-1:-1;;;1869:56:0;;9434:2:1;1869:56:0;;;9416:21:1;9473:2;9453:18;;;9446:30;9512:34;9492:18;;;9485:62;9583:3;9563:18;;;9556:31;9604:19;;1869:56:0;9406:223:1;37882:126:0;37974:26;;-1:-1:-1;;;;;37974:18:0;;;:26;;;;;37993:6;;37974:26;;;;37993:6;37974:18;:26;;;;;;;;;;;;;;;;;;;;;37882:126;;:::o;35959:608::-;36062:15;36079:23;36104:12;36118:23;36143:12;36157:18;36177:15;36196:19;36207:7;36196:10;:19::i;:::-;36061:154;;;;;;;;;;;;;;36241:28;36261:7;36241;:15;36249:6;-1:-1:-1;;;;;36241:15:0;-1:-1:-1;;;;;36241:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;36223:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36298:7;:15;;;;:28;;36318:7;36298:19;:28::i;:::-;-1:-1:-1;;;;;36280:15:0;;;;;;;:7;:15;;;;;;:46;;;;36358:18;;;;;;;:39;;36381:15;36358:22;:39::i;:::-;-1:-1:-1;;;;;36337:18:0;;;;;;:7;:18;;;;;:60;36408:26;36423:10;36408:14;:26::i;:::-;36445:20;36457:7;36445:11;:20::i;:::-;36476:23;36488:4;36494;36476:11;:23::i;:::-;36532:9;-1:-1:-1;;;;;36515:44:0;36524:6;-1:-1:-1;;;;;36515:44:0;;36543:15;36515:44;;;;13246:25:1;;13234:2;13219:18;;13201:76;36515:44:0;;;;;;;;35959:608;;;;;;;;;;:::o;35331:620::-;35432:15;35449:23;35474:12;35488:23;35513:12;35527:18;35547:15;35566:19;35577:7;35566:10;:19::i;:::-;35431:154;;;;;;;;;;;;;;35611:28;35631:7;35611;:15;35619:6;-1:-1:-1;;;;;35611:15:0;-1:-1:-1;;;;;35611:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;35593:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;35671:18;;;;;:7;:18;;;;;:39;;35694:15;35671:22;:39::i;:::-;-1:-1:-1;;;;;35650:18:0;;;;;;:7;:18;;;;;;;;:60;;;;35742:7;:18;;;;:39;;35765:15;35742:22;:39::i;36575:679::-;36678:15;36695:23;36720:12;36734:23;36759:12;36773:18;36793:15;36812:19;36823:7;36812:10;:19::i;:::-;36677:154;;;;;;;;;;;;;;36857:28;36877:7;36857;:15;36865:6;-1:-1:-1;;;;;36857:15:0;-1:-1:-1;;;;;36857:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;36839:15:0;;;;;;:7;:15;;;;;;;;:46;;;;36914:7;:15;;;;:28;;36934:7;36914:19;:28::i;34773:550::-;34872:15;34889:23;34914:12;34928:23;34953:12;34967:18;34987:15;35006:19;35017:7;35006:10;:19::i;:::-;34871:154;;;;;;;;;;;;;;35054:28;35074:7;35054;:15;35062:6;-1:-1:-1;;;;;35054:15:0;-1:-1:-1;;;;;35054:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;30270:154::-;30334:7;30361:55;30400:5;30361:20;30373:7;;30361;:11;;:20;;;;:::i;30432:166::-;30502:7;30529:61;30574:5;30529:26;30541:13;;30529:7;:11;;:26;;;;:::i;30607:160::-;30674:7;30701:58;30743:5;30701:23;30713:10;;30701:7;:11;;:23;;;;:::i;29560:355::-;29623:19;29646:10;:8;:10::i;:::-;29623:33;-1:-1:-1;29667:18:0;29688:27;:10;29623:33;29688:14;:27::i;:::-;29767:4;29751:22;;;;:7;:22;;;;;;29667:48;;-1:-1:-1;29751:38:0;;29667:48;29751:26;:38::i;:::-;29742:4;29726:22;;;;:7;:22;;;;;;;;:63;;;;29803:11;:26;;;;;;29800:107;;;29885:4;29869:22;;;;:7;:22;;;;;;:38;;29896:10;29869:26;:38::i;:::-;29860:4;29844:22;;;;:7;:22;;;;;:63;29560:355;;;:::o;27255:147::-;27333:7;;:17;;27345:4;27333:11;:17::i;:::-;27323:7;:27;27374:10;;:20;;27389:4;27374:14;:20::i;:::-;27361:10;:33;-1:-1:-1;;27255:147:0:o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:325::-;1484:6;1492;1545:2;1533:9;1524:7;1520:23;1516:32;1513:2;;;1566:6;1558;1551:22;1513:2;1610:9;1597:23;1629:31;1654:5;1629:31;:::i;:::-;1679:5;1731:2;1716:18;;;;1703:32;;-1:-1:-1;;;1503:238:1:o;1746:251::-;1802:6;1855:2;1843:9;1834:7;1830:23;1826:32;1823:2;;;1876:6;1868;1861:22;1823:2;1920:9;1907:23;1939:28;1961:5;1939:28;:::i;2002:255::-;2069:6;2122:2;2110:9;2101:7;2097:23;2093:32;2090:2;;;2143:6;2135;2128:22;2090:2;2180:9;2174:16;2199:28;2221:5;2199:28;:::i;2262:190::-;2321:6;2374:2;2362:9;2353:7;2349:23;2345:32;2342:2;;;2395:6;2387;2380:22;2342:2;-1:-1:-1;2423:23:1;;2332:120;-1:-1:-1;2332:120:1:o;2457:194::-;2527:6;2580:2;2568:9;2559:7;2555:23;2551:32;2548:2;;;2601:6;2593;2586:22;2548:2;-1:-1:-1;2629:16:1;;2538:113;-1:-1:-1;2538:113:1:o;2656:319::-;2721:6;2729;2782:2;2770:9;2761:7;2757:23;2753:32;2750:2;;;2803:6;2795;2788:22;2750:2;2844:9;2831:23;2821:33;;2904:2;2893:9;2889:18;2876:32;2917:28;2939:5;2917:28;:::i;2980:602::-;3093:6;3101;3109;3117;3125;3133;3141;3194:3;3182:9;3173:7;3169:23;3165:33;3162:2;;;3216:6;3208;3201:22;3162:2;-1:-1:-1;;3244:23:1;;;3314:2;3299:18;;3286:32;;-1:-1:-1;3365:2:1;3350:18;;3337:32;;3416:2;3401:18;;3388:32;;-1:-1:-1;3467:3:1;3452:19;;3439:33;;-1:-1:-1;3519:3:1;3504:19;;3491:33;;-1:-1:-1;3571:3:1;3556:19;3543:33;;-1:-1:-1;3152:430:1;-1:-1:-1;3152:430:1:o;3587:486::-;3640:3;3678:5;3672:12;3705:6;3700:3;3693:19;3731:4;3760:2;3755:3;3751:12;3744:19;;3797:2;3790:5;3786:14;3818:3;3830:218;3844:6;3841:1;3838:13;3830:218;;;3909:13;;-1:-1:-1;;;;;3905:62:1;3893:75;;3988:12;;;;4023:15;;;;3866:1;3859:9;3830:218;;;-1:-1:-1;4064:3:1;;3648:425;-1:-1:-1;;;;;3648:425:1:o;5518:603::-;5630:4;5659:2;5688;5677:9;5670:21;5720:6;5714:13;5763:6;5758:2;5747:9;5743:18;5736:34;5788:4;5801:140;5815:6;5812:1;5809:13;5801:140;;;5910:14;;;5906:23;;5900:30;5876:17;;;5895:2;5872:26;5865:66;5830:10;;5801:140;;;5959:6;5956:1;5953:13;5950:2;;;6029:4;6024:2;6015:6;6004:9;6000:22;5996:31;5989:45;5950:2;-1:-1:-1;6105:2:1;6084:15;-1:-1:-1;;6080:29:1;6065:45;;;;6112:2;6061:54;;5639:482;-1:-1:-1;;;5639:482:1:o;13282:332::-;13489:6;13478:9;13471:25;13532:2;13527;13516:9;13512:18;13505:30;13452:4;13552:56;13604:2;13593:9;13589:18;13581:6;13552:56;:::i;:::-;13544:64;13461:153;-1:-1:-1;;;;13461:153:1:o;13619:605::-;13918:6;13907:9;13900:25;13961:6;13956:2;13945:9;13941:18;13934:34;14004:3;13999:2;13988:9;13984:18;13977:31;13881:4;14025:57;14077:3;14066:9;14062:19;14054:6;14025:57;:::i;:::-;-1:-1:-1;;;;;14118:55:1;;;;14113:2;14098:18;;14091:83;-1:-1:-1;14205:3:1;14190:19;14183:35;14017:65;13890:334;-1:-1:-1;;;13890:334:1:o;14418:128::-;14458:3;14489:1;14485:6;14482:1;14479:13;14476:2;;;14495:18;;:::i;:::-;-1:-1:-1;14531:9:1;;14466:80::o;14551:274::-;14591:1;14617;14607:2;;-1:-1:-1;;;14649:1:1;14642:88;14753:4;14750:1;14743:15;14781:4;14778:1;14771:15;14607:2;-1:-1:-1;14810:9:1;;14597:228::o;14830:168::-;14870:7;14936:1;14932;14928:6;14924:14;14921:1;14918:21;14913:1;14906:9;14899:17;14895:45;14892:2;;;14943:18;;:::i;:::-;-1:-1:-1;14983:9:1;;14882:116::o;15003:125::-;15043:4;15071:1;15068;15065:8;15062:2;;;15076:18;;:::i;:::-;-1:-1:-1;15113:9:1;;15052:76::o;15133:437::-;15212:1;15208:12;;;;15255;;;15276:2;;15330:4;15322:6;15318:17;15308:27;;15276:2;15383;15375:6;15372:14;15352:18;15349:38;15346:2;;;-1:-1:-1;;;15417:1:1;15410:88;15521:4;15518:1;15511:15;15549:4;15546:1;15539:15;15346:2;;15188:382;;;:::o;15575:135::-;15614:3;-1:-1:-1;;15635:17:1;;15632:2;;;15655:18;;:::i;:::-;-1:-1:-1;15702:1:1;15691:13;;15622:88::o;15715:184::-;-1:-1:-1;;;15764:1:1;15757:88;15864:4;15861:1;15854:15;15888:4;15885:1;15878:15;15904:154;-1:-1:-1;;;;;15983:5:1;15979:54;15972:5;15969:65;15959:2;;16048:1;16045;16038:12;15959:2;15949:109;:::o;16063:118::-;16149:5;16142:13;16135:21;16128:5;16125:32;16115:2;;16171:1;16168;16161:12
Swarm Source
ipfs://10434c57d790b56e7c0820940a7f1047c3fd91ea36b5d89f6c5575644086b1b2
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.