ERC-20
Overview
Max Total Supply
100,000,000 DUCKY
Holders
99
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
87,120.000000000000113799 DUCKYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RubberDucky
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapERC20 { 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; } interface IUniswapFactory { 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; } interface IUniswapRouter01 { 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 factory() external pure returns (address); function WETH() external pure returns (address); 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); } interface IUniswapRouter02 is IUniswapRouter01 { 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; } abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = msg.sender; _owner = 0xA1a1C6D8349D383BfF173255D7bA9Df1ba3aB800; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(owner() == msg.sender, "Ownable: caller is not the owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { bytes32[] _values; mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = valueIndex; set._values.pop(); delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } contract RubberDucky is IERC20, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; mapping (address => uint256) public _balances; mapping (address => mapping (address => uint256)) public _allowances; mapping (address => uint256) public _sellLock; EnumerableSet.AddressSet private _excluded; EnumerableSet.AddressSet private _excludedFromSellLock; string public constant _name = 'Rubber Ducky'; string public constant _symbol = 'DUCKY'; uint8 public constant _decimals = 18; uint256 public constant InitialSupply= 100 * 10**6 * 10**_decimals; uint256 swapLimit = 100 * 10**3 * 10**_decimals; bool isSwapPegged = true; uint16 public BuyLimitDivider=100; // 1% uint16 public BalanceLimitDivider=1000; // 0.1% just at the beginning, then 2% uint16 public SellLimitDivider=100; // 1% uint16 public MaxSellLockTime= 10 seconds; mapping (address => bool) isTeam; address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public constant Dead = 0x000000000000000000000000000000000000dEaD; address public devAddress; uint256 public _circulatingSupply =InitialSupply; uint256 public balanceLimit = _circulatingSupply; uint256 public sellLimit = _circulatingSupply; uint256 public buyLimit = _circulatingSupply; uint8 public _buyTax; uint8 public _sellTax; uint8 public _transferTax; uint8 public _liquidityTax; uint8 public _marketingTax; uint8 public _devTax; bool isTokenSwapManual = false; bool public antisniper = false; address public _UniswapPairAddress; IUniswapRouter02 public _UniswapRouter; modifier onlyTeam() { require(_isTeam(msg.sender), "Caller not in Team"); _; } modifier onlyDev() { require(devAddress==msg.sender, "Caller not dev"); _; } function _isTeam(address addr) private view returns (bool){ return addr==owner()||isTeam[addr]; } constructor () { uint256 deployerBalance=_circulatingSupply*99/100; devAddress = 0x341854bb1e4af5373d24DF5ed0D7d4F4006ABdb2; _balances[msg.sender] = deployerBalance; emit Transfer(address(0), msg.sender, deployerBalance); uint256 injectBalance=_circulatingSupply-deployerBalance; _balances[address(this)]=injectBalance; emit Transfer(address(0), address(this),injectBalance); _UniswapRouter = IUniswapRouter02(UniswapRouter); _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(address(this), _UniswapRouter.WETH()); balanceLimit=InitialSupply/BalanceLimitDivider; sellLimit=InitialSupply/SellLimitDivider; buyLimit=InitialSupply/BuyLimitDivider; isTeam[msg.sender] = true; sellLockTime=2 seconds; _buyTax=12; _sellTax=12; _transferTax=12; _liquidityTax=20; _marketingTax=40; _devTax=40; _excluded.add(msg.sender); _excludedFromSellLock.add(UniswapRouter); _excludedFromSellLock.add(_UniswapPairAddress); _excludedFromSellLock.add(address(this)); } function _transfer(address sender, address recipient, uint256 amount) private{ require(sender != address(0), "Transfer from zero"); require(recipient != address(0), "Transfer to zero"); bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient) || isTeam[sender] || isTeam[recipient]); bool isContractTransfer=(sender==address(this) || recipient==address(this)); bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter) || (recipient == _UniswapPairAddress && sender == UniswapRouter)); if(isContractTransfer || isLiquidityTransfer || isExcluded){ _feelessTransfer(sender, recipient, amount); } else{ if (!tradingEnabled) { if (sender != owner() && recipient != owner()) { if (antisniper) { emit Transfer(sender,recipient,0); return; } else { require(tradingEnabled,"trading not yet enabled"); } } } bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouter; bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouter; _taxedTransfer(sender,recipient,amount,isBuy,isSell); } } function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{ uint256 recipientBalance = _balances[recipient]; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); swapLimit = sellLimit/2; uint8 tax; if(isSell){ if(!_excludedFromSellLock.contains(sender)){ require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock"); _sellLock[sender]=block.timestamp+sellLockTime; } require(amount<=sellLimit,"Dump protection"); tax=_sellTax; } else if(isBuy){ require(recipientBalance+amount<=balanceLimit,"whale protection"); require(amount<=buyLimit, "whale protection"); tax=_buyTax; } else { require(recipientBalance+amount<=balanceLimit,"whale protection"); if(!_excludedFromSellLock.contains(sender)) require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock"); tax=_transferTax; } if((sender!=_UniswapPairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier)) _swapContractToken(amount); uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax+_devTax); uint256 taxedAmount=amount-(contractToken); _removeToken(sender,amount); _balances[address(this)] += contractToken; _addToken(recipient, taxedAmount); emit Transfer(sender,recipient,taxedAmount); } function _feelessTransfer(address sender, address recipient, uint256 amount) private{ uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); _removeToken(sender,amount); _addToken(recipient, amount); emit Transfer(sender,recipient,amount); } function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) { return (amount*tax*taxPercent) / 10000; } function _addToken(address addr, uint256 amount) private { uint256 newAmount=_balances[addr]+amount; _balances[addr]=newAmount; } function _removeToken(address addr, uint256 amount) private { uint256 newAmount=_balances[addr]-amount; _balances[addr]=newAmount; } bool private _isTokenSwaping; uint256 public totalTokenSwapGenerated; uint256 public totalPayouts; uint8 public marketingShare=50; uint8 public devShare=50; uint256 public marketingBalance; uint256 public devBalance; function _distributeFeesETH(uint256 ETHamount) private { uint256 marketingSplit = (ETHamount * marketingShare)/100; uint256 devSplit = (ETHamount * devShare)/100; marketingBalance+=marketingSplit; devBalance+=devSplit; } uint256 public totalLPETH; bool private _isSwappingContractModifier; modifier lockTheSwap { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } function _swapContractToken(uint256 totalMax) private lockTheSwap{ uint256 contractBalance=_balances[address(this)]; uint16 totalTax=_liquidityTax+_marketingTax; uint256 tokenToSwap=swapLimit; if(tokenToSwap > totalMax) { if(isSwapPegged) { tokenToSwap = totalMax; } } if(contractBalance<tokenToSwap||totalTax==0){ return; } uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax; uint256 tokenForMarketing= (tokenToSwap*_marketingTax)/totalTax; uint256 tokenFordev= (tokenToSwap*_devTax)/totalTax; uint256 liqToken=tokenForLiquidity/2; uint256 liqETHToken=tokenForLiquidity-liqToken; uint256 swapToken=liqETHToken+tokenForMarketing+tokenFordev; uint256 initialETHBalance = address(this).balance; _swapTokenForETH(swapToken); uint256 newETH=(address(this).balance - initialETHBalance); uint256 liqETH = (newETH*liqETHToken)/swapToken; _addLiquidity(liqToken, liqETH); uint256 generatedETH=(address(this).balance - initialETHBalance); _distributeFeesETH(generatedETH); } function _swapTokenForETH(uint256 amount) private { _approve(address(this), address(_UniswapRouter), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _UniswapRouter.WETH(); _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private { totalLPETH+=ETHamount; _approve(address(this), address(_UniswapRouter), tokenamount); _UniswapRouter.addLiquidityETH{value: ETHamount}( address(this), tokenamount, 0, 0, address(this), block.timestamp ); } /// @notice Utilities function destroy(uint256 amount) private { require(_balances[address(this)] >= amount); _balances[address(this)] -= amount; _circulatingSupply -= amount; emit Transfer(address(this), Dead, amount); } function Control_getLimits() public view returns(uint256 balance, uint256 sell){ return(balanceLimit/10**_decimals, sellLimit/10**_decimals); } function Control_getTaxes() public view returns(uint256 devTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){ return (_devTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax); } function Control_getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){ uint256 lockTime=_sellLock[AddressToCheck]; if(lockTime<=block.timestamp) { return 0; } return lockTime-block.timestamp; } function Control_getSellLockTimeInSeconds() public view returns(uint256){ return sellLockTime; } bool public sellLockDisabled; uint256 public sellLockTime; bool public manualConversion; function Control_SetPeggedSwap(bool isPegged) public onlyTeam { isSwapPegged = isPegged; } function Control_SetMaxSwap(uint256 max) public onlyTeam { swapLimit = max; } /// @notice ACL Functions function Access_SetTeam(address addy, bool booly) public onlyTeam { isTeam[addy] = booly; } function Access_ExcludeAccountFromFees(address account) public onlyTeam { _excluded.add(account); } function Access_IncludeAccountToFees(address account) public onlyTeam { _excluded.remove(account); } function Access_ExcludeAccountFromSellLock(address account) public onlyTeam { _excludedFromSellLock.add(account); } function Access_IncludeAccountToSellLock(address account) public onlyTeam { _excludedFromSellLock.remove(account); } function Team_WithdrawMarketingETH() public onlyTeam{ uint256 amount=marketingBalance; marketingBalance=0; address sender = 0xc6ab324A15C429E34836d9c54a3E136Da703702D; (bool sent,) =sender.call{value: (amount)}(""); require(sent,"withdraw failed"); } function Team_WithdrawdevETH() public onlyTeam{ uint256 amount=devBalance; devBalance=0; address sender = 0xCB900b6Bf1b4b2B2C190991e962b14c09201C98a; (bool sent,) =sender.call{value: (amount)}(""); require(sent,"withdraw failed"); } function Control_SwitchManualETHConversion(bool manual) public onlyTeam{ manualConversion=manual; } function Control_DisableSellLock(bool disabled) public onlyTeam{ sellLockDisabled=disabled; } function UTILIY_SetSellLockTime(uint256 sellLockSeconds)public onlyTeam{ sellLockTime=sellLockSeconds; } function Control_SetTaxes(uint8 devTaxes, uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{ require(buyTax <= 15, "Taxes are too high"); require(sellTax <= 15, "Taxes are too high"); require(transferTax <= 15, "Taxes are too high"); uint8 totalTax=devTaxes+liquidityTaxes+marketingTaxes; require(totalTax==100, "liq+marketing needs to equal 100%"); _devTax = devTaxes; _liquidityTax=liquidityTaxes; _marketingTax=marketingTaxes; _buyTax=buyTax; _sellTax=sellTax; _transferTax=transferTax; } function Control_ChangeMarketingShare(uint8 newShare) public onlyTeam{ marketingShare=newShare; } function Control_ChangedevShare(uint8 newShare) public onlyTeam{ devShare=newShare; } function Control_ManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{ _swapContractToken(_qty * 10**9); } function Control_UpdateLimits(uint256 newBuyLimit ,uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{ newBuyLimit = newBuyLimit *10**_decimals; newBalanceLimit=newBalanceLimit*10**_decimals; newSellLimit=newSellLimit*10**_decimals; require(newSellLimit >= InitialSupply/200, "Blocked by antirug functions"); require(newBalanceLimit >= InitialSupply/200, "Blocked by antirug functions"); require(newBuyLimit >= InitialSupply/200, "Blocked by antirug functions"); buyLimit = newBuyLimit; balanceLimit = newBalanceLimit; sellLimit = newSellLimit; } bool public tradingEnabled; address private _liquidityTokenAddress; function Settings_EnableTrading() public onlyTeam{ tradingEnabled = true; } function Settings_LiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{ _liquidityTokenAddress=liquidityTokenAddress; } function UTILITY_RescueTokens(address tknAddress) public onlyTeam { IERC20 token = IERC20(tknAddress); uint256 ourBalance = token.balanceOf(address(this)); require(ourBalance>0, "No tokens in our balance"); token.transfer(msg.sender, ourBalance); } function Control_setContractTokenSwapManual(bool manual) public onlyTeam { isTokenSwapManual = manual; } receive() external payable {} fallback() external payable {} function getOwner() external view override returns (address) { return owner(); } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _circulatingSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } }
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":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"Access_SetTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangedevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"Control_DisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"Control_ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Control_SetMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"Control_SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"Control_SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLimit","type":"uint256"},{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"Control_UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"Control_getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getTaxes","outputs":[{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Settings_EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"Settings_LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawdevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"UTILITY_RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"UTILIY_SetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"antisniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126012600a62000643565b6200002190620186a062000702565b600855600980546001600160481b031916670a006403e80064011790556200004c6012600a62000643565b6200005c906305f5e10062000702565b600c819055600d819055600e819055600f556010805461ffff60301b191690556014805461ffff19166132321790553480156200009857600080fd5b50600080546001600160a01b03191673a1a1c6d8349d383bff173255d7ba9df1ba3ab800178155604051339182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060006064600c54606362000101919062000702565b6200010d9190620005d9565b600b80546001600160a01b03191673341854bb1e4af5373d24df5ed0d7d4f4006abdb217905533600081815260016020526040808220849055519293509091600080516020620038a9833981519152906200016b9085815260200190565b60405180910390a3600081600c5462000185919062000724565b30600081815260016020526040808220849055519293509091600080516020620038a983398151915290620001bd9085815260200190565b60405180910390a3601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200022557600080fd5b505afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002609190620005a9565b6001600160a01b031663c9c6539630601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002be57600080fd5b505afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f99190620005a9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034257600080fd5b505af115801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d9190620005a9565b601080546001600160a01b03929092166801000000000000000002600160401b600160e01b031990921691909117905560095461ffff630100000090910416620003ca6012600a62000643565b620003da906305f5e10062000702565b620003e69190620005d9565b600d5560095465010000000000900461ffff16620004076012600a62000643565b62000417906305f5e10062000702565b620004239190620005d9565b600e55600954610100900461ffff16620004406012600a62000643565b62000450906305f5e10062000702565b6200045c9190620005d9565b600f55336000818152600a60209081526040909120805460ff19166001179055600260195560108054652828140c0c0c65ffffffffffff19909116179055620004b19160049162001b7a62000537821b17901c565b50620004e1737a250d5630b4cf539739df2c5dacb4c659f2488d60066200053760201b62001b7a1790919060201c565b5062000512601060089054906101000a90046001600160a01b031660066200053760201b62001b7a1790919060201c565b506200052e3060066200053760201b62001b7a1790919060201c565b50505062000754565b60006200054e836001600160a01b03841662000557565b90505b92915050565b6000818152600183016020526040812054620005a05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000551565b50600062000551565b600060208284031215620005bb578081fd5b81516001600160a01b0381168114620005d2578182fd5b9392505050565b600082620005f557634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156200063b5781600019048211156200061f576200061f6200073e565b808516156200062d57918102915b93841c9390800290620005ff565b509250929050565b60006200054e60ff8416836000826200065f5750600162000551565b816200066e5750600062000551565b81600181146200068757600281146200069257620006b2565b600191505062000551565b60ff841115620006a657620006a66200073e565b50506001821b62000551565b5060208310610133831016604e8410600b8410161715620006d7575081810a62000551565b620006e38383620005fa565b8060001904821115620006fa57620006fa6200073e565b029392505050565b60008160001904831182151516156200071f576200071f6200073e565b500290565b6000828210156200073957620007396200073e565b500390565b634e487b7160e01b600052601160045260246000fd5b61314580620007646000396000f3fe6080604052600436106104315760003560e01c8063715018a611610227578063b411e9961161012d578063dd62ed3e116100b0578063f563728711610077578063f563728714610d94578063f8766f2014610db4578063f88b0e4614610dd4578063faf11fe914610dea578063fb27298714610e5357005b8063dd62ed3e14610ce4578063e5a1ffe114610d2a578063e798c01214610d4a578063f1c43f5f14610d5f578063f2fde38b14610d7457005b8063cd9a1b63116100f4578063cd9a1b6314610c2c578063d255fd7414610c42578063d28d885214610c6c578063d7edb93014610ca4578063d924499714610cc457005b8063b411e99614610b85578063b51ec13e14610ba5578063c59718ca14610bc5578063c7639d8014610be5578063ca9ec19914610c0d57005b806395d89b41116101b5578063a9aab6b91161017c578063a9aab6b914610ad4578063aed04fae14610af4578063b09f126614610b13578063b2e8a7d214610b44578063b35513f714610b6457005b806395d89b4114610a3057806398b1f16414610a5e578063a253c06e14610a7e578063a457c2d714610a94578063a9059cbb14610ab457005b8063887c60fb116101f9578063887c60fb146109b2578063893d20e8146109d15780638a982458146109ef5780638da5cb5b146109d1578063954ea66514610a1057005b8063715018a614610957578063762bb2821461096c57806382c4767b1461098257806386d0ada81461099857005b8063382e329a116103375780634f91e48c116102ba57806365001c661161028157806365001c66146108945780636789f2dc146108b45780636a911f4f146108d45780636ebcf607146108f457806370a082311461092157005b80634f91e48c1461081257806354d6b96e14610828578063589210d91461084857806358e553651461085e5780635c0494bb1461087457005b80634089b170116102fe5780634089b1701461078d57806342a11095146107a357806348e907b7146107bd5780634953554d146107d35780634ada218b146107f357005b8063382e329a1461070157806339509351146107225780633ad10ef6146107425780633b343ac0146107625780633cc39b7a1461077757005b806318160ddd116103bf5780632d882863116103865780632d88286314610672578063311a869714610694578063313ce567146106b657806332424aa3146106ca5780633478154b146106df57005b806318160ddd146105c95780631eb25d13146105de5780631f8b845e146105f357806323b872dd146106135780632a24e0641461063357005b8063095ea7b311610403578063095ea7b31461050f5780630ce0636c1461053f5780630fd99e161461055f578063156b2c5d1461059457806317391e49146105a957005b8063024c2ddd1461043a57806306fdde031461048557806307a25f3c146104c357806309218ee7146104e357005b3661043857005b005b34801561044657600080fd5b50610472610455366004612bbc565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b5060408051808201909152600c81526b527562626572204475636b7960a01b60208201525b60405161047c9190612dd9565b3480156104cf57600080fd5b506104386104de366004612b84565b610e80565b3480156104ef57600080fd5b506014546104fd9060ff1681565b60405160ff909116815260200161047c565b34801561051b57600080fd5b5061052f61052a366004612c61565b610ed8565b604051901515815260200161047c565b34801561054b57600080fd5b5061043861055a366004612c8c565b610eef565b34801561056b57600080fd5b5060095461058190600160281b900461ffff1681565b60405161ffff909116815260200161047c565b3480156105a057600080fd5b50610438610f27565b3480156105b557600080fd5b506010546104fd9062010000900460ff1681565b3480156105d557600080fd5b50600c54610472565b3480156105ea57600080fd5b50610472611000565b3480156105ff57600080fd5b5060095461058190610100900461ffff1681565b34801561061f57600080fd5b5061052f61062e366004612bf4565b61101d565b34801561063f57600080fd5b5060105461065a90600160401b90046001600160a01b031681565b6040516001600160a01b03909116815260200161047c565b34801561067e57600080fd5b506010546104fd90640100000000900460ff1681565b3480156106a057600080fd5b50600954610581906301000000900461ffff1681565b3480156106c257600080fd5b5060126104fd565b3480156106d657600080fd5b506104fd601281565b3480156106eb57600080fd5b5060095461058190600160381b900461ffff1681565b34801561070d57600080fd5b506010546104fd906301000000900460ff1681565b34801561072e57600080fd5b5061052f61073d366004612c61565b6110b4565b34801561074e57600080fd5b50600b5461065a906001600160a01b031681565b34801561076e57600080fd5b506104386110eb565b34801561078357600080fd5b5061047260175481565b34801561079957600080fd5b5061047260135481565b3480156107af57600080fd5b506010546104fd9060ff1681565b3480156107c957600080fd5b5061047260125481565b3480156107df57600080fd5b506104386107ee366004612c8c565b61113e565b3480156107ff57600080fd5b50601a5461052f90610100900460ff1681565b34801561081e57600080fd5b50610472600e5481565b34801561083457600080fd5b50610438610843366004612b84565b611187565b34801561085457600080fd5b50610472600f5481565b34801561086a57600080fd5b5061047260155481565b34801561088057600080fd5b5061047261088f366004612b84565b6111bb565b3480156108a057600080fd5b506104386108af366004612b84565b6111f5565b3480156108c057600080fd5b506104386108cf366004612cf4565b61136e565b3480156108e057600080fd5b506104386108ef366004612d4c565b6114b8565b34801561090057600080fd5b5061047261090f366004612b84565b60016020526000908152604090205481565b34801561092d57600080fd5b5061047261093c366004612b84565b6001600160a01b031660009081526001602052604090205490565b34801561096357600080fd5b506104386114f3565b34801561097857600080fd5b50610472600d5481565b34801561098e57600080fd5b5061065a61dead81565b3480156109a457600080fd5b50601a5461052f9060ff1681565b3480156109be57600080fd5b5060185461052f90610100900460ff1681565b3480156109dd57600080fd5b506000546001600160a01b031661065a565b3480156109fb57600080fd5b5060105461052f90600160381b900460ff1681565b348015610a1c57600080fd5b5060115461065a906001600160a01b031681565b348015610a3c57600080fd5b506040805180820190915260058152644455434b5960d81b60208201526104b6565b348015610a6a57600080fd5b50610438610a79366004612b84565b6115a6565b348015610a8a57600080fd5b50610472600c5481565b348015610aa057600080fd5b5061052f610aaf366004612c61565b6115d6565b348015610ac057600080fd5b5061052f610acf366004612c61565b611652565b348015610ae057600080fd5b50610438610aef366004612cc4565b61165f565b348015610b0057600080fd5b506014546104fd90610100900460ff1681565b348015610b1f57600080fd5b506104b6604051806040016040528060058152602001644455434b5960d81b81525081565b348015610b5057600080fd5b50610438610b5f366004612c8c565b611689565b348015610b7057600080fd5b506010546104fd90600160281b900460ff1681565b348015610b9157600080fd5b50610438610ba0366004612c8c565b6116c8565b348015610bb157600080fd5b50610438610bc0366004612cc4565b611700565b348015610bd157600080fd5b50610438610be0366004612b84565b61172a565b348015610bf157600080fd5b5061065a737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1957600080fd5b506010546104fd90610100900460ff1681565b348015610c3857600080fd5b5061047260165481565b348015610c4e57600080fd5b50610c5761175a565b6040805192835260208301919091520161047c565b348015610c7857600080fd5b506104b66040518060400160405280600c81526020016b527562626572204475636b7960a01b81525081565b348015610cb057600080fd5b50610438610cbf366004612cc4565b611797565b348015610cd057600080fd5b50610438610cdf366004612b84565b6117d5565b348015610cf057600080fd5b50610472610cff366004612bbc565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3657600080fd5b50610438610d45366004612d4c565b611805565b348015610d5657600080fd5b50610438611846565b348015610d6b57600080fd5b50601954610472565b348015610d8057600080fd5b50610438610d8f366004612b84565b61187c565b348015610da057600080fd5b50610438610daf366004612d66565b6119a5565b348015610dc057600080fd5b50610438610dcf366004612c34565b611b2a565b348015610de057600080fd5b5061047260195481565b348015610df657600080fd5b506010546040805160ff600160281b840481168252630100000084048116602083015264010000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c00161047c565b348015610e5f57600080fd5b50610472610e6e366004612b84565b60036020526000908152604090205481565b610e8933611b8f565b610eae5760405162461bcd60e51b8152600401610ea590612e58565b60405180910390fd5b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610ee5338484611bc6565b5060015b92915050565b610ef833611b8f565b610f145760405162461bcd60e51b8152600401610ea590612e58565b6009805460ff1916911515919091179055565b610f3033611b8f565b610f4c5760405162461bcd60e51b8152600401610ea590612e58565b60168054600091829055604051909173cb900b6bf1b4b2b2c190991e962b14c09201c98a91829084905b60006040518083038185875af1925050503d8060008114610fb3576040519150601f19603f3d011682016040523d82523d6000602084013e610fb8565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610ea5565b505050565b61100c6012600a612ff5565b61101a906305f5e1006130a0565b81565b600061102a848484611cb9565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156110955760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610ea5565b6110a985336110a486856130bf565b611bc6565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ee59185906110a4908690612f55565b6110f433611b8f565b6111105760405162461bcd60e51b8152600401610ea590612e58565b60158054600091829055604051909173c6ab324a15c429e34836d9c54a3e136da703702d9182908490610f76565b61114733611b8f565b6111635760405162461bcd60e51b8152600401610ea590612e58565b6010805491151566010000000000000266ff00000000000019909216919091179055565b61119033611b8f565b6111ac5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682611b7a565b5050565b6001600160a01b0381166000908152600360205260408120544281116111e45750600092915050565b6111ee42826130bf565b9392505050565b6111fe33611b8f565b61121a5760405162461bcd60e51b8152600401610ea590612e58565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612cdc565b9050600081116112e85760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610ea5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612ca8565b50505050565b61137733611b8f565b6113935760405162461bcd60e51b8152600401610ea590612e58565b61139f6012600a612ff5565b6113a990846130a0565b92506113b76012600a612ff5565b6113c190836130a0565b91506113cf6012600a612ff5565b6113d990826130a0565b905060c86113e96012600a612ff5565b6113f7906305f5e1006130a0565b6114019190612f92565b8110156114205760405162461bcd60e51b8152600401610ea590612eae565b60c861142e6012600a612ff5565b61143c906305f5e1006130a0565b6114469190612f92565b8210156114655760405162461bcd60e51b8152600401610ea590612eae565b60c86114736012600a612ff5565b611481906305f5e1006130a0565b61148b9190612f92565b8310156114aa5760405162461bcd60e51b8152600401610ea590612eae565b600f92909255600d55600e55565b6114c133611b8f565b6114dd5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff191660ff92909216919091179055565b336115066000546001600160a01b031690565b6001600160a01b03161461155c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6115af33611b8f565b6115cb5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482612028565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156116395760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610ea5565b61164833856110a486856130bf565b5060019392505050565b6000610ee5338484611cb9565b61166833611b8f565b6116845760405162461bcd60e51b8152600401610ea590612e58565b601955565b61169233611b8f565b6116ae5760405162461bcd60e51b8152600401610ea590612e58565b601880549115156101000261ff0019909216919091179055565b6116d133611b8f565b6116ed5760405162461bcd60e51b8152600401610ea590612e58565b601a805460ff1916911515919091179055565b61170933611b8f565b6117255760405162461bcd60e51b8152600401610ea590612e58565b600855565b61173333611b8f565b61174f5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482611b7a565b6000806117696012600a612ff5565b600d546117769190612f92565b6117826012600a612ff5565b600e5461178f9190612f92565b915091509091565b6117a033611b8f565b6117bc5760405162461bcd60e51b8152600401610ea590612e58565b6117d26117cd82633b9aca006130a0565b61203d565b50565b6117de33611b8f565b6117fa5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682612028565b61180e33611b8f565b61182a5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff9092166101000261ff0019909216919091179055565b61184f33611b8f565b61186b5760405162461bcd60e51b8152600401610ea590612e58565b601a805461ff001916610100179055565b3361188f6000546001600160a01b031690565b6001600160a01b0316146118e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b6001600160a01b03811661194a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119ae33611b8f565b6119ca5760405162461bcd60e51b8152600401610ea590612e58565b600f8360ff1611156119ee5760405162461bcd60e51b8152600401610ea590612e2c565b600f8260ff161115611a125760405162461bcd60e51b8152600401610ea590612e2c565b600f8160ff161115611a365760405162461bcd60e51b8152600401610ea590612e2c565b600084611a438789612f6d565b611a4d9190612f6d565b90508060ff16606414611aac5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610ea5565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516640100000000029790971664ff0000ffff1998851663010000000263ff000000199a8616600160281b029a909a1665ff00ff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b611b3333611b8f565b611b4f5760405162461bcd60e51b8152600401610ea590612e58565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111ee836001600160a01b0384166121ec565b600080546001600160a01b0383811691161480610ee95750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611c105760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610ea5565b6001600160a01b038216611c585760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610ea5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d045760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610ea5565b6001600160a01b038216611d4d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610ea5565b6000611d5a60048561223b565b80611d6b5750611d6b60048461223b565b80611d8e57506001600160a01b0384166000908152600a602052604090205460ff165b80611db157506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611dd457506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160401b90920416148015611e1a57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611e6057506010546001600160a01b03868116600160401b90920416148015611e6057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611e6b5750805b80611e735750825b15611e8857611e8386868661225d565b612020565b601a54610100900460ff16611f87576000546001600160a01b03878116911614801590611ec357506000546001600160a01b03868116911614155b15611f8757601054600160381b900460ff1615611f3057846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051611f2091815260200190565b60405180910390a3505050505050565b601a54610100900460ff16611f875760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ea5565b6010546000906001600160a01b03888116600160401b909204161480611fc957506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160401b90920416148061200e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b905061201d8888888585612328565b50505b505050505050565b60006111ee836001600160a01b0384166126e8565b6018805460ff19166001908117909155306000908152602091909152604081205460105490919061208390640100000000810460ff908116916301000000900416612f6d565b60ff16905060006008549050838111156120a55760095460ff16156120a55750825b808310806120b5575061ffff8216155b156120c2575050506121df565b60105460009061ffff8416906120e2906301000000900460ff16846130a0565b6120ec9190612f92565b60105490915060009061ffff85169061211090640100000000900460ff16856130a0565b61211a9190612f92565b60105490915060009061ffff86169061213d90600160281b900460ff16866130a0565b6121479190612f92565b90506000612156600285612f92565b9050600061216482866130bf565b90506000836121738684612f55565b61217d9190612f55565b905047612189826127ff565b600061219582476130bf565b90506000836121a486846130a0565b6121ae9190612f92565b90506121ba868261297b565b60006121c684476130bf565b90506121d181612a52565b505050505050505050505050505b506018805460ff19169055565b600081815260018301602052604081205461223357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee9565b506000610ee9565b6001600160a01b038116600090815260018301602052604081205415156111ee565b6001600160a01b038316600090815260016020526040902054818110156122c15760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6122cb8483612ad1565b6122d58383612b16565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231a91815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123965760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6002600e546123a59190612f92565b600855600083156124aa576123bb60068961223b565b612455576001600160a01b038816600090815260036020526040902054421015806123ed5750601854610100900460ff165b61242e5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610ea5565b60195461243b9042612f55565b6001600160a01b0389166000908152600360205260409020555b600e548611156124995760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610ea5565b50601054610100900460ff166125bc565b841561250957600d546124bd8785612f55565b11156124db5760405162461bcd60e51b8152600401610ea590612e84565b600f548611156124fd5760405162461bcd60e51b8152600401610ea590612e84565b5060105460ff166125bc565b600d546125168785612f55565b11156125345760405162461bcd60e51b8152600401610ea590612e84565b61253f60068961223b565b6125ae576001600160a01b038816600090815260036020526040902054421015806125715750601854610100900460ff165b6125ae5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610ea5565b5060105462010000900460ff165b6010546001600160a01b03898116600160401b90920416148015906125e45750601a5460ff16155b80156125f3575060185460ff16155b15612601576126018661203d565b601054600090612646908890849060ff600160281b82048116916126379163010000008204811691640100000000900416612f6d565b6126419190612f6d565b612b3a565b9050600061265482896130bf565b90506126608a89612ad1565b306000908152600160205260408120805484929061267f908490612f55565b9091555061268f90508982612b16565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126d491815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127f557600061270c6001836130bf565b8554909150600090612720906001906130bf565b9050600086600001828154811061274757634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061277857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600189019091526040902084905586548790806127b957634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ee9565b6000915050610ee9565b6011546128179030906001600160a01b031683611bc6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061285a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e69190612ba0565b8160018151811061290757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac9479061294d908590600090869030904290600401612ee5565b600060405180830381600087803b15801561296757600080fd5b505af1158015612020573d6000803e3d6000fd5b806017600082825461298d9190612f55565b90915550506011546129aa9030906001600160a01b031684611bc6565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4b9190612d1f565b5050505050565b601454600090606490612a689060ff16846130a0565b612a729190612f92565b601454909150600090606490612a9090610100900460ff16856130a0565b612a9a9190612f92565b90508160156000828254612aae9190612f55565b925050819055508060166000828254612ac79190612f55565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612af59083906130bf565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612af5908390612f55565b60006127108260ff168460ff1686612b5291906130a0565b612b5c91906130a0565b612b669190612f92565b949350505050565b803560ff81168114612b7f57600080fd5b919050565b600060208284031215612b95578081fd5b81356111ee816130ec565b600060208284031215612bb1578081fd5b81516111ee816130ec565b60008060408385031215612bce578081fd5b8235612bd9816130ec565b91506020830135612be9816130ec565b809150509250929050565b600080600060608486031215612c08578081fd5b8335612c13816130ec565b92506020840135612c23816130ec565b929592945050506040919091013590565b60008060408385031215612c46578182fd5b8235612c51816130ec565b91506020830135612be981613101565b60008060408385031215612c73578182fd5b8235612c7e816130ec565b946020939093013593505050565b600060208284031215612c9d578081fd5b81356111ee81613101565b600060208284031215612cb9578081fd5b81516111ee81613101565b600060208284031215612cd5578081fd5b5035919050565b600060208284031215612ced578081fd5b5051919050565b600080600060608486031215612d08578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d33578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d5d578081fd5b6111ee82612b6e565b60008060008060008060c08789031215612d7e578182fd5b612d8787612b6e565b9550612d9560208801612b6e565b9450612da360408801612b6e565b9350612db160608801612b6e565b9250612dbf60808801612b6e565b9150612dcd60a08801612b6e565b90509295509295509295565b6000602080835283518082850152825b81811015612e0557858101830151858201604001528201612de9565b81811115612e165783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f345784516001600160a01b031683529383019391830191600101612f0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f6857612f686130d6565b500190565b600060ff821660ff84168060ff03821115612f8a57612f8a6130d6565b019392505050565b600082612fad57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612fed578160001904821115612fd357612fd36130d6565b80851615612fe057918102915b93841c9390800290612fb7565b509250929050565b60006111ee60ff84168360008261300e57506001610ee9565b8161301b57506000610ee9565b8160018114613031576002811461303b57613057565b6001915050610ee9565b60ff84111561304c5761304c6130d6565b50506001821b610ee9565b5060208310610133831016604e8410600b841016171561307a575081810a610ee9565b6130848383612fb2565b8060001904821115613098576130986130d6565b029392505050565b60008160001904831182151516156130ba576130ba6130d6565b500290565b6000828210156130d1576130d16130d6565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146117d257600080fd5b80151581146117d257600080fdfea26469706673582212208614a1eafbd443b770ce4537e0284fd77022710779fa6014f6a8a77ea10e174c64736f6c63430008040033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106104315760003560e01c8063715018a611610227578063b411e9961161012d578063dd62ed3e116100b0578063f563728711610077578063f563728714610d94578063f8766f2014610db4578063f88b0e4614610dd4578063faf11fe914610dea578063fb27298714610e5357005b8063dd62ed3e14610ce4578063e5a1ffe114610d2a578063e798c01214610d4a578063f1c43f5f14610d5f578063f2fde38b14610d7457005b8063cd9a1b63116100f4578063cd9a1b6314610c2c578063d255fd7414610c42578063d28d885214610c6c578063d7edb93014610ca4578063d924499714610cc457005b8063b411e99614610b85578063b51ec13e14610ba5578063c59718ca14610bc5578063c7639d8014610be5578063ca9ec19914610c0d57005b806395d89b41116101b5578063a9aab6b91161017c578063a9aab6b914610ad4578063aed04fae14610af4578063b09f126614610b13578063b2e8a7d214610b44578063b35513f714610b6457005b806395d89b4114610a3057806398b1f16414610a5e578063a253c06e14610a7e578063a457c2d714610a94578063a9059cbb14610ab457005b8063887c60fb116101f9578063887c60fb146109b2578063893d20e8146109d15780638a982458146109ef5780638da5cb5b146109d1578063954ea66514610a1057005b8063715018a614610957578063762bb2821461096c57806382c4767b1461098257806386d0ada81461099857005b8063382e329a116103375780634f91e48c116102ba57806365001c661161028157806365001c66146108945780636789f2dc146108b45780636a911f4f146108d45780636ebcf607146108f457806370a082311461092157005b80634f91e48c1461081257806354d6b96e14610828578063589210d91461084857806358e553651461085e5780635c0494bb1461087457005b80634089b170116102fe5780634089b1701461078d57806342a11095146107a357806348e907b7146107bd5780634953554d146107d35780634ada218b146107f357005b8063382e329a1461070157806339509351146107225780633ad10ef6146107425780633b343ac0146107625780633cc39b7a1461077757005b806318160ddd116103bf5780632d882863116103865780632d88286314610672578063311a869714610694578063313ce567146106b657806332424aa3146106ca5780633478154b146106df57005b806318160ddd146105c95780631eb25d13146105de5780631f8b845e146105f357806323b872dd146106135780632a24e0641461063357005b8063095ea7b311610403578063095ea7b31461050f5780630ce0636c1461053f5780630fd99e161461055f578063156b2c5d1461059457806317391e49146105a957005b8063024c2ddd1461043a57806306fdde031461048557806307a25f3c146104c357806309218ee7146104e357005b3661043857005b005b34801561044657600080fd5b50610472610455366004612bbc565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b5060408051808201909152600c81526b527562626572204475636b7960a01b60208201525b60405161047c9190612dd9565b3480156104cf57600080fd5b506104386104de366004612b84565b610e80565b3480156104ef57600080fd5b506014546104fd9060ff1681565b60405160ff909116815260200161047c565b34801561051b57600080fd5b5061052f61052a366004612c61565b610ed8565b604051901515815260200161047c565b34801561054b57600080fd5b5061043861055a366004612c8c565b610eef565b34801561056b57600080fd5b5060095461058190600160281b900461ffff1681565b60405161ffff909116815260200161047c565b3480156105a057600080fd5b50610438610f27565b3480156105b557600080fd5b506010546104fd9062010000900460ff1681565b3480156105d557600080fd5b50600c54610472565b3480156105ea57600080fd5b50610472611000565b3480156105ff57600080fd5b5060095461058190610100900461ffff1681565b34801561061f57600080fd5b5061052f61062e366004612bf4565b61101d565b34801561063f57600080fd5b5060105461065a90600160401b90046001600160a01b031681565b6040516001600160a01b03909116815260200161047c565b34801561067e57600080fd5b506010546104fd90640100000000900460ff1681565b3480156106a057600080fd5b50600954610581906301000000900461ffff1681565b3480156106c257600080fd5b5060126104fd565b3480156106d657600080fd5b506104fd601281565b3480156106eb57600080fd5b5060095461058190600160381b900461ffff1681565b34801561070d57600080fd5b506010546104fd906301000000900460ff1681565b34801561072e57600080fd5b5061052f61073d366004612c61565b6110b4565b34801561074e57600080fd5b50600b5461065a906001600160a01b031681565b34801561076e57600080fd5b506104386110eb565b34801561078357600080fd5b5061047260175481565b34801561079957600080fd5b5061047260135481565b3480156107af57600080fd5b506010546104fd9060ff1681565b3480156107c957600080fd5b5061047260125481565b3480156107df57600080fd5b506104386107ee366004612c8c565b61113e565b3480156107ff57600080fd5b50601a5461052f90610100900460ff1681565b34801561081e57600080fd5b50610472600e5481565b34801561083457600080fd5b50610438610843366004612b84565b611187565b34801561085457600080fd5b50610472600f5481565b34801561086a57600080fd5b5061047260155481565b34801561088057600080fd5b5061047261088f366004612b84565b6111bb565b3480156108a057600080fd5b506104386108af366004612b84565b6111f5565b3480156108c057600080fd5b506104386108cf366004612cf4565b61136e565b3480156108e057600080fd5b506104386108ef366004612d4c565b6114b8565b34801561090057600080fd5b5061047261090f366004612b84565b60016020526000908152604090205481565b34801561092d57600080fd5b5061047261093c366004612b84565b6001600160a01b031660009081526001602052604090205490565b34801561096357600080fd5b506104386114f3565b34801561097857600080fd5b50610472600d5481565b34801561098e57600080fd5b5061065a61dead81565b3480156109a457600080fd5b50601a5461052f9060ff1681565b3480156109be57600080fd5b5060185461052f90610100900460ff1681565b3480156109dd57600080fd5b506000546001600160a01b031661065a565b3480156109fb57600080fd5b5060105461052f90600160381b900460ff1681565b348015610a1c57600080fd5b5060115461065a906001600160a01b031681565b348015610a3c57600080fd5b506040805180820190915260058152644455434b5960d81b60208201526104b6565b348015610a6a57600080fd5b50610438610a79366004612b84565b6115a6565b348015610a8a57600080fd5b50610472600c5481565b348015610aa057600080fd5b5061052f610aaf366004612c61565b6115d6565b348015610ac057600080fd5b5061052f610acf366004612c61565b611652565b348015610ae057600080fd5b50610438610aef366004612cc4565b61165f565b348015610b0057600080fd5b506014546104fd90610100900460ff1681565b348015610b1f57600080fd5b506104b6604051806040016040528060058152602001644455434b5960d81b81525081565b348015610b5057600080fd5b50610438610b5f366004612c8c565b611689565b348015610b7057600080fd5b506010546104fd90600160281b900460ff1681565b348015610b9157600080fd5b50610438610ba0366004612c8c565b6116c8565b348015610bb157600080fd5b50610438610bc0366004612cc4565b611700565b348015610bd157600080fd5b50610438610be0366004612b84565b61172a565b348015610bf157600080fd5b5061065a737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610c1957600080fd5b506010546104fd90610100900460ff1681565b348015610c3857600080fd5b5061047260165481565b348015610c4e57600080fd5b50610c5761175a565b6040805192835260208301919091520161047c565b348015610c7857600080fd5b506104b66040518060400160405280600c81526020016b527562626572204475636b7960a01b81525081565b348015610cb057600080fd5b50610438610cbf366004612cc4565b611797565b348015610cd057600080fd5b50610438610cdf366004612b84565b6117d5565b348015610cf057600080fd5b50610472610cff366004612bbc565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d3657600080fd5b50610438610d45366004612d4c565b611805565b348015610d5657600080fd5b50610438611846565b348015610d6b57600080fd5b50601954610472565b348015610d8057600080fd5b50610438610d8f366004612b84565b61187c565b348015610da057600080fd5b50610438610daf366004612d66565b6119a5565b348015610dc057600080fd5b50610438610dcf366004612c34565b611b2a565b348015610de057600080fd5b5061047260195481565b348015610df657600080fd5b506010546040805160ff600160281b840481168252630100000084048116602083015264010000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c00161047c565b348015610e5f57600080fd5b50610472610e6e366004612b84565b60036020526000908152604090205481565b610e8933611b8f565b610eae5760405162461bcd60e51b8152600401610ea590612e58565b60405180910390fd5b601a80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610ee5338484611bc6565b5060015b92915050565b610ef833611b8f565b610f145760405162461bcd60e51b8152600401610ea590612e58565b6009805460ff1916911515919091179055565b610f3033611b8f565b610f4c5760405162461bcd60e51b8152600401610ea590612e58565b60168054600091829055604051909173cb900b6bf1b4b2b2c190991e962b14c09201c98a91829084905b60006040518083038185875af1925050503d8060008114610fb3576040519150601f19603f3d011682016040523d82523d6000602084013e610fb8565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610ea5565b505050565b61100c6012600a612ff5565b61101a906305f5e1006130a0565b81565b600061102a848484611cb9565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156110955760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610ea5565b6110a985336110a486856130bf565b611bc6565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ee59185906110a4908690612f55565b6110f433611b8f565b6111105760405162461bcd60e51b8152600401610ea590612e58565b60158054600091829055604051909173c6ab324a15c429e34836d9c54a3e136da703702d9182908490610f76565b61114733611b8f565b6111635760405162461bcd60e51b8152600401610ea590612e58565b6010805491151566010000000000000266ff00000000000019909216919091179055565b61119033611b8f565b6111ac5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682611b7a565b5050565b6001600160a01b0381166000908152600360205260408120544281116111e45750600092915050565b6111ee42826130bf565b9392505050565b6111fe33611b8f565b61121a5760405162461bcd60e51b8152600401610ea590612e58565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190612cdc565b9050600081116112e85760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610ea5565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113689190612ca8565b50505050565b61137733611b8f565b6113935760405162461bcd60e51b8152600401610ea590612e58565b61139f6012600a612ff5565b6113a990846130a0565b92506113b76012600a612ff5565b6113c190836130a0565b91506113cf6012600a612ff5565b6113d990826130a0565b905060c86113e96012600a612ff5565b6113f7906305f5e1006130a0565b6114019190612f92565b8110156114205760405162461bcd60e51b8152600401610ea590612eae565b60c861142e6012600a612ff5565b61143c906305f5e1006130a0565b6114469190612f92565b8210156114655760405162461bcd60e51b8152600401610ea590612eae565b60c86114736012600a612ff5565b611481906305f5e1006130a0565b61148b9190612f92565b8310156114aa5760405162461bcd60e51b8152600401610ea590612eae565b600f92909255600d55600e55565b6114c133611b8f565b6114dd5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff191660ff92909216919091179055565b336115066000546001600160a01b031690565b6001600160a01b03161461155c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6115af33611b8f565b6115cb5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482612028565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156116395760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610ea5565b61164833856110a486856130bf565b5060019392505050565b6000610ee5338484611cb9565b61166833611b8f565b6116845760405162461bcd60e51b8152600401610ea590612e58565b601955565b61169233611b8f565b6116ae5760405162461bcd60e51b8152600401610ea590612e58565b601880549115156101000261ff0019909216919091179055565b6116d133611b8f565b6116ed5760405162461bcd60e51b8152600401610ea590612e58565b601a805460ff1916911515919091179055565b61170933611b8f565b6117255760405162461bcd60e51b8152600401610ea590612e58565b600855565b61173333611b8f565b61174f5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600482611b7a565b6000806117696012600a612ff5565b600d546117769190612f92565b6117826012600a612ff5565b600e5461178f9190612f92565b915091509091565b6117a033611b8f565b6117bc5760405162461bcd60e51b8152600401610ea590612e58565b6117d26117cd82633b9aca006130a0565b61203d565b50565b6117de33611b8f565b6117fa5760405162461bcd60e51b8152600401610ea590612e58565b6111b7600682612028565b61180e33611b8f565b61182a5760405162461bcd60e51b8152600401610ea590612e58565b6014805460ff9092166101000261ff0019909216919091179055565b61184f33611b8f565b61186b5760405162461bcd60e51b8152600401610ea590612e58565b601a805461ff001916610100179055565b3361188f6000546001600160a01b031690565b6001600160a01b0316146118e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ea5565b6001600160a01b03811661194a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ea5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119ae33611b8f565b6119ca5760405162461bcd60e51b8152600401610ea590612e58565b600f8360ff1611156119ee5760405162461bcd60e51b8152600401610ea590612e2c565b600f8260ff161115611a125760405162461bcd60e51b8152600401610ea590612e2c565b600f8160ff161115611a365760405162461bcd60e51b8152600401610ea590612e2c565b600084611a438789612f6d565b611a4d9190612f6d565b90508060ff16606414611aac5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610ea5565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516640100000000029790971664ff0000ffff1998851663010000000263ff000000199a8616600160281b029a909a1665ff00ff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b611b3333611b8f565b611b4f5760405162461bcd60e51b8152600401610ea590612e58565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006111ee836001600160a01b0384166121ec565b600080546001600160a01b0383811691161480610ee95750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611c105760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610ea5565b6001600160a01b038216611c585760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610ea5565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d045760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610ea5565b6001600160a01b038216611d4d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610ea5565b6000611d5a60048561223b565b80611d6b5750611d6b60048461223b565b80611d8e57506001600160a01b0384166000908152600a602052604090205460ff165b80611db157506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611dd457506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160401b90920416148015611e1a57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611e6057506010546001600160a01b03868116600160401b90920416148015611e6057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611e6b5750805b80611e735750825b15611e8857611e8386868661225d565b612020565b601a54610100900460ff16611f87576000546001600160a01b03878116911614801590611ec357506000546001600160a01b03868116911614155b15611f8757601054600160381b900460ff1615611f3057846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051611f2091815260200190565b60405180910390a3505050505050565b601a54610100900460ff16611f875760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ea5565b6010546000906001600160a01b03888116600160401b909204161480611fc957506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160401b90920416148061200e57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b905061201d8888888585612328565b50505b505050505050565b60006111ee836001600160a01b0384166126e8565b6018805460ff19166001908117909155306000908152602091909152604081205460105490919061208390640100000000810460ff908116916301000000900416612f6d565b60ff16905060006008549050838111156120a55760095460ff16156120a55750825b808310806120b5575061ffff8216155b156120c2575050506121df565b60105460009061ffff8416906120e2906301000000900460ff16846130a0565b6120ec9190612f92565b60105490915060009061ffff85169061211090640100000000900460ff16856130a0565b61211a9190612f92565b60105490915060009061ffff86169061213d90600160281b900460ff16866130a0565b6121479190612f92565b90506000612156600285612f92565b9050600061216482866130bf565b90506000836121738684612f55565b61217d9190612f55565b905047612189826127ff565b600061219582476130bf565b90506000836121a486846130a0565b6121ae9190612f92565b90506121ba868261297b565b60006121c684476130bf565b90506121d181612a52565b505050505050505050505050505b506018805460ff19169055565b600081815260018301602052604081205461223357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ee9565b506000610ee9565b6001600160a01b038116600090815260018301602052604081205415156111ee565b6001600160a01b038316600090815260016020526040902054818110156122c15760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6122cb8483612ad1565b6122d58383612b16565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231a91815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156123965760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ea5565b6002600e546123a59190612f92565b600855600083156124aa576123bb60068961223b565b612455576001600160a01b038816600090815260036020526040902054421015806123ed5750601854610100900460ff165b61242e5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610ea5565b60195461243b9042612f55565b6001600160a01b0389166000908152600360205260409020555b600e548611156124995760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610ea5565b50601054610100900460ff166125bc565b841561250957600d546124bd8785612f55565b11156124db5760405162461bcd60e51b8152600401610ea590612e84565b600f548611156124fd5760405162461bcd60e51b8152600401610ea590612e84565b5060105460ff166125bc565b600d546125168785612f55565b11156125345760405162461bcd60e51b8152600401610ea590612e84565b61253f60068961223b565b6125ae576001600160a01b038816600090815260036020526040902054421015806125715750601854610100900460ff165b6125ae5760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610ea5565b5060105462010000900460ff165b6010546001600160a01b03898116600160401b90920416148015906125e45750601a5460ff16155b80156125f3575060185460ff16155b15612601576126018661203d565b601054600090612646908890849060ff600160281b82048116916126379163010000008204811691640100000000900416612f6d565b6126419190612f6d565b612b3a565b9050600061265482896130bf565b90506126608a89612ad1565b306000908152600160205260408120805484929061267f908490612f55565b9091555061268f90508982612b16565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126d491815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127f557600061270c6001836130bf565b8554909150600090612720906001906130bf565b9050600086600001828154811061274757634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061277857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600189019091526040902084905586548790806127b957634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ee9565b6000915050610ee9565b6011546128179030906001600160a01b031683611bc6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061285a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ae57600080fd5b505afa1580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e69190612ba0565b8160018151811061290757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac9479061294d908590600090869030904290600401612ee5565b600060405180830381600087803b15801561296757600080fd5b505af1158015612020573d6000803e3d6000fd5b806017600082825461298d9190612f55565b90915550506011546129aa9030906001600160a01b031684611bc6565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4b9190612d1f565b5050505050565b601454600090606490612a689060ff16846130a0565b612a729190612f92565b601454909150600090606490612a9090610100900460ff16856130a0565b612a9a9190612f92565b90508160156000828254612aae9190612f55565b925050819055508060166000828254612ac79190612f55565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612af59083906130bf565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612af5908390612f55565b60006127108260ff168460ff1686612b5291906130a0565b612b5c91906130a0565b612b669190612f92565b949350505050565b803560ff81168114612b7f57600080fd5b919050565b600060208284031215612b95578081fd5b81356111ee816130ec565b600060208284031215612bb1578081fd5b81516111ee816130ec565b60008060408385031215612bce578081fd5b8235612bd9816130ec565b91506020830135612be9816130ec565b809150509250929050565b600080600060608486031215612c08578081fd5b8335612c13816130ec565b92506020840135612c23816130ec565b929592945050506040919091013590565b60008060408385031215612c46578182fd5b8235612c51816130ec565b91506020830135612be981613101565b60008060408385031215612c73578182fd5b8235612c7e816130ec565b946020939093013593505050565b600060208284031215612c9d578081fd5b81356111ee81613101565b600060208284031215612cb9578081fd5b81516111ee81613101565b600060208284031215612cd5578081fd5b5035919050565b600060208284031215612ced578081fd5b5051919050565b600080600060608486031215612d08578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d33578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d5d578081fd5b6111ee82612b6e565b60008060008060008060c08789031215612d7e578182fd5b612d8787612b6e565b9550612d9560208801612b6e565b9450612da360408801612b6e565b9350612db160608801612b6e565b9250612dbf60808801612b6e565b9150612dcd60a08801612b6e565b90509295509295509295565b6000602080835283518082850152825b81811015612e0557858101830151858201604001528201612de9565b81811115612e165783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f345784516001600160a01b031683529383019391830191600101612f0f565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f6857612f686130d6565b500190565b600060ff821660ff84168060ff03821115612f8a57612f8a6130d6565b019392505050565b600082612fad57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115612fed578160001904821115612fd357612fd36130d6565b80851615612fe057918102915b93841c9390800290612fb7565b509250929050565b60006111ee60ff84168360008261300e57506001610ee9565b8161301b57506000610ee9565b8160018114613031576002811461303b57613057565b6001915050610ee9565b60ff84111561304c5761304c6130d6565b50506001821b610ee9565b5060208310610133831016604e8410600b841016171561307a575081810a610ee9565b6130848383612fb2565b8060001904821115613098576130986130d6565b029392505050565b60008160001904831182151516156130ba576130ba6130d6565b500290565b6000828210156130d1576130d16130d6565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146117d257600080fd5b80151581146117d257600080fdfea26469706673582212208614a1eafbd443b770ce4537e0284fd77022710779fa6014f6a8a77ea10e174c64736f6c63430008040033
Deployed Bytecode Sourcemap
16042:18490:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16231:68;;;;;;;;;;-1:-1:-1;16231:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6500:25:1;;;6488:2;6473:18;16231:68:0;;;;;;;;32205:94;;;;;;;;;;-1:-1:-1;32286:5:0;;;;;;;;;;;;-1:-1:-1;;;32286:5:0;;;;32205:94;;;;;;;:::i;31438:149::-;;;;;;;;;;-1:-1:-1;31438:149:0;;;;;:::i;:::-;;:::i;23698:30::-;;;;;;;;;;-1:-1:-1;23698:30:0;;;;;;;;;;;16546:4:1;16534:17;;;16516:36;;16504:2;16489:18;23698:30:0;16471:87:1;33090:161:0;;;;;;;;;;-1:-1:-1;33090:161:0;;;;;:::i;:::-;;:::i;:::-;;;6087:14:1;;6080:22;6062:41;;6050:2;6035:18;33090:161:0;6017:92:1;27682:104:0;;;;;;;;;;-1:-1:-1;27682:104:0;;;;;:::i;:::-;;:::i;16936:35::-;;;;;;;;;;-1:-1:-1;16936:35:0;;;;-1:-1:-1;;;16936:35:0;;;;;;;;;14392:6:1;14380:19;;;14362:38;;14350:2;14335:18;16936:35:0;14317:89:1;28869:282:0;;;;;;;;;;;;;:::i;17580:25::-;;;;;;;;;;-1:-1:-1;17580:25:0;;;;;;;;;;;32515:108;;;;;;;;;;-1:-1:-1;32597:18:0;;32515:108;;16622:66;;;;;;;;;;;;;:::i;16791:34::-;;;;;;;;;;-1:-1:-1;16791:34:0;;;;;;;;;;;33564:392;;;;;;;;;;-1:-1:-1;33564:392:0;;;;;:::i;:::-;;:::i;17783:34::-;;;;;;;;;;-1:-1:-1;17783:34:0;;;;-1:-1:-1;;;17783:34:0;;-1:-1:-1;;;;;17783:34:0;;;;;;-1:-1:-1;;;;;4987:32:1;;;4969:51;;4957:2;4942:18;17783:34:0;4924:102:1;17645:26:0;;;;;;;;;;-1:-1:-1;17645:26:0;;;;;;;;;;;16844:40;;;;;;;;;;-1:-1:-1;16844:40:0;;;;;;;;;;;32413:94;;;;;;;;;;-1:-1:-1;16613:2:0;32413:94;;16579:36;;;;;;;;;;;;16613:2;16579:36;;16990:42;;;;;;;;;;-1:-1:-1;16990:42:0;;;;-1:-1:-1;;;16990:42:0;;;;;;17612:26;;;;;;;;;;-1:-1:-1;17612:26:0;;;;;;;;;;;33972:205;;;;;;;;;;-1:-1:-1;33972:205:0;;;;;:::i;:::-;;:::i;17263:25::-;;;;;;;;;;-1:-1:-1;17263:25:0;;;;-1:-1:-1;;;;;17263:25:0;;;28559:300;;;;;;;;;;;;;:::i;24117:25::-;;;;;;;;;;;;;;;;23656:27;;;;;;;;;;;;;;;;17525:20;;;;;;;;;;-1:-1:-1;17525:20:0;;;;;;;;23605:38;;;;;;;;;;;;;;;;31896:118;;;;;;;;;;-1:-1:-1;31896:118:0;;;;;:::i;:::-;;:::i;31249:26::-;;;;;;;;;;-1:-1:-1;31249:26:0;;;;;;;;;;;17412:46;;;;;;;;;;;;;;;;28286:129;;;;;;;;;;-1:-1:-1;28286:129:0;;;;;:::i;:::-;;:::i;17465:45::-;;;;;;;;;;;;;;;;23772:31;;;;;;;;;;;;;;;;27161:289;;;;;;;;;;-1:-1:-1;27161:289:0;;;;;:::i;:::-;;:::i;31595:::-;;;;;;;;;;-1:-1:-1;31595:289:0;;;;;:::i;:::-;;:::i;30577:644::-;;;;;;;;;;-1:-1:-1;30577:644:0;;;;;:::i;:::-;;:::i;30207:111::-;;;;;;;;;;-1:-1:-1;30207:111:0;;;;;:::i;:::-;;:::i;16179:45::-;;;;;;;;;;-1:-1:-1;16179:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32631:121;;;;;;;;;;-1:-1:-1;32631:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32726:18:0;32699:7;32726:18;;;:9;:18;;;;;;;32631:121;8161:140;;;;;;;;;;;;;:::i;17356:49::-;;;;;;;;;;;;;;;;17183:73;;;;;;;;;;;;17214:42;17183:73;;27643:28;;;;;;;;;;-1:-1:-1;27643:28:0;;;;;;;;27574;;;;;;;;;;-1:-1:-1;27574:28:0;;;;;;;;;;;32103:94;;;;;;;;;;-1:-1:-1;32155:7:0;8001:6;-1:-1:-1;;;;;8001:6:0;32103:94;;17744:30;;;;;;;;;;-1:-1:-1;17744:30:0;;;;-1:-1:-1;;;17744:30:0;;;;;;17824:39;;;;;;;;;;-1:-1:-1;17824:39:0;;;;-1:-1:-1;;;;;17824:39:0;;;32307:98;;;;;;;;;;-1:-1:-1;32390:7:0;;;;;;;;;;;;-1:-1:-1;;;32390:7:0;;;;32307:98;;28160:114;;;;;;;;;;-1:-1:-1;28160:114:0;;;;;:::i;:::-;;:::i;17301:48::-;;;;;;;;;;;;;;;;34185:342;;;;;;;;;;-1:-1:-1;34185:342:0;;;;;:::i;:::-;;:::i;32760:167::-;;;;;;;;;;-1:-1:-1;32760:167:0;;;;;:::i;:::-;;:::i;29409:118::-;;;;;;;;;;-1:-1:-1;29409:118:0;;;;;:::i;:::-;;:::i;23735:24::-;;;;;;;;;;-1:-1:-1;23735:24:0;;;;;;;;;;;16532:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16532:40:0;;;;;29290:107;;;;;;;;;;-1:-1:-1;29290:107:0;;;;;:::i;:::-;;:::i;17678:20::-;;;;;;;;;;-1:-1:-1;17678:20:0;;;;-1:-1:-1;;;17678:20:0;;;;;;29165:113;;;;;;;;;;-1:-1:-1;29165:113:0;;;;;:::i;:::-;;:::i;27794:91::-;;;;;;;;;;-1:-1:-1;27794:91:0;;;;;:::i;:::-;;:::i;28041:113::-;;;;;;;;;;-1:-1:-1;28041:113:0;;;;;:::i;:::-;;:::i;17096:80::-;;;;;;;;;;;;17134:42;17096:80;;17552:21;;;;;;;;;;-1:-1:-1;17552:21:0;;;;;;;;;;;23810:25;;;;;;;;;;;;;;;;26732:157;;;;;;;;;;;;;:::i;:::-;;;;15755:25:1;;;15811:2;15796:18;;15789:34;;;;15728:18;26732:157:0;15710:119:1;16480:45:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16480:45:0;;;;;30435:128;;;;;;;;;;-1:-1:-1;30435:128:0;;;;;:::i;:::-;;:::i;28421:130::-;;;;;;;;;;-1:-1:-1;28421:130:0;;;;;:::i;:::-;;:::i;32935:147::-;;;;;;;;;;-1:-1:-1;32935:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;33046:19:0;;;33019:7;33046:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;32935:147;30328:99;;;;;;;;;;-1:-1:-1;30328:99:0;;;;;:::i;:::-;;:::i;31335:89::-;;;;;;;;;;;;;:::i;27456:110::-;;;;;;;;;;-1:-1:-1;27546:12:0;;27456:110;;8315:236;;;;;;;;;;-1:-1:-1;8315:236:0;;;;;:::i;:::-;;:::i;29541:654::-;;;;;;;;;;-1:-1:-1;29541:654:0;;;;;:::i;:::-;;:::i;27928:105::-;;;;;;;;;;-1:-1:-1;27928:105:0;;;;;:::i;:::-;;:::i;27609:27::-;;;;;;;;;;;;;;;;26897:252;;;;;;;;;;-1:-1:-1;27075:7:0;;26897:252;;;27075:7;-1:-1:-1;;;27075:7:0;;;;16121:25:1;;27083:13:0;;;;;16177:2:1;16162:18;;16155:34;27097:13:0;;;;;16205:18:1;;;16198:34;;;;27111:7:0;;;16263:2:1;16248:18;;16241:34;27075:7:0;27119:8;;;;16306:3:1;16291:19;;16284:35;27128:12:0;;;;;16350:3:1;16335:19;;16328:35;16108:3;16093:19;26897:252:0;16075:294:1;16306:45:0;;;;;;;;;;-1:-1:-1;16306:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;31438:149;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;;;;;;;;;31535:22:::1;:44:::0;;-1:-1:-1;;;;;31535:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;31535:44:0;;::::1;::::0;;;::::1;::::0;;31438:149::o;33090:161::-;33167:4;33184:37;33193:10;33205:7;33214:6;33184:8;:37::i;:::-;-1:-1:-1;33239:4:0;33090:161;;;;;:::o;27682:104::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;27755:12:::1;:23:::0;;-1:-1:-1;;27755:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27682:104::o;28869:282::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28941:10:::1;::::0;;28926:14:::1;28962:12:::0;;;;29069:32:::1;::::0;28941:10;;29002:42:::1;::::0;;;28941:10;;29069:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29055:46;;;29120:4;29112:31;;;::::0;-1:-1:-1;;;29112:31:0;;13388:2:1;29112:31:0::1;::::0;::::1;13370:21:1::0;13427:2;13407:18;;;13400:30;-1:-1:-1;;;13446:18:1;;;13439:45;13501:18;;29112:31:0::1;13360:165:1::0;29112:31:0::1;17970:1;;;28869:282::o:0;16622:66::-;16675:13;16613:2;16675;:13;:::i;:::-;16661:27;;:11;:27;:::i;:::-;16622:66;:::o;33564:392::-;33664:4;33681:36;33691:6;33699:9;33710:6;33681:9;:36::i;:::-;-1:-1:-1;;;;;33757:19:0;;33730:24;33757:19;;;:11;:19;;;;;;;;33777:10;33757:31;;;;;;;;33807:26;;;;33799:59;;;;-1:-1:-1;;;33799:59:0;;9144:2:1;33799:59:0;;;9126:21:1;9183:2;9163:18;;;9156:30;-1:-1:-1;;;9202:18:1;;;9195:50;9262:18;;33799:59:0;9116:170:1;33799:59:0;33871:55;33880:6;33888:10;33900:25;33919:6;33900:16;:25;:::i;:::-;33871:8;:55::i;:::-;-1:-1:-1;33944:4:0;;33564:392;-1:-1:-1;;;;33564:392:0:o;33972:205::-;34080:10;34054:4;34101:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34101:32:0;;;;;;;;;;34054:4;;34071:76;;34092:7;;34101:45;;34136:10;;34101:45;:::i;28559:300::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28637:16:::1;::::0;;28622:14:::1;28664:18:::0;;;;28777:32:::1;::::0;28637:16;;28710:42:::1;::::0;;;28637:16;;28777:32:::1;4804:14:1::0;31896:118:0;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;31980:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31980:26:0;;::::1;::::0;;;::::1;::::0;;31896:118::o;28286:129::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28373:34:::1;:21;28399:7:::0;28373:25:::1;:34::i;:::-;;28286:129:::0;:::o;27161:289::-;-1:-1:-1;;;;;27291:25:0;;27255:7;27291:25;;;:9;:25;;;;;;27340:15;27330:25;;27327:74;;-1:-1:-1;27388:1:0;;27161:289;-1:-1:-1;;27161:289:0:o;27327:74::-;27418:24;27427:15;27418:8;:24;:::i;:::-;27411:31;27161:289;-1:-1:-1;;;27161:289:0:o;31595:::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;31737:30:::1;::::0;-1:-1:-1;;;31737:30:0;;31761:4:::1;31737:30;::::0;::::1;4969:51:1::0;31694:10:0;;31672:12:::1;::::0;-1:-1:-1;;;;;31737:15:0;::::1;::::0;::::1;::::0;4942:18:1;;31737:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31716:51;;31797:1;31786:10;:12;31778:49;;;::::0;-1:-1:-1;;;31778:49:0;;11990:2:1;31778:49:0::1;::::0;::::1;11972:21:1::0;12029:2;12009:18;;;12002:30;12068:26;12048:18;;;12041:54;12112:18;;31778:49:0::1;11962:174:1::0;31778:49:0::1;31838:38;::::0;-1:-1:-1;;;31838:38:0;;31853:10:::1;31838:38;::::0;::::1;5205:51:1::0;5272:18;;;5265:34;;;-1:-1:-1;;;;;31838:14:0;::::1;::::0;::::1;::::0;5178:18:1;;31838:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17970:1;;31595:289:::0;:::o;30577:644::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;30728:13:::1;16613:2;30728;:13;:::i;:::-;30715:26;::::0;:11;:26:::1;:::i;:::-;30701:40:::0;-1:-1:-1;30784:13:0::1;16613:2;30784;:13;:::i;:::-;30768:29;::::0;:15;:29:::1;:::i;:::-;30752:45:::0;-1:-1:-1;30834:13:0::1;16613:2;30834;:13;:::i;:::-;30821:26;::::0;:12;:26:::1;:::i;:::-;30808:39:::0;-1:-1:-1;30896:3:0::1;16675:13;16613:2;16675;:13;:::i;:::-;16661:27;::::0;:11:::1;:27;:::i;:::-;30882:17;;;;:::i;:::-;30866:12;:33;;30858:74;;;;-1:-1:-1::0;;;30858:74:0::1;;;;;;;:::i;:::-;30984:3;16675:13;16613:2;16675;:13;:::i;:::-;16661:27;::::0;:11:::1;:27;:::i;:::-;30970:17;;;;:::i;:::-;30951:15;:36;;30943:77;;;;-1:-1:-1::0;;;30943:77:0::1;;;;;;;:::i;:::-;31068:3;16675:13;16613:2;16675;:13;:::i;:::-;16661:27;::::0;:11:::1;:27;:::i;:::-;31054:17;;;;:::i;:::-;31039:11;:32;;31031:73;;;;-1:-1:-1::0;;;31031:73:0::1;;;;;;;:::i;:::-;31115:8;:22:::0;;;;31148:12:::1;:30:::0;31189:9:::1;:24:::0;30577:644::o;30207:111::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;30287:14:::1;:23:::0;;-1:-1:-1;;30287:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30207:111::o;8161:140::-;8080:10;8069:7;7974;8001:6;-1:-1:-1;;;;;8001:6:0;;7936:79;8069:7;-1:-1:-1;;;;;8069:21:0;;8061:66;;;;-1:-1:-1;;;8061:66:0;;10528:2:1;8061:66:0;;;10510:21:1;;;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;10658:18;;8061:66:0;10500:182:1;8061:66:0;8260:1:::1;8244:6:::0;;8223:40:::1;::::0;-1:-1:-1;;;;;8244:6:0;;::::1;::::0;8223:40:::1;::::0;8260:1;;8223:40:::1;8291:1;8274:19:::0;;-1:-1:-1;;;;;;8274:19:0::1;::::0;;8161:140::o;28160:114::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28241:25:::1;:9;28258:7:::0;28241:16:::1;:25::i;34185:342::-:0;34328:10;34272:4;34316:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34316:32:0;;;;;;;;;;34367:35;;;;34359:60;;;;-1:-1:-1;;;34359:60:0;;13732:2:1;34359:60:0;;;13714:21:1;13771:2;13751:18;;;13744:30;-1:-1:-1;;;13790:18:1;;;13783:42;13842:18;;34359:60:0;13704:162:1;34359:60:0;34432:65;34441:10;34453:7;34462:34;34481:15;34462:16;:34;:::i;34432:65::-;-1:-1:-1;34515:4:0;;34185:342;-1:-1:-1;;;34185:342:0:o;32760:167::-;32840:4;32857:40;32867:10;32879:9;32890:6;32857:9;:40::i;29409:118::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;29491:12:::1;:28:::0;29409:118::o;29290:107::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;29364:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;29364:25:0;;::::1;::::0;;;::::1;::::0;;29290:107::o;29165:113::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;29247:16:::1;:23:::0;;-1:-1:-1;;29247:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29165:113::o;27794:91::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;27862:9:::1;:15:::0;27794:91::o;28041:113::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28124:22:::1;:9;28138:7:::0;28124:13:::1;:22::i;26732:157::-:0;26781:15;;26842:13;16613:2;26842;:13;:::i;:::-;26829:12;;:26;;;;:::i;:::-;26867:13;16613:2;26867;:13;:::i;:::-;26857:9;;:23;;;;:::i;:::-;26822:59;;;;26732:157;;:::o;30435:128::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;30523:32:::1;30542:12;:4:::0;30549:5:::1;30542:12;:::i;:::-;30523:18;:32::i;:::-;30435:128:::0;:::o;28421:130::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;28506:37:::1;:21;28535:7:::0;28506:28:::1;:37::i;30328:99::-:0;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;30402:8:::1;:17:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;30402:17:0;;::::1;::::0;;;::::1;::::0;;30328:99::o;31335:89::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;31395:14:::1;:21:::0;;-1:-1:-1;;31395:21:0::1;;;::::0;;31335:89::o;8315:236::-;8080:10;8069:7;7974;8001:6;-1:-1:-1;;;;;8001:6:0;;7936:79;8069:7;-1:-1:-1;;;;;8069:21:0;;8061:66;;;;-1:-1:-1;;;8061:66:0;;10528:2:1;8061:66:0;;;10510:21:1;;;10547:18;;;10540:30;10606:34;10586:18;;;10579:62;10658:18;;8061:66:0;10500:182:1;8061:66:0;-1:-1:-1;;;;;8396:22:0;::::1;8388:73;;;::::0;-1:-1:-1;;;8388:73:0;;8046:2:1;8388:73:0::1;::::0;::::1;8028:21:1::0;8085:2;8065:18;;;8058:30;8124:34;8104:18;;;8097:62;-1:-1:-1;;;8175:18:1;;;8168:36;8221:19;;8388:73:0::1;8018:228:1::0;8388:73:0::1;8498:6;::::0;;8477:38:::1;::::0;-1:-1:-1;;;;;8477:38:0;;::::1;::::0;8498:6;::::1;::::0;8477:38:::1;::::0;::::1;8526:6;:17:::0;;-1:-1:-1;;;;;;8526:17:0::1;-1:-1:-1::0;;;;;8526:17:0;;;::::1;::::0;;;::::1;::::0;;8315:236::o;29541:654::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;29718:2:::1;29708:6;:12;;;;29700:43;;;;-1:-1:-1::0;;;29700:43:0::1;;;;;;;:::i;:::-;29773:2;29762:7;:13;;;;29754:44;;;;-1:-1:-1::0;;;29754:44:0::1;;;;;;;:::i;:::-;29832:2;29817:11;:17;;;;29809:48;;;;-1:-1:-1::0;;;29809:48:0::1;;;;;;;:::i;:::-;29868:14;29907::::0;29883:23:::1;29892:14:::0;29883:8;:23:::1;:::i;:::-;:38;;;;:::i;:::-;29868:53;;29940:8;:13;;29950:3;29940:13;29932:59;;;::::0;-1:-1:-1;;;29932:59:0;;10889:2:1;29932:59:0::1;::::0;::::1;10871:21:1::0;10928:2;10908:18;;;10901:30;10967:34;10947:18;;;10940:62;-1:-1:-1;;;11018:18:1;;;11011:31;11059:19;;29932:59:0::1;10861:223:1::0;29932:59:0::1;-1:-1:-1::0;30002:7:0::1;:18:::0;;::::1;30163:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;30136:16:0;;::::1;30002:18;30136:16;-1:-1:-1::0;;30070:28:0;;::::1;::::0;::::1;30136:16:::0;;;;-1:-1:-1;;30031:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;30002:18:0;;::::1;-1:-1:-1::0;;;30002:18:0::1;30031:28:::0;;;;-1:-1:-1;;30031:28:0;;;;;;;;;;::::1;30136:16:::0;;;;;;;;30111:14;::::1;30136:16:::0;;;;;;;::::1;30163:24;::::0;;;::::1;::::0;;29541:654::o;27928:105::-;17917:19;17925:10;17917:7;:19::i;:::-;17909:50;;;;-1:-1:-1;;;17909:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28005:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;28005:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27928:105::o;14434:152::-;14504:4;14528:50;14533:3;-1:-1:-1;;;;;14553:23:0;;14528:4;:50::i;18100:111::-;18153:4;8001:6;;-1:-1:-1;;;;;18176:13:0;;;8001:6;;18176:13;;:27;;-1:-1:-1;;;;;;;18191:12:0;;;;;:6;:12;;;;;;;;;18100:111::o;33257:299::-;-1:-1:-1;;;;;33350:19:0;;33342:49;;;;-1:-1:-1;;;33342:49:0;;8453:2:1;33342:49:0;;;8435:21:1;8492:2;8472:18;;;8465:30;-1:-1:-1;;;8511:18:1;;;8504:47;8568:18;;33342:49:0;8425:167:1;33342:49:0;-1:-1:-1;;;;;33410:21:0;;33402:49;;;;-1:-1:-1;;;33402:49:0;;10184:2:1;33402:49:0;;;10166:21:1;10223:2;10203:18;;;10196:30;-1:-1:-1;;;10242:18:1;;;10235:45;10297:18;;33402:49:0;10156:165:1;33402:49:0;-1:-1:-1;;;;;33464:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33516:32;;6500:25:1;;;33516:32:0;;6473:18:1;33516:32:0;;;;;;;33257:299;;;:::o;19436:1447::-;-1:-1:-1;;;;;19532:20:0;;19524:51;;;;-1:-1:-1;;;19524:51:0;;7346:2:1;19524:51:0;;;7328:21:1;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:48;7462:18;;19524:51:0;7318:168:1;19524:51:0;-1:-1:-1;;;;;19594:23:0;;19586:52;;;;-1:-1:-1;;;19586:52:0;;8799:2:1;19586:52:0;;;8781:21:1;8838:2;8818:18;;;8811:30;-1:-1:-1;;;8857:18:1;;;8850:46;8913:18;;19586:52:0;8771:166:1;19586:52:0;19651:15;19670:26;:9;19689:6;19670:18;:26::i;:::-;:59;;;-1:-1:-1;19700:29:0;:9;19719;19700:18;:29::i;:::-;19670:77;;;-1:-1:-1;;;;;;19733:14:0;;;;;;:6;:14;;;;;;;;19670:77;:98;;;-1:-1:-1;;;;;;19751:17:0;;;;;;:6;:17;;;;;;;;19670:98;19651:118;-1:-1:-1;19782:23:0;-1:-1:-1;;;;;19807:21:0;;19823:4;19807:21;;:49;;-1:-1:-1;;;;;;19832:24:0;;19851:4;19832:24;19807:49;19909:19;;19782:75;;-1:-1:-1;19870:24:0;;-1:-1:-1;;;;;19899:29:0;;;-1:-1:-1;;;19909:19:0;;;;19899:29;:59;;;;-1:-1:-1;;;;;;19932:26:0;;17134:42;19932:26;19899:59;19898:135;;;-1:-1:-1;19986:19:0;;-1:-1:-1;;;;;19973:32:0;;;-1:-1:-1;;;19986:19:0;;;;19973:32;:59;;;;-1:-1:-1;;;;;;20009:23:0;;17134:42;20009:23;19973:59;19870:164;;20052:18;:41;;;;20074:19;20052:41;:55;;;;20097:10;20052:55;20049:827;;;20123:43;20140:6;20148:9;20159:6;20123:16;:43::i;:::-;20049:827;;;20212:14;;;;;;;20207:404;;7974:7;8001:6;-1:-1:-1;;;;;20251:17:0;;;8001:6;;20251:17;;;;:41;;-1:-1:-1;7974:7:0;8001:6;-1:-1:-1;;;;;20272:20:0;;;8001:6;;20272:20;;20251:41;20247:349;;;20321:10;;-1:-1:-1;;;20321:10:0;;;;20317:260;;;20381:9;-1:-1:-1;;;;;20365:28:0;20374:6;-1:-1:-1;;;;;20365:28:0;;20391:1;20365:28;;;;6500:25:1;;6488:2;6473:18;;6455:76;20365:28:0;;;;;;;;20420:7;;;19436:1447;;;:::o;20317:260::-;20512:14;;;;;;;20504:49;;;;-1:-1:-1;;;20504:49:0;;11291:2:1;20504:49:0;;;11273:21:1;11330:2;11310:18;;;11303:30;11369:25;11349:18;;;11342:53;11412:18;;20504:49:0;11263:173:1;20504:49:0;20662:19;;20643:10;;-1:-1:-1;;;;;20654:27:0;;;-1:-1:-1;;;20662:19:0;;;;20654:27;;:53;;-1:-1:-1;;;;;;20684:23:0;;17134:42;20684:23;20654:53;20745:19;;20643:64;;-1:-1:-1;20722:11:0;;-1:-1:-1;;;;;20734:30:0;;;-1:-1:-1;;;20745:19:0;;;;20734:30;;:59;;-1:-1:-1;;;;;;20767:26:0;;17134:42;20767:26;20734:59;20722:71;;20808:52;20823:6;20830:9;20840:6;20847:5;20853:6;20808:14;:52::i;:::-;20049:827;;;19436:1447;;;;;;:::o;14600:158::-;14673:4;14697:53;14705:3;-1:-1:-1;;;;;14725:23:0;;14697:7;:53::i;24342:1225::-;24234:27;:34;;-1:-1:-1;;24234:34:0;24264:4;24234:34;;;;;;24460:4:::1;24234:27:::0;24442:24;;;::::1;::::0;;;;;;;;24507:13:::1;::::0;24442:24;;24234:27;24493::::1;::::0;24507:13;;::::1;24234:34:::0;24507:13;;::::1;::::0;24493;;::::1;;:27;:::i;:::-;24477:43;;;;24531:19;24551:9;;24531:29;;24588:8;24574:11;:22;24571:127;;;24616:12;::::0;::::1;;24613:74;;;-1:-1:-1::0;24663:8:0;24613:74:::1;24730:11;24714:15;:27;:40;;;-1:-1:-1::0;24743:11:0::1;::::0;::::1;::::0;24714:40:::1;24711:77;;;24770:7;;;;;24711:77;24837:13;::::0;24798:25:::1;::::0;24824:36:::1;::::0;::::1;::::0;24825:25:::1;::::0;24837:13;;::::1;;;24825:11:::0;:25:::1;:::i;:::-;24824:36;;;;:::i;:::-;24911:13;::::0;24798:62;;-1:-1:-1;24871:25:0::1;::::0;24898:36:::1;::::0;::::1;::::0;24899:25:::1;::::0;24911:13;;::::1;;;24899:11:::0;:25:::1;:::i;:::-;24898:36;;;;:::i;:::-;24979:7;::::0;24871:63;;-1:-1:-1;24945:19:0::1;::::0;24966:30:::1;::::0;::::1;::::0;24967:19:::1;::::0;-1:-1:-1;;;24979:7:0;::::1;;;24967:11:::0;:19:::1;:::i;:::-;24966:30;;;;:::i;:::-;24945:51:::0;-1:-1:-1;25009:16:0::1;25026:19;25044:1;25026:17:::0;:19:::1;:::i;:::-;25009:36:::0;-1:-1:-1;25056:19:0::1;25076:26;25009:36:::0;25076:17;:26:::1;:::i;:::-;25056:46:::0;-1:-1:-1;25115:17:0::1;25163:11:::0;25133:29:::1;25145:17:::0;25056:46;25133:29:::1;:::i;:::-;:41;;;;:::i;:::-;25115:59:::0;-1:-1:-1;25213:21:0::1;25245:27;25115:59:::0;25245:16:::1;:27::i;:::-;25283:14;25299:41;25323:17:::0;25299:21:::1;:41;:::i;:::-;25283:58:::0;-1:-1:-1;25352:14:0::1;25390:9:::0;25370:18:::1;25377:11:::0;25283:58;25370:18:::1;:::i;:::-;25369:30;;;;:::i;:::-;25352:47;;25410:31;25424:8;25434:6;25410:13;:31::i;:::-;25452:20;25474:41;25498:17:::0;25474:21:::1;:41;:::i;:::-;25452:64;;25527:32;25546:12;25527:18;:32::i;:::-;24279:1;;;;;;;;;;;;;;-1:-1:-1::0;24291:27:0;:35;;-1:-1:-1;;24291:35:0;;;24342:1225::o;12128:305::-;12191:4;13217:19;;;:12;;;:19;;;;;;12208:218;;-1:-1:-1;12251:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12325:18;;12303:19;;;:12;;;:19;;;;;;:40;;;;12358:11;;12208:218;-1:-1:-1;12409:5:0;12402:12;;14772:167;-1:-1:-1;;;;;14906:23:0;;14852:4;13217:19;;;:12;;;:19;;;;;;:24;;14876:55;13120:129;22682:351;-1:-1:-1;;;;;22801:17:0;;22777:21;22801:17;;;:9;:17;;;;;;22837:23;;;;22829:60;;;;-1:-1:-1;;;22829:60:0;;7693:2:1;22829:60:0;;;7675:21:1;7732:2;7712:18;;;7705:30;-1:-1:-1;;;7751:18:1;;;7744:54;7815:18;;22829:60:0;7665:174:1;22829:60:0;22903:27;22916:6;22923;22903:12;:27::i;:::-;22944:28;22954:9;22965:6;22944:9;:28::i;:::-;23006:9;-1:-1:-1;;;;;22990:33:0;22999:6;-1:-1:-1;;;;;22990:33:0;;23016:6;22990:33;;;;6500:25:1;;6488:2;6473:18;;6455:76;22990:33:0;;;;;;;;22682:351;;;;:::o;20901:1769::-;-1:-1:-1;;;;;21044:20:0;;;21017:24;21044:20;;;:9;:20;;;;;;;21099:17;;;;;;;;21135:23;;;;21127:60;;;;-1:-1:-1;;;21127:60:0;;7693:2:1;21127:60:0;;;7675:21:1;7732:2;7712:18;;;7705:30;-1:-1:-1;;;7751:18:1;;;7744:54;7815:18;;21127:60:0;7665:174:1;21127:60:0;21224:1;21214:9;;:11;;;;:::i;:::-;21202:9;:23;21238:9;21258:893;;;;21287:38;:21;21318:6;21287:30;:38::i;:::-;21283:247;;-1:-1:-1;;;;;21364:17:0;;;;;;:9;:17;;;;;;21383:15;-1:-1:-1;21364:34:0;;:52;;-1:-1:-1;21400:16:0;;;;;;;21364:52;21356:82;;;;-1:-1:-1;;;21356:82:0;;14073:2:1;21356:82:0;;;14055:21:1;14112:2;14092:18;;;14085:30;-1:-1:-1;;;14131:18:1;;;14124:48;14189:18;;21356:82:0;14045:168:1;21356:82:0;21502:12;;21486:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;21468:17:0;;;;;;:9;:17;;;;;:46;21283:247;21574:9;;21566:6;:17;;21558:44;;;;-1:-1:-1;;;21558:44:0;;9840:2:1;21558:44:0;;;9822:21:1;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9898:18:1;;;9891:45;9953:18;;21558:44:0;9812:165:1;21558:44:0;-1:-1:-1;21621:8:0;;;;;;;21258:893;;;21652:5;21649:502;;;21713:12;;21688:23;21705:6;21688:16;:23;:::i;:::-;:37;;21680:65;;;;-1:-1:-1;;;21680:65:0;;;;;;;:::i;:::-;21776:8;;21768:6;:16;;21760:45;;;;-1:-1:-1;;;21760:45:0;;;;;;;:::i;:::-;-1:-1:-1;21824:7:0;;;;21649:502;;;21906:12;;21881:23;21898:6;21881:16;:23;:::i;:::-;:37;;21873:65;;;;-1:-1:-1;;;21873:65:0;;;;;;;:::i;:::-;21971:38;:21;22002:6;21971:30;:38::i;:::-;21967:139;;-1:-1:-1;;;;;22036:17:0;;;;;;:9;:17;;;;;;22055:15;-1:-1:-1;22036:34:0;;:52;;-1:-1:-1;22072:16:0;;;;;;;22036:52;22028:78;;;;-1:-1:-1;;;22028:78:0;;12688:2:1;22028:78:0;;;12670:21:1;12727:2;12707:18;;;12700:30;-1:-1:-1;;;12746:18:1;;;12739:44;12800:18;;22028:78:0;12660:164:1;22028:78:0;-1:-1:-1;22125:12:0;;;;;;;21649:502;22182:19;;-1:-1:-1;;;;;22174:27:0;;;-1:-1:-1;;;22182:19:0;;;;22174:27;;;;22173:50;;-1:-1:-1;22206:16:0;;;;22205:17;22173:50;:82;;;;-1:-1:-1;22227:27:0;;;;22226:28;22173:82;22170:126;;;22270:26;22289:6;22270:18;:26::i;:::-;22387:7;;22310:21;;22332:63;;22346:6;;22354:3;;22387:7;-1:-1:-1;;;22387:7:0;;;;;22359:27;;22373:13;;;;;;22359;;;;:27;:::i;:::-;:35;;;;:::i;:::-;22332:13;:63::i;:::-;22310:85;-1:-1:-1;22409:19:0;22429:22;22310:85;22429:6;:22;:::i;:::-;22409:42;;22467:27;22480:6;22487;22467:12;:27::i;:::-;22528:4;22510:24;;;;:9;:24;;;;;:41;;22538:13;;22510:24;:41;;22538:13;;22510:41;:::i;:::-;;;;-1:-1:-1;22567:33:0;;-1:-1:-1;22577:9:0;22588:11;22567:9;:33::i;:::-;22634:9;-1:-1:-1;;;;;22618:38:0;22627:6;-1:-1:-1;;;;;22618:38:0;;22644:11;22618:38;;;;6500:25:1;;6488:2;6473:18;;6455:76;22618:38:0;;;;;;;;20901:1769;;;;;;;;;;:::o;12447:659::-;12513:4;12554:19;;;:12;;;:19;;;;;;12590:15;;12586:513;;12639:21;12663:14;12676:1;12663:10;:14;:::i;:::-;12712:18;;12639:38;;-1:-1:-1;12692:17:0;;12712:22;;12733:1;;12712:22;:::i;:::-;12692:42;;12760:17;12780:3;:11;;12792:9;12780:22;;;;;;-1:-1:-1;;;12780:22:0;;;;;;;;;;;;;;;;;12760:42;;12855:9;12826:3;:11;;12838:13;12826:26;;;;;;-1:-1:-1;;;12826:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;12886:23;;;:12;;;:23;;;;;;:36;;;12947:17;;12886:3;;12947:17;;;-1:-1:-1;;;12947:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;12995:3;:12;;:19;13008:5;12995:19;;;;;;;;;;;12988:26;;;13038:4;13031:11;;;;;;;;12586:513;13082:5;13075:12;;;;;25579:455;25672:14;;25640:56;;25657:4;;-1:-1:-1;;;;;25672:14:0;25689:6;25640:8;:56::i;:::-;25731:16;;;25745:1;25731:16;;;;;;;;25707:21;;25731:16;;;;;;;;;;-1:-1:-1;25731:16:0;25707:40;;25776:4;25758;25763:1;25758:7;;;;;;-1:-1:-1;;;25758:7:0;;;;;;;;;-1:-1:-1;;;;;25758:23:0;;;:7;;;;;;;;;;:23;;;;25802:14;;:21;;;-1:-1:-1;;;25802:21:0;;;;:14;;;;;:19;;:21;;;;;25758:7;;25802:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25792:4;25797:1;25792:7;;;;;;-1:-1:-1;;;25792:7:0;;;;;;;;;-1:-1:-1;;;;;25792:31:0;;;:7;;;;;;;;;:31;25836:14;;:190;;-1:-1:-1;;;25836:190:0;;:14;;;:65;;:190;;25916:6;;25836:14;;25953:4;;25980;;26000:15;;25836:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26046:397;26140:9;26128:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;26192:14:0;;26160:61;;26177:4;;-1:-1:-1;;;;;26192:14:0;26209:11;26160:8;:61::i;:::-;26232:14;;:203;;-1:-1:-1;;;26232:203:0;;26303:4;26232:203;;;5651:34:1;;;5701:18;;;5694:34;;;26232:14:0;5744:18:1;;;5737:34;;;5787:18;;;5780:34;5830:19;;;5823:44;26409:15:0;5883:19:1;;;5876:35;-1:-1:-1;;;;;26232:14:0;;;;:30;;26270:9;;5585:19:1;;26232:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26046:397;;:::o;23844:265::-;23948:14;;23910:22;;23964:3;;23936:26;;23948:14;;23936:9;:26;:::i;:::-;23935:32;;;;:::i;:::-;24010:8;;23910:57;;-1:-1:-1;23978:16:0;;24020:3;;23998:20;;24010:8;;;;;23998:9;:20;:::i;:::-;23997:26;;;;:::i;:::-;23978:45;;24054:14;24036:16;;:32;;;;;;;:::i;:::-;;;;;;;;24091:8;24079:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23844:265:0:o;23392:158::-;-1:-1:-1;;;;;23484:15:0;;23466:17;23484:15;;;:9;:15;;;;;;:22;;23500:6;;23484:22;:::i;:::-;-1:-1:-1;;;;;23517:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;23392:158:0:o;23219:157::-;-1:-1:-1;;;;;23308:15:0;;23290:17;23308:15;;;:9;:15;;;;;;:22;;23324:6;;23308:22;:::i;23045:156::-;23135:7;23188:5;23174:10;23163:21;;23170:3;23163:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;23162:31;;;;:::i;:::-;23155:38;23045:156;-1:-1:-1;;;;23045:156:0:o;14::1:-;80:20;;140:4;129:16;;119:27;;109:2;;160:1;157;150:12;109:2;61:109;;;:::o;175:257::-;234:6;287:2;275:9;266:7;262:23;258:32;255:2;;;308:6;300;293:22;255:2;352:9;339:23;371:31;396:5;371:31;:::i;437:261::-;507:6;560:2;548:9;539:7;535:23;531:32;528:2;;;581:6;573;566:22;528:2;618:9;612:16;637:31;662:5;637:31;:::i;703:398::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:2;;;853:6;845;838:22;800:2;897:9;884:23;916:31;941:5;916:31;:::i;:::-;966:5;-1:-1:-1;1023:2:1;1008:18;;995:32;1036:33;995:32;1036:33;:::i;:::-;1088:7;1078:17;;;790:311;;;;;:::o;1106:466::-;1183:6;1191;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:2;;;1273:6;1265;1258:22;1220:2;1317:9;1304:23;1336:31;1361:5;1336:31;:::i;:::-;1386:5;-1:-1:-1;1443:2:1;1428:18;;1415:32;1456:33;1415:32;1456:33;:::i;:::-;1210:362;;1508:7;;-1:-1:-1;;;1562:2:1;1547:18;;;;1534:32;;1210:362::o;1577:392::-;1642:6;1650;1703:2;1691:9;1682:7;1678:23;1674:32;1671:2;;;1724:6;1716;1709:22;1671:2;1768:9;1755:23;1787:31;1812:5;1787:31;:::i;:::-;1837:5;-1:-1:-1;1894:2:1;1879:18;;1866:32;1907:30;1866:32;1907:30;:::i;1974:325::-;2042:6;2050;2103:2;2091:9;2082:7;2078:23;2074:32;2071:2;;;2124:6;2116;2109:22;2071:2;2168:9;2155:23;2187:31;2212:5;2187:31;:::i;:::-;2237:5;2289:2;2274:18;;;;2261:32;;-1:-1:-1;;;2061:238:1:o;2304:251::-;2360:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2434:6;2426;2419:22;2381:2;2478:9;2465:23;2497:28;2519:5;2497:28;:::i;2560:255::-;2627:6;2680:2;2668:9;2659:7;2655:23;2651:32;2648:2;;;2701:6;2693;2686:22;2648:2;2738:9;2732:16;2757:28;2779:5;2757:28;:::i;2820:190::-;2879:6;2932:2;2920:9;2911:7;2907:23;2903:32;2900:2;;;2953:6;2945;2938:22;2900:2;-1:-1:-1;2981:23:1;;2890:120;-1:-1:-1;2890:120:1:o;3015:194::-;3085:6;3138:2;3126:9;3117:7;3113:23;3109:32;3106:2;;;3159:6;3151;3144:22;3106:2;-1:-1:-1;3187:16:1;;3096:113;-1:-1:-1;3096:113:1:o;3214:326::-;3291:6;3299;3307;3360:2;3348:9;3339:7;3335:23;3331:32;3328:2;;;3381:6;3373;3366:22;3328:2;-1:-1:-1;;3409:23:1;;;3479:2;3464:18;;3451:32;;-1:-1:-1;3530:2:1;3515:18;;;3502:32;;3318:222;-1:-1:-1;3318:222:1:o;3545:316::-;3633:6;3641;3649;3702:2;3690:9;3681:7;3677:23;3673:32;3670:2;;;3723:6;3715;3708:22;3670:2;3757:9;3751:16;3741:26;;3807:2;3796:9;3792:18;3786:25;3776:35;;3851:2;3840:9;3836:18;3830:25;3820:35;;3660:201;;;;;:::o;3866:192::-;3923:6;3976:2;3964:9;3955:7;3951:23;3947:32;3944:2;;;3997:6;3989;3982:22;3944:2;4025:27;4042:9;4025:27;:::i;4063:545::-;4155:6;4163;4171;4179;4187;4195;4248:3;4236:9;4227:7;4223:23;4219:33;4216:2;;;4270:6;4262;4255:22;4216:2;4298:27;4315:9;4298:27;:::i;:::-;4288:37;;4344:36;4376:2;4365:9;4361:18;4344:36;:::i;:::-;4334:46;;4399:36;4431:2;4420:9;4416:18;4399:36;:::i;:::-;4389:46;;4454:36;4486:2;4475:9;4471:18;4454:36;:::i;:::-;4444:46;;4509:37;4541:3;4530:9;4526:19;4509:37;:::i;:::-;4499:47;;4565:37;4597:3;4586:9;4582:19;4565:37;:::i;:::-;4555:47;;4206:402;;;;;;;;:::o;6536:603::-;6648:4;6677:2;6706;6695:9;6688:21;6738:6;6732:13;6781:6;6776:2;6765:9;6761:18;6754:34;6806:4;6819:140;6833:6;6830:1;6827:13;6819:140;;;6928:14;;;6924:23;;6918:30;6894:17;;;6913:2;6890:26;6883:66;6848:10;;6819:140;;;6977:6;6974:1;6971:13;6968:2;;;7047:4;7042:2;7033:6;7022:9;7018:22;7014:31;7007:45;6968:2;-1:-1:-1;7123:2:1;7102:15;-1:-1:-1;;7098:29:1;7083:45;;;;7130:2;7079:54;;6657:482;-1:-1:-1;;;6657:482:1:o;9291:342::-;9493:2;9475:21;;;9532:2;9512:18;;;9505:30;-1:-1:-1;;;9566:2:1;9551:18;;9544:48;9624:2;9609:18;;9465:168::o;11441:342::-;11643:2;11625:21;;;11682:2;11662:18;;;11655:30;-1:-1:-1;;;11716:2:1;11701:18;;11694:48;11774:2;11759:18;;11615:168::o;12141:340::-;12343:2;12325:21;;;12382:2;12362:18;;;12355:30;-1:-1:-1;;;12416:2:1;12401:18;;12394:46;12472:2;12457:18;;12315:166::o;12829:352::-;13031:2;13013:21;;;13070:2;13050:18;;;13043:30;13109;13104:2;13089:18;;13082:58;13172:2;13157:18;;13003:178::o;14593:983::-;14855:4;14903:3;14892:9;14888:19;14934:6;14923:9;14916:25;14960:2;14998:6;14993:2;14982:9;14978:18;14971:34;15041:3;15036:2;15025:9;15021:18;15014:31;15065:6;15100;15094:13;15131:6;15123;15116:22;15169:3;15158:9;15154:19;15147:26;;15208:2;15200:6;15196:15;15182:29;;15229:4;15242:195;15256:6;15253:1;15250:13;15242:195;;;15321:13;;-1:-1:-1;;;;;15317:39:1;15305:52;;15412:15;;;;15377:12;;;;15353:1;15271:9;15242:195;;;-1:-1:-1;;;;;;;15493:32:1;;;;15488:2;15473:18;;15466:60;-1:-1:-1;;;15557:3:1;15542:19;15535:35;15454:3;14864:712;-1:-1:-1;;;14864:712:1:o;16563:128::-;16603:3;16634:1;16630:6;16627:1;16624:13;16621:2;;;16640:18;;:::i;:::-;-1:-1:-1;16676:9:1;;16611:80::o;16696:204::-;16734:3;16770:4;16767:1;16763:12;16802:4;16799:1;16795:12;16837:3;16831:4;16827:14;16822:3;16819:23;16816:2;;;16845:18;;:::i;:::-;16881:13;;16742:158;-1:-1:-1;;;16742:158:1:o;16905:217::-;16945:1;16971;16961:2;;-1:-1:-1;;;16996:31:1;;17050:4;17047:1;17040:15;17078:4;17003:1;17068:15;16961:2;-1:-1:-1;17107:9:1;;16951:171::o;17127:422::-;17216:1;17259:5;17216:1;17273:270;17294:7;17284:8;17281:21;17273:270;;;17353:4;17349:1;17345:6;17341:17;17335:4;17332:27;17329:2;;;17362:18;;:::i;:::-;17412:7;17402:8;17398:22;17395:2;;;17432:16;;;;17395:2;17511:22;;;;17471:15;;;;17273:270;;;17277:3;17191:358;;;;;:::o;17554:140::-;17612:5;17641:47;17682:4;17672:8;17668:19;17662:4;17748:5;17778:8;17768:2;;-1:-1:-1;17819:1:1;17833:5;;17768:2;17867:4;17857:2;;-1:-1:-1;17904:1:1;17918:5;;17857:2;17949:4;17967:1;17962:59;;;;18035:1;18030:130;;;;17942:218;;17962:59;17992:1;17983:10;;18006:5;;;18030:130;18067:3;18057:8;18054:17;18051:2;;;18074:18;;:::i;:::-;-1:-1:-1;;18130:1:1;18116:16;;18145:5;;17942:218;;18244:2;18234:8;18231:16;18225:3;18219:4;18216:13;18212:36;18206:2;18196:8;18193:16;18188:2;18182:4;18179:12;18175:35;18172:77;18169:2;;;-1:-1:-1;18281:19:1;;;18313:5;;18169:2;18360:34;18385:8;18379:4;18360:34;:::i;:::-;18430:6;18426:1;18422:6;18418:19;18409:7;18406:32;18403:2;;;18441:18;;:::i;:::-;18479:20;;17758:747;-1:-1:-1;;;17758:747:1:o;18510:168::-;18550:7;18616:1;18612;18608:6;18604:14;18601:1;18598:21;18593:1;18586:9;18579:17;18575:45;18572:2;;;18623:18;;:::i;:::-;-1:-1:-1;18663:9:1;;18562:116::o;18683:125::-;18723:4;18751:1;18748;18745:8;18742:2;;;18756:18;;:::i;:::-;-1:-1:-1;18793:9:1;;18732:76::o;18813:127::-;18874:10;18869:3;18865:20;18862:1;18855:31;18905:4;18902:1;18895:15;18929:4;18926:1;18919:15;18945:131;-1:-1:-1;;;;;19020:31:1;;19010:42;;19000:2;;19066:1;19063;19056:12;19081:118;19167:5;19160:13;19153:21;19146:5;19143:32;19133:2;;19189:1;19186;19179:12
Swarm Source
ipfs://8614a1eafbd443b770ce4537e0284fd77022710779fa6014f6a8a77ea10e174c
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.