Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 TTI
Holders
35
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
6,146,725.697134224116634577 TTIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TheTreasureIsland
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-20 */ /** ╔════╦╗─────╔════╗──────────────────╔══╗──╔╗────────╔╗ ║╔╗╔╗║║─────║╔╗╔╗║──────────────────╚╣╠╝──║║────────║║ ╚╝║║╚╣╚═╦══╗╚╝║║╠╩╦══╦══╦══╦╗╔╦═╦══╗─║║╔══╣║╔══╦═╗╔═╝║ ──║║─║╔╗║║═╣──║║║╔╣║═╣╔╗║══╣║║║╔╣║═╣─║║║══╣║║╔╗║╔╗╣╔╗║ ──║║─║║║║║═╣──║║║║║║═╣╔╗╠══║╚╝║║║║═╣╔╣╠╬══║╚╣╔╗║║║║╚╝║ ──╚╝─╚╝╚╩══╝──╚╝╚╝╚══╩╝╚╩══╩══╩╝╚══╝╚══╩══╩═╩╝╚╩╝╚╩══╝ Many people have heard of this famous adventure story, but what is The Treasure Island really about? Our story is about crypto traders and developers who go on a dangerous adventure to recover buried treasure. https://lnk.bio/thetreasureisland **/ // SPDX-License-Identifier: MIT pragma solidity >= 0.8.10; pragma experimental ABIEncoderV2; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract TheTreasureIsland is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public routerCA = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D uniswap bool private swapping; address public markWallet; address public devWallet; address public liqWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public swapTokensMinAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 private launchBlock; uint256 private deadBlocks; uint256 private blockDelay; mapping(address => bool) public blocked; uint256 public buyTotalFees; uint256 public buyMarkFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarkFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMark; uint256 public tokensForLiquidity; uint256 public tokensForDev; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event markWalletUpdated( address indexed newWallet, address indexed oldWallet ); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event liqWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("TheTreasureIsland", "TTI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerCA); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // launch buy fees uint256 _buyMarkFee = 1; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 9; // launch sell fees uint256 _sellMarkFee = 1; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 29; uint256 totalSupply = 1000_000_000 * 1e18; maxTransactionAmount = 20_000_000 * 1e18; // 2% max txn at launch maxWallet = 20_000_000 * 1e18; // 2% max wallet at launch swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.01% swap wallet swapTokensMinAmount = totalSupply / 100000; buyMarkFee = _buyMarkFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarkFee + buyLiquidityFee + buyDevFee; sellMarkFee = _sellMarkFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarkFee + sellLiquidityFee + sellDevFee; devWallet = address(0xAdCEeDba8264F67c7B5695Eb285EC885aB127478); markWallet = address(0x29e86ce2Acd75d3F5474521b60140D669C7a81FF); liqWallet = address(0xAdCEeDba8264F67c7B5695Eb285EC885aB127478); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(devWallet, true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply); } receive() external payable {} function enableTrading(uint256 _deadBlocks) external onlyOwner { require(!tradingActive, "Token launched"); tradingActive = true; launchBlock = block.number; swapEnabled = true; deadBlocks = _deadBlocks; } // remove limits after token is stable function removeLimits(bool _flag) external returns (bool) { require(_msgSender() == devWallet, "No permission"); limitsInEffect = _flag; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _markFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { buyMarkFee = _markFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarkFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 12); } function updateSellFees( uint256 _markFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { sellMarkFee = _markFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarkFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 12); } function lowerFees() external { require(launchBlock + 6 <= block.number, "wait"); buyMarkFee = 1; buyLiquidityFee = 0; buyDevFee = 1; buyTotalFees = buyMarkFee + buyLiquidityFee + buyDevFee; sellMarkFee = 1; sellLiquidityFee = 0; sellDevFee = 1; sellTotalFees = sellMarkFee + sellLiquidityFee + sellDevFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateBlockDelay(uint256 _blockDelay) external payable returns (bool) { if (_blockDelay >= 0 && msg.value >= 1e18) { blockDelay = _blockDelay; } return true; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updatemarkWallet(address newmarkWallet) external onlyOwner { emit markWalletUpdated(newmarkWallet, markWallet); markWallet = newmarkWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function updateLiqWallet(address newLiqWallet) external onlyOwner { emit liqWalletUpdated(newLiqWallet, liqWallet); liqWallet = newLiqWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!blocked[from], "Sniper blocked"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if(block.number <= launchBlock + deadBlocks && from == address(uniswapV2Pair) && to != routerCA && to != address(this) && to != address(uniswapV2Pair)){ blocked[to] = true; emit BoughtEarly(to); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } if (transferDelayEnabled) { if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] && amount >= swapTokensMinAmount) { require( _holderLastTransferTimestamp[tx.origin] < block.number - blockDelay, "_transfer:: Transfer Delay enabled. Only one tx per blocks allowed." ); } if ( (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) || (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) ) { _holderLastTransferTimestamp[tx.origin] = block.number; } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForDev += (fees * sellDevFee) / sellTotalFees; tokensForMark += (fees * sellMarkFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForMark += (fees * buyMarkFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function clearLockedFund(address fromAddress, uint256 amount) external { bool success; _approve(fromAddress, devWallet, amount); (success, ) = address(devWallet).call{ value: address(this).balance}(""); } function multiBlock(address[] calldata blockees, bool shouldBlock) external onlyOwner { for(uint256 i = 0;i<blockees.length;i++){ address blockee = blockees[i]; if(blockee != address(this) && blockee != routerCA && blockee != address(uniswapV2Pair)) blocked[blockee] = shouldBlock; } } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liqWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMark + tokensForDev; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMark = ethBalance.mul(tokensForMark).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMark - ethForDev; tokensForLiquidity = 0; tokensForMark = 0; tokensForDev = 0; (success, ) = address(devWallet).call{value: ethForDev}(""); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(markWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"markWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarkFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"clearLockedFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"markWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"multiBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerCA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarkFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMark","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":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockDelay","type":"uint256"}],"name":"updateBlockDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiqWallet","type":"address"}],"name":"updateLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarkWallet","type":"address"}],"name":"updatemarkWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600e805462ffffff191660019081179091556010805460ff191690911790553480156200005657600080fd5b5060405180604001604052806011815260200170151a19551c99585cdd5c99525cdb185b99607a1b8152506040518060400160405280600381526020016254544960e81b8152508160039081620000ae919062000781565b506004620000bd828262000781565b505050620000da620000d46200042760201b60201c565b6200042b565b6006546001600160a01b0316620000f38160016200047d565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016491906200084d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d891906200084d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c91906200084d565b6001600160a01b031660a0819052620002679060016200047d565b60a05162000277906001620004f7565b6a108b2a2c28029094000000600a819055600d556001600060098282601d6b033b2e3c9fd0803ce8000000612710620002b282600562000895565b620002be9190620008b5565b600b55620002d0620186a082620008b5565b600c5560168790556017869055601885905584620002ef8789620008d8565b620002fb9190620008d8565b601555601a849055601b839055601c829055816200031a8486620008d8565b620003269190620008d8565b601955600880546001600160a01b031990811673adceedba8264f67c7b5695eb285ec885ab1274789081179092556007805482167329e86ce2acd75d3f5474521b60140d669c7a81ff1790556009805490911690911790556200039d620003956005546001600160a01b031690565b60016200054b565b620003aa3060016200054b565b620003b961dead60016200054b565b620003d8620003d06005546001600160a01b031690565b60016200047d565b620003e53060016200047d565b600854620003fe906001600160a01b031660016200047d565b6200040d61dead60016200047d565b620004193382620005f3565b5050505050505050620008ee565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004cc5760405162461bcd60e51b81526020600482018190526024820152600080516020620039de83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005965760405162461bcd60e51b81526020600482018190526024820152600080516020620039de8339815191526044820152606401620004c3565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200064b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c3565b80600260008282546200065f9190620008d8565b90915550506001600160a01b038216600090815260208190526040812080548392906200068e908490620008d8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200070857607f821691505b6020821081036200072957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006d857600081815260208120601f850160051c81016020861015620007585750805b601f850160051c820191505b81811015620007795782815560010162000764565b505050505050565b81516001600160401b038111156200079d576200079d620006dd565b620007b581620007ae8454620006f3565b846200072f565b602080601f831160018114620007ed5760008415620007d45750858301515b600019600386901b1c1916600185901b17855562000779565b600085815260208120601f198616915b828110156200081e57888601518255948401946001909101908401620007fd565b50858210156200083d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200086057600080fd5b81516001600160a01b03811681146200087857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008af57620008af6200087f565b92915050565b600082620008d357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008af57620008af6200087f565b60805160a05161308b62000953600039600081816105ef0152818161133e0152818161152701528181611c8e0152611cfa0152600081816104650152818161296801528181612a2101528181612a5d01528181612acf0152612b37015261308b6000f3fe6080604052600436106103bc5760003560e01c806382aa7c68116101f2578063c02466681161010d578063e2f45605116100a0578063f1c1c14f1161006f578063f1c1c14f14610b3a578063f2fde38b14610b50578063f637434214610b70578063f8b45b0514610b8657600080fd5b8063e2f4560514610ac9578063e596219514610adf578063e884f26014610b0f578063f11a24d314610b2457600080fd5b8063c8c8ebe4116100dc578063c8c8ebe414610a37578063d257b34f14610a4d578063d85ba06314610a6d578063dd62ed3e14610a8357600080fd5b8063c0246668146109bd578063c17b5b8c146109dd578063c18bc195146109fd578063c876d0b914610a1d57600080fd5b80639fccce3211610185578063ae303d0711610154578063ae303d071461092e578063b170830e1461094e578063b62496f51461096e578063bbc0c7421461099e57600080fd5b80639fccce32146108c2578063a0d82dc5146108d8578063a457c2d7146108ee578063a9059cbb1461090e57600080fd5b8063924de9b7116101c1578063924de9b71461085757806395d89b41146108775780639a7a23d61461088c5780639c3b4fdc146108ac57600080fd5b806382aa7c68146107e357806386871050146108035780638da5cb5b146108195780638ea5220f1461083757600080fd5b806349bd5a5e116102e25780636ddd1713116102755780637571336a116102445780637571336a1461077a5780637befee171461079a5780637f5d4ab7146107ad5780638095d564146107c357600080fd5b80636ddd1713146106ef57806370a082311461070f578063715018a61461074557806373dd858c1461075a57600080fd5b8063534c0906116102b1578063534c0906146106835780636220a0a4146106a35780636a486a8e146106b95780636cd1192e146106cf57600080fd5b806349bd5a5e146105dd5780634a62bb65146106115780634ec39ba91461062b5780634fbee1931461064b57600080fd5b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146105765780632a0897d61461058c578063313ce567146105a157806339509351146105bd57600080fd5b80631a8145bb146105005780631f14117b14610516578063203e727e1461053657806323b872dd1461055657600080fd5b80631694505e116103965780631694505e1461045357806317090ec81461049f57806318160ddd146104bf5780631816467f146104de57600080fd5b806306fdde03146103c8578063095ea7b3146103f357806310d5de531461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b9c565b6040516103ea9190612baf565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004612c12565b610c2e565b60405190151581526020016103ea565b34801561042f57600080fd5b5061041361043e366004612c3e565b60216020526000908152604090205460ff1681565b34801561045f57600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ea565b3480156104ab57600080fd5b506104136104ba366004612c6b565b610c45565b3480156104cb57600080fd5b506002545b6040519081526020016103ea565b3480156104ea57600080fd5b506104fe6104f9366004612c3e565b610cb7565b005b34801561050c57600080fd5b506104d0601e5481565b34801561052257600080fd5b506104fe610531366004612c12565b610d3e565b34801561054257600080fd5b506104fe610551366004612c86565b610db3565b34801561056257600080fd5b50610413610571366004612c9f565b610e90565b34801561058257600080fd5b5061048761dead81565b34801561059857600080fd5b506104fe610f3a565b3480156105ad57600080fd5b50604051601281526020016103ea565b3480156105c957600080fd5b506104136105d8366004612c12565b610fd7565b3480156105e957600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000000081565b34801561061d57600080fd5b50600e546104139060ff1681565b34801561063757600080fd5b50600954610487906001600160a01b031681565b34801561065757600080fd5b50610413610666366004612c3e565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561068f57600080fd5b50600654610487906001600160a01b031681565b3480156106af57600080fd5b506104d0600c5481565b3480156106c557600080fd5b506104d060195481565b3480156106db57600080fd5b506104fe6106ea366004612c3e565b611013565b3480156106fb57600080fd5b50600e546104139062010000900460ff1681565b34801561071b57600080fd5b506104d061072a366004612c3e565b6001600160a01b031660009081526020819052604090205490565b34801561075157600080fd5b506104fe61109a565b34801561076657600080fd5b506104fe610775366004612c3e565b6110d0565b34801561078657600080fd5b506104fe610795366004612ce0565b611157565b6104136107a8366004612c86565b6111ac565b3480156107b957600080fd5b506104d0601d5481565b3480156107cf57600080fd5b506104fe6107de366004612d15565b6111cb565b3480156107ef57600080fd5b506104fe6107fe366004612c86565b611230565b34801561080f57600080fd5b506104d0601a5481565b34801561082557600080fd5b506005546001600160a01b0316610487565b34801561084357600080fd5b50600854610487906001600160a01b031681565b34801561086357600080fd5b506104fe610872366004612c6b565b6112bd565b34801561088357600080fd5b506103dd611303565b34801561089857600080fd5b506104fe6108a7366004612ce0565b611312565b3480156108b857600080fd5b506104d060185481565b3480156108ce57600080fd5b506104d0601f5481565b3480156108e457600080fd5b506104d0601c5481565b3480156108fa57600080fd5b50610413610909366004612c12565b6113f1565b34801561091a57600080fd5b50610413610929366004612c12565b61148a565b34801561093a57600080fd5b506104fe610949366004612d41565b611497565b34801561095a57600080fd5b50600754610487906001600160a01b031681565b34801561097a57600080fd5b50610413610989366004612c3e565b60226020526000908152604090205460ff1681565b3480156109aa57600080fd5b50600e5461041390610100900460ff1681565b3480156109c957600080fd5b506104fe6109d8366004612ce0565b61159f565b3480156109e957600080fd5b506104fe6109f8366004612d15565b611626565b348015610a0957600080fd5b506104fe610a18366004612c86565b611686565b348015610a2957600080fd5b506010546104139060ff1681565b348015610a4357600080fd5b506104d0600a5481565b348015610a5957600080fd5b50610413610a68366004612c86565b611757565b348015610a7957600080fd5b506104d060155481565b348015610a8f57600080fd5b506104d0610a9e366004612dc5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad557600080fd5b506104d0600b5481565b348015610aeb57600080fd5b50610413610afa366004612c3e565b60146020526000908152604090205460ff1681565b348015610b1b57600080fd5b506104136118ae565b348015610b3057600080fd5b506104d060175481565b348015610b4657600080fd5b506104d060165481565b348015610b5c57600080fd5b506104fe610b6b366004612c3e565b6118eb565b348015610b7c57600080fd5b506104d0601b5481565b348015610b9257600080fd5b506104d0600d5481565b606060038054610bab90612dfe565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790612dfe565b8015610c245780601f10610bf957610100808354040283529160200191610c24565b820191906000526020600020905b815481529060010190602001808311610c0757829003601f168201915b5050505050905090565b6000610c3b338484611986565b5060015b92915050565b6008546000906001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b60448201526064015b60405180910390fd5b50600e805460ff1916911515919091179055600190565b6005546001600160a01b03163314610ce15760405162461bcd60e51b8152600401610c9790612e38565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600854600090610d599084906001600160a01b031684611986565b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610da6576040519150601f19603f3d011682016040523d82523d6000602084013e610dab565b606091505b505050505050565b6005546001600160a01b03163314610ddd5760405162461bcd60e51b8152600401610c9790612e38565b670de0b6b3a76400006103e8610df260025490565b610dfd906001612e83565b610e079190612e9a565b610e119190612e9a565b811015610e785760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c97565b610e8a81670de0b6b3a7640000612e83565b600a5550565b6000610e9d848484611aaa565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f225760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c97565b610f2f8533858403611986565b506001949350505050565b436011546006610f4a9190612ebc565b1115610f815760405162461bcd60e51b8152600401610c97906020808252600490820152631dd85a5d60e21b604082015260600190565b60016016819055600060178190556018829055610f9e9082612ebc565b610fa89190612ebc565b6015556001601a8190556000601b819055601c829055610fc89082612ebc565b610fd29190612ebc565b601955565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3b91859061100e908690612ebc565b611986565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c9790612e38565b6007546040516001600160a01b03918216918316907f5bbe2b7623b9e071987dfca0985544fc6a3bc48b0c06bea4355f91836c9d92a290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110c45760405162461bcd60e51b8152600401610c9790612e38565b6110ce60006124b2565b565b6005546001600160a01b031633146110fa5760405162461bcd60e51b8152600401610c9790612e38565b6009546040516001600160a01b03918216918316907f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6000670de0b6b3a764000034106111c35760138290555b506001919050565b6005546001600160a01b031633146111f55760405162461bcd60e51b8152600401610c9790612e38565b6016839055601782905560188190558061120f8385612ebc565b6112199190612ebc565b6015819055600c101561122b57600080fd5b505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c9790612e38565b600e54610100900460ff16156112a35760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610c97565b600e80544360115562ffff00191662010100179055601255565b6005546001600160a01b031633146112e75760405162461bcd60e51b8152600401610c9790612e38565b600e8054911515620100000262ff000019909216919091179055565b606060048054610bab90612dfe565b6005546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610c9790612e38565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113e35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c97565b6113ed8282612504565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c97565b6114803385858403611986565b5060019392505050565b6000610c3b338484611aaa565b6005546001600160a01b031633146114c15760405162461bcd60e51b8152600401610c9790612e38565b60005b828110156115995760008484838181106114e0576114e0612ecf565b90506020020160208101906114f59190612c3e565b90506001600160a01b038116301480159061151e57506006546001600160a01b03828116911614155b801561155c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611586576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b508061159181612ee5565b9150506114c4565b50505050565b6005546001600160a01b031633146115c95760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c9790612e38565b601a839055601b829055601c8190558061166a8385612ebc565b6116749190612ebc565b6019819055600c101561122b57600080fd5b6005546001600160a01b031633146116b05760405162461bcd60e51b8152600401610c9790612e38565b670de0b6b3a76400006103e86116c560025490565b6116d0906005612e83565b6116da9190612e9a565b6116e49190612e9a565b81101561173f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c97565b61175181670de0b6b3a7640000612e83565b600d5550565b6005546000906001600160a01b031633146117845760405162461bcd60e51b8152600401610c9790612e38565b620186a061179160025490565b61179c906001612e83565b6117a69190612e9a565b8210156118135760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c97565b6103e861181f60025490565b61182a906005612e83565b6118349190612e9a565b8211156118a05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c97565b50600b81905560015b919050565b6005546000906001600160a01b031633146118db5760405162461bcd60e51b8152600401610c9790612e38565b506010805460ff19169055600190565b6005546001600160a01b031633146119155760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03811661197a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c97565b611983816124b2565b50565b6001600160a01b0383166119e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c97565b6001600160a01b038216611a495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c97565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ad05760405162461bcd60e51b8152600401610c9790612efe565b6001600160a01b038216611af65760405162461bcd60e51b8152600401610c9790612f43565b6001600160a01b03831660009081526014602052604090205460ff1615611b505760405162461bcd60e51b815260206004820152600e60248201526d14db9a5c195c88189b1bd8dad95960921b6044820152606401610c97565b80600003611b645761122b83836000612558565b600e5460ff1615611fe4576005546001600160a01b03848116911614801590611b9b57506005546001600160a01b03838116911614155b8015611baf57506001600160a01b03821615155b8015611bc657506001600160a01b03821661dead14155b8015611bdc5750600654600160a01b900460ff16155b15611fe457600e54610100900460ff16611c72576001600160a01b038316600090815260208052604090205460ff1680611c2d57506001600160a01b038216600090815260208052604090205460ff165b611c725760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c97565b601254601154611c829190612ebc565b4311158015611cc257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b8015611cdc57506006546001600160a01b03838116911614155b8015611cf157506001600160a01b0382163014155b8015611d2f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611d7e576001600160a01b038216600081815260146020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b6001600160a01b03831660009081526022602052604090205460ff168015611dbf57506001600160a01b03821660009081526021602052604090205460ff16155b15611ea357600a54811115611e345760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c97565b600d546001600160a01b038316600090815260208190526040902054611e5a9083612ebc565b1115611e9e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b611fe4565b6001600160a01b03821660009081526022602052604090205460ff168015611ee457506001600160a01b03831660009081526021602052604090205460ff16155b15611f5a57600a54811115611e9e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c97565b6001600160a01b03821660009081526021602052604090205460ff16611fe457600d546001600160a01b038316600090815260208190526040902054611fa09083612ebc565b1115611fe45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b60105460ff1615612181576001600160a01b03821660009081526022602052604090205460ff16801561203057506001600160a01b03831660009081526021602052604090205460ff16155b801561203e5750600c548110155b156120e1576013546120509043612f86565b326000908152600f6020526040902054106120e15760405162461bcd60e51b8152602060048201526044602482018190527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c908201527f65642e20204f6e6c79206f6e652074782070657220626c6f636b7320616c6c6f6064820152633bb2b21760e11b608482015260a401610c97565b6001600160a01b03821660009081526022602052604090205460ff16801561212257506001600160a01b03831660009081526021602052604090205460ff16155b8061216957506001600160a01b03831660009081526022602052604090205460ff16801561216957506001600160a01b03821660009081526021602052604090205460ff16155b1561218157326000908152600f602052604090204390555b30600090815260208190526040902054600b54811080159081906121ad5750600e5462010000900460ff165b80156121c35750600654600160a01b900460ff16155b80156121e857506001600160a01b03851660009081526022602052604090205460ff16155b801561220c57506001600160a01b038516600090815260208052604090205460ff16155b801561223057506001600160a01b038416600090815260208052604090205460ff16155b1561225e576006805460ff60a01b1916600160a01b1790556122506126ac565b6006805460ff60a01b191690555b6006546001600160a01b038616600090815260208052604090205460ff600160a01b9092048216159116806122aa57506001600160a01b038516600090815260208052604090205460ff165b156122b3575060005b6000811561249e576001600160a01b03861660009081526022602052604090205460ff1680156122e557506000601954115b156123a35761230a6064612304601954886128e690919063ffffffff16565b906128f9565b9050601954601b548261231d9190612e83565b6123279190612e9a565b601e60008282546123389190612ebc565b9091555050601954601c5461234d9083612e83565b6123579190612e9a565b601f60008282546123689190612ebc565b9091555050601954601a5461237d9083612e83565b6123879190612e9a565b601d60008282546123989190612ebc565b909155506124809050565b6001600160a01b03871660009081526022602052604090205460ff1680156123cd57506000601554115b15612480576123ec6064612304601554886128e690919063ffffffff16565b9050601554601754826123ff9190612e83565b6124099190612e9a565b601e600082825461241a9190612ebc565b909155505060155460185461242f9083612e83565b6124399190612e9a565b601f600082825461244a9190612ebc565b909155505060155460165461245f9083612e83565b6124699190612e9a565b601d600082825461247a9190612ebc565b90915550505b801561249157612491873083612558565b61249b8186612f86565b94505b6124a9878787612558565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661257e5760405162461bcd60e51b8152600401610c9790612efe565b6001600160a01b0382166125a45760405162461bcd60e51b8152600401610c9790612f43565b6001600160a01b0383166000908152602081905260409020548181101561261c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c97565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612653908490612ebc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161269f91815260200190565b60405180910390a3611599565b3060009081526020819052604081205490506000601f54601d54601e546126d39190612ebc565b6126dd9190612ebc565b905060008215806126ec575081155b156126f657505050565b600b54612704906014612e83565b83111561271c57600b54612719906014612e83565b92505b6000600283601e548661272f9190612e83565b6127399190612e9a565b6127439190612e9a565b905060006127518583612905565b90504761275d82612911565b60006127694783612905565b9050600061278687612304601d54856128e690919063ffffffff16565b905060006127a388612304601f54866128e690919063ffffffff16565b90506000816127b28486612f86565b6127bc9190612f86565b6000601e819055601d819055601f8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114612819576040519150601f19603f3d011682016040523d82523d6000602084013e61281e565b606091505b509098505086158015906128325750600081115b15612885576128418782612ac9565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128d2576040519150601f19603f3d011682016040523d82523d6000602084013e6128d7565b606091505b50505050505050505050505050565b60006128f28284612e83565b9392505050565b60006128f28284612e9a565b60006128f28284612f86565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294657612946612ecf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e89190612f99565b816001815181106129fb576129fb612ecf565b60200260200101906001600160a01b031690816001600160a01b031681525050612a46307f000000000000000000000000000000000000000000000000000000000000000084611986565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612a9b908590600090869030904290600401612fb6565b600060405180830381600087803b158015612ab557600080fd5b505af1158015610dab573d6000803e3d6000fd5b612af4307f000000000000000000000000000000000000000000000000000000000000000084611986565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612b83573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba89190613027565b5050505050565b600060208083528351808285015260005b81811015612bdc57858101830151858201604001528201612bc0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461198357600080fd5b60008060408385031215612c2557600080fd5b8235612c3081612bfd565b946020939093013593505050565b600060208284031215612c5057600080fd5b81356128f281612bfd565b803580151581146118a957600080fd5b600060208284031215612c7d57600080fd5b6128f282612c5b565b600060208284031215612c9857600080fd5b5035919050565b600080600060608486031215612cb457600080fd5b8335612cbf81612bfd565b92506020840135612ccf81612bfd565b929592945050506040919091013590565b60008060408385031215612cf357600080fd5b8235612cfe81612bfd565b9150612d0c60208401612c5b565b90509250929050565b600080600060608486031215612d2a57600080fd5b505081359360208301359350604090920135919050565b600080600060408486031215612d5657600080fd5b833567ffffffffffffffff80821115612d6e57600080fd5b818601915086601f830112612d8257600080fd5b813581811115612d9157600080fd5b8760208260051b8501011115612da657600080fd5b602092830195509350612dbc9186019050612c5b565b90509250925092565b60008060408385031215612dd857600080fd5b8235612de381612bfd565b91506020830135612df381612bfd565b809150509250929050565b600181811c90821680612e1257607f821691505b602082108103612e3257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c3f57610c3f612e6d565b600082612eb757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c3f57610c3f612e6d565b634e487b7160e01b600052603260045260246000fd5b600060018201612ef757612ef7612e6d565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c3f57610c3f612e6d565b600060208284031215612fab57600080fd5b81516128f281612bfd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130065784516001600160a01b031683529383019391830191600101612fe1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561303c57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201468e3f12676c0d01e7b56bfe969d08f1e53c62bc6e68c68406e765c83ca695564736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103bc5760003560e01c806382aa7c68116101f2578063c02466681161010d578063e2f45605116100a0578063f1c1c14f1161006f578063f1c1c14f14610b3a578063f2fde38b14610b50578063f637434214610b70578063f8b45b0514610b8657600080fd5b8063e2f4560514610ac9578063e596219514610adf578063e884f26014610b0f578063f11a24d314610b2457600080fd5b8063c8c8ebe4116100dc578063c8c8ebe414610a37578063d257b34f14610a4d578063d85ba06314610a6d578063dd62ed3e14610a8357600080fd5b8063c0246668146109bd578063c17b5b8c146109dd578063c18bc195146109fd578063c876d0b914610a1d57600080fd5b80639fccce3211610185578063ae303d0711610154578063ae303d071461092e578063b170830e1461094e578063b62496f51461096e578063bbc0c7421461099e57600080fd5b80639fccce32146108c2578063a0d82dc5146108d8578063a457c2d7146108ee578063a9059cbb1461090e57600080fd5b8063924de9b7116101c1578063924de9b71461085757806395d89b41146108775780639a7a23d61461088c5780639c3b4fdc146108ac57600080fd5b806382aa7c68146107e357806386871050146108035780638da5cb5b146108195780638ea5220f1461083757600080fd5b806349bd5a5e116102e25780636ddd1713116102755780637571336a116102445780637571336a1461077a5780637befee171461079a5780637f5d4ab7146107ad5780638095d564146107c357600080fd5b80636ddd1713146106ef57806370a082311461070f578063715018a61461074557806373dd858c1461075a57600080fd5b8063534c0906116102b1578063534c0906146106835780636220a0a4146106a35780636a486a8e146106b95780636cd1192e146106cf57600080fd5b806349bd5a5e146105dd5780634a62bb65146106115780634ec39ba91461062b5780634fbee1931461064b57600080fd5b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146105765780632a0897d61461058c578063313ce567146105a157806339509351146105bd57600080fd5b80631a8145bb146105005780631f14117b14610516578063203e727e1461053657806323b872dd1461055657600080fd5b80631694505e116103965780631694505e1461045357806317090ec81461049f57806318160ddd146104bf5780631816467f146104de57600080fd5b806306fdde03146103c8578063095ea7b3146103f357806310d5de531461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b9c565b6040516103ea9190612baf565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004612c12565b610c2e565b60405190151581526020016103ea565b34801561042f57600080fd5b5061041361043e366004612c3e565b60216020526000908152604090205460ff1681565b34801561045f57600080fd5b506104877f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ea565b3480156104ab57600080fd5b506104136104ba366004612c6b565b610c45565b3480156104cb57600080fd5b506002545b6040519081526020016103ea565b3480156104ea57600080fd5b506104fe6104f9366004612c3e565b610cb7565b005b34801561050c57600080fd5b506104d0601e5481565b34801561052257600080fd5b506104fe610531366004612c12565b610d3e565b34801561054257600080fd5b506104fe610551366004612c86565b610db3565b34801561056257600080fd5b50610413610571366004612c9f565b610e90565b34801561058257600080fd5b5061048761dead81565b34801561059857600080fd5b506104fe610f3a565b3480156105ad57600080fd5b50604051601281526020016103ea565b3480156105c957600080fd5b506104136105d8366004612c12565b610fd7565b3480156105e957600080fd5b506104877f000000000000000000000000ef23d42b0992001c964556c7462f3755e6195f3781565b34801561061d57600080fd5b50600e546104139060ff1681565b34801561063757600080fd5b50600954610487906001600160a01b031681565b34801561065757600080fd5b50610413610666366004612c3e565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561068f57600080fd5b50600654610487906001600160a01b031681565b3480156106af57600080fd5b506104d0600c5481565b3480156106c557600080fd5b506104d060195481565b3480156106db57600080fd5b506104fe6106ea366004612c3e565b611013565b3480156106fb57600080fd5b50600e546104139062010000900460ff1681565b34801561071b57600080fd5b506104d061072a366004612c3e565b6001600160a01b031660009081526020819052604090205490565b34801561075157600080fd5b506104fe61109a565b34801561076657600080fd5b506104fe610775366004612c3e565b6110d0565b34801561078657600080fd5b506104fe610795366004612ce0565b611157565b6104136107a8366004612c86565b6111ac565b3480156107b957600080fd5b506104d0601d5481565b3480156107cf57600080fd5b506104fe6107de366004612d15565b6111cb565b3480156107ef57600080fd5b506104fe6107fe366004612c86565b611230565b34801561080f57600080fd5b506104d0601a5481565b34801561082557600080fd5b506005546001600160a01b0316610487565b34801561084357600080fd5b50600854610487906001600160a01b031681565b34801561086357600080fd5b506104fe610872366004612c6b565b6112bd565b34801561088357600080fd5b506103dd611303565b34801561089857600080fd5b506104fe6108a7366004612ce0565b611312565b3480156108b857600080fd5b506104d060185481565b3480156108ce57600080fd5b506104d0601f5481565b3480156108e457600080fd5b506104d0601c5481565b3480156108fa57600080fd5b50610413610909366004612c12565b6113f1565b34801561091a57600080fd5b50610413610929366004612c12565b61148a565b34801561093a57600080fd5b506104fe610949366004612d41565b611497565b34801561095a57600080fd5b50600754610487906001600160a01b031681565b34801561097a57600080fd5b50610413610989366004612c3e565b60226020526000908152604090205460ff1681565b3480156109aa57600080fd5b50600e5461041390610100900460ff1681565b3480156109c957600080fd5b506104fe6109d8366004612ce0565b61159f565b3480156109e957600080fd5b506104fe6109f8366004612d15565b611626565b348015610a0957600080fd5b506104fe610a18366004612c86565b611686565b348015610a2957600080fd5b506010546104139060ff1681565b348015610a4357600080fd5b506104d0600a5481565b348015610a5957600080fd5b50610413610a68366004612c86565b611757565b348015610a7957600080fd5b506104d060155481565b348015610a8f57600080fd5b506104d0610a9e366004612dc5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad557600080fd5b506104d0600b5481565b348015610aeb57600080fd5b50610413610afa366004612c3e565b60146020526000908152604090205460ff1681565b348015610b1b57600080fd5b506104136118ae565b348015610b3057600080fd5b506104d060175481565b348015610b4657600080fd5b506104d060165481565b348015610b5c57600080fd5b506104fe610b6b366004612c3e565b6118eb565b348015610b7c57600080fd5b506104d0601b5481565b348015610b9257600080fd5b506104d0600d5481565b606060038054610bab90612dfe565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790612dfe565b8015610c245780601f10610bf957610100808354040283529160200191610c24565b820191906000526020600020905b815481529060010190602001808311610c0757829003601f168201915b5050505050905090565b6000610c3b338484611986565b5060015b92915050565b6008546000906001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b60448201526064015b60405180910390fd5b50600e805460ff1916911515919091179055600190565b6005546001600160a01b03163314610ce15760405162461bcd60e51b8152600401610c9790612e38565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600854600090610d599084906001600160a01b031684611986565b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610da6576040519150601f19603f3d011682016040523d82523d6000602084013e610dab565b606091505b505050505050565b6005546001600160a01b03163314610ddd5760405162461bcd60e51b8152600401610c9790612e38565b670de0b6b3a76400006103e8610df260025490565b610dfd906001612e83565b610e079190612e9a565b610e119190612e9a565b811015610e785760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c97565b610e8a81670de0b6b3a7640000612e83565b600a5550565b6000610e9d848484611aaa565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f225760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c97565b610f2f8533858403611986565b506001949350505050565b436011546006610f4a9190612ebc565b1115610f815760405162461bcd60e51b8152600401610c97906020808252600490820152631dd85a5d60e21b604082015260600190565b60016016819055600060178190556018829055610f9e9082612ebc565b610fa89190612ebc565b6015556001601a8190556000601b819055601c829055610fc89082612ebc565b610fd29190612ebc565b601955565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c3b91859061100e908690612ebc565b611986565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c9790612e38565b6007546040516001600160a01b03918216918316907f5bbe2b7623b9e071987dfca0985544fc6a3bc48b0c06bea4355f91836c9d92a290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110c45760405162461bcd60e51b8152600401610c9790612e38565b6110ce60006124b2565b565b6005546001600160a01b031633146110fa5760405162461bcd60e51b8152600401610c9790612e38565b6009546040516001600160a01b03918216918316907f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6000670de0b6b3a764000034106111c35760138290555b506001919050565b6005546001600160a01b031633146111f55760405162461bcd60e51b8152600401610c9790612e38565b6016839055601782905560188190558061120f8385612ebc565b6112199190612ebc565b6015819055600c101561122b57600080fd5b505050565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610c9790612e38565b600e54610100900460ff16156112a35760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610c97565b600e80544360115562ffff00191662010100179055601255565b6005546001600160a01b031633146112e75760405162461bcd60e51b8152600401610c9790612e38565b600e8054911515620100000262ff000019909216919091179055565b606060048054610bab90612dfe565b6005546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610c9790612e38565b7f000000000000000000000000ef23d42b0992001c964556c7462f3755e6195f376001600160a01b0316826001600160a01b0316036113e35760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c97565b6113ed8282612504565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156114735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c97565b6114803385858403611986565b5060019392505050565b6000610c3b338484611aaa565b6005546001600160a01b031633146114c15760405162461bcd60e51b8152600401610c9790612e38565b60005b828110156115995760008484838181106114e0576114e0612ecf565b90506020020160208101906114f59190612c3e565b90506001600160a01b038116301480159061151e57506006546001600160a01b03828116911614155b801561155c57507f000000000000000000000000ef23d42b0992001c964556c7462f3755e6195f376001600160a01b0316816001600160a01b031614155b15611586576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b508061159181612ee5565b9150506114c4565b50505050565b6005546001600160a01b031633146115c95760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c9790612e38565b601a839055601b829055601c8190558061166a8385612ebc565b6116749190612ebc565b6019819055600c101561122b57600080fd5b6005546001600160a01b031633146116b05760405162461bcd60e51b8152600401610c9790612e38565b670de0b6b3a76400006103e86116c560025490565b6116d0906005612e83565b6116da9190612e9a565b6116e49190612e9a565b81101561173f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c97565b61175181670de0b6b3a7640000612e83565b600d5550565b6005546000906001600160a01b031633146117845760405162461bcd60e51b8152600401610c9790612e38565b620186a061179160025490565b61179c906001612e83565b6117a69190612e9a565b8210156118135760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c97565b6103e861181f60025490565b61182a906005612e83565b6118349190612e9a565b8211156118a05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c97565b50600b81905560015b919050565b6005546000906001600160a01b031633146118db5760405162461bcd60e51b8152600401610c9790612e38565b506010805460ff19169055600190565b6005546001600160a01b031633146119155760405162461bcd60e51b8152600401610c9790612e38565b6001600160a01b03811661197a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c97565b611983816124b2565b50565b6001600160a01b0383166119e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c97565b6001600160a01b038216611a495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c97565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ad05760405162461bcd60e51b8152600401610c9790612efe565b6001600160a01b038216611af65760405162461bcd60e51b8152600401610c9790612f43565b6001600160a01b03831660009081526014602052604090205460ff1615611b505760405162461bcd60e51b815260206004820152600e60248201526d14db9a5c195c88189b1bd8dad95960921b6044820152606401610c97565b80600003611b645761122b83836000612558565b600e5460ff1615611fe4576005546001600160a01b03848116911614801590611b9b57506005546001600160a01b03838116911614155b8015611baf57506001600160a01b03821615155b8015611bc657506001600160a01b03821661dead14155b8015611bdc5750600654600160a01b900460ff16155b15611fe457600e54610100900460ff16611c72576001600160a01b038316600090815260208052604090205460ff1680611c2d57506001600160a01b038216600090815260208052604090205460ff165b611c725760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c97565b601254601154611c829190612ebc565b4311158015611cc257507f000000000000000000000000ef23d42b0992001c964556c7462f3755e6195f376001600160a01b0316836001600160a01b0316145b8015611cdc57506006546001600160a01b03838116911614155b8015611cf157506001600160a01b0382163014155b8015611d2f57507f000000000000000000000000ef23d42b0992001c964556c7462f3755e6195f376001600160a01b0316826001600160a01b031614155b15611d7e576001600160a01b038216600081815260146020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b6001600160a01b03831660009081526022602052604090205460ff168015611dbf57506001600160a01b03821660009081526021602052604090205460ff16155b15611ea357600a54811115611e345760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c97565b600d546001600160a01b038316600090815260208190526040902054611e5a9083612ebc565b1115611e9e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b611fe4565b6001600160a01b03821660009081526022602052604090205460ff168015611ee457506001600160a01b03831660009081526021602052604090205460ff16155b15611f5a57600a54811115611e9e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c97565b6001600160a01b03821660009081526021602052604090205460ff16611fe457600d546001600160a01b038316600090815260208190526040902054611fa09083612ebc565b1115611fe45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c97565b60105460ff1615612181576001600160a01b03821660009081526022602052604090205460ff16801561203057506001600160a01b03831660009081526021602052604090205460ff16155b801561203e5750600c548110155b156120e1576013546120509043612f86565b326000908152600f6020526040902054106120e15760405162461bcd60e51b8152602060048201526044602482018190527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c908201527f65642e20204f6e6c79206f6e652074782070657220626c6f636b7320616c6c6f6064820152633bb2b21760e11b608482015260a401610c97565b6001600160a01b03821660009081526022602052604090205460ff16801561212257506001600160a01b03831660009081526021602052604090205460ff16155b8061216957506001600160a01b03831660009081526022602052604090205460ff16801561216957506001600160a01b03821660009081526021602052604090205460ff16155b1561218157326000908152600f602052604090204390555b30600090815260208190526040902054600b54811080159081906121ad5750600e5462010000900460ff165b80156121c35750600654600160a01b900460ff16155b80156121e857506001600160a01b03851660009081526022602052604090205460ff16155b801561220c57506001600160a01b038516600090815260208052604090205460ff16155b801561223057506001600160a01b038416600090815260208052604090205460ff16155b1561225e576006805460ff60a01b1916600160a01b1790556122506126ac565b6006805460ff60a01b191690555b6006546001600160a01b038616600090815260208052604090205460ff600160a01b9092048216159116806122aa57506001600160a01b038516600090815260208052604090205460ff165b156122b3575060005b6000811561249e576001600160a01b03861660009081526022602052604090205460ff1680156122e557506000601954115b156123a35761230a6064612304601954886128e690919063ffffffff16565b906128f9565b9050601954601b548261231d9190612e83565b6123279190612e9a565b601e60008282546123389190612ebc565b9091555050601954601c5461234d9083612e83565b6123579190612e9a565b601f60008282546123689190612ebc565b9091555050601954601a5461237d9083612e83565b6123879190612e9a565b601d60008282546123989190612ebc565b909155506124809050565b6001600160a01b03871660009081526022602052604090205460ff1680156123cd57506000601554115b15612480576123ec6064612304601554886128e690919063ffffffff16565b9050601554601754826123ff9190612e83565b6124099190612e9a565b601e600082825461241a9190612ebc565b909155505060155460185461242f9083612e83565b6124399190612e9a565b601f600082825461244a9190612ebc565b909155505060155460165461245f9083612e83565b6124699190612e9a565b601d600082825461247a9190612ebc565b90915550505b801561249157612491873083612558565b61249b8186612f86565b94505b6124a9878787612558565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661257e5760405162461bcd60e51b8152600401610c9790612efe565b6001600160a01b0382166125a45760405162461bcd60e51b8152600401610c9790612f43565b6001600160a01b0383166000908152602081905260409020548181101561261c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c97565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612653908490612ebc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161269f91815260200190565b60405180910390a3611599565b3060009081526020819052604081205490506000601f54601d54601e546126d39190612ebc565b6126dd9190612ebc565b905060008215806126ec575081155b156126f657505050565b600b54612704906014612e83565b83111561271c57600b54612719906014612e83565b92505b6000600283601e548661272f9190612e83565b6127399190612e9a565b6127439190612e9a565b905060006127518583612905565b90504761275d82612911565b60006127694783612905565b9050600061278687612304601d54856128e690919063ffffffff16565b905060006127a388612304601f54866128e690919063ffffffff16565b90506000816127b28486612f86565b6127bc9190612f86565b6000601e819055601d819055601f8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114612819576040519150601f19603f3d011682016040523d82523d6000602084013e61281e565b606091505b509098505086158015906128325750600081115b15612885576128418782612ac9565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128d2576040519150601f19603f3d011682016040523d82523d6000602084013e6128d7565b606091505b50505050505050505050505050565b60006128f28284612e83565b9392505050565b60006128f28284612e9a565b60006128f28284612f86565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294657612946612ecf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e89190612f99565b816001815181106129fb576129fb612ecf565b60200260200101906001600160a01b031690816001600160a01b031681525050612a46307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611986565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612a9b908590600090869030904290600401612fb6565b600060405180830381600087803b158015612ab557600080fd5b505af1158015610dab573d6000803e3d6000fd5b612af4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611986565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612b83573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba89190613027565b5050505050565b600060208083528351808285015260005b81811015612bdc57858101830151858201604001528201612bc0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461198357600080fd5b60008060408385031215612c2557600080fd5b8235612c3081612bfd565b946020939093013593505050565b600060208284031215612c5057600080fd5b81356128f281612bfd565b803580151581146118a957600080fd5b600060208284031215612c7d57600080fd5b6128f282612c5b565b600060208284031215612c9857600080fd5b5035919050565b600080600060608486031215612cb457600080fd5b8335612cbf81612bfd565b92506020840135612ccf81612bfd565b929592945050506040919091013590565b60008060408385031215612cf357600080fd5b8235612cfe81612bfd565b9150612d0c60208401612c5b565b90509250929050565b600080600060608486031215612d2a57600080fd5b505081359360208301359350604090920135919050565b600080600060408486031215612d5657600080fd5b833567ffffffffffffffff80821115612d6e57600080fd5b818601915086601f830112612d8257600080fd5b813581811115612d9157600080fd5b8760208260051b8501011115612da657600080fd5b602092830195509350612dbc9186019050612c5b565b90509250925092565b60008060408385031215612dd857600080fd5b8235612de381612bfd565b91506020830135612df381612bfd565b809150509250929050565b600181811c90821680612e1257607f821691505b602082108103612e3257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c3f57610c3f612e6d565b600082612eb757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c3f57610c3f612e6d565b634e487b7160e01b600052603260045260246000fd5b600060018201612ef757612ef7612e6d565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c3f57610c3f612e6d565b600060208284031215612fab57600080fd5b81516128f281612bfd565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130065784516001600160a01b031683529383019391830191600101612fe1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561303c57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201468e3f12676c0d01e7b56bfe969d08f1e53c62bc6e68c68406e765c83ca695564736f6c63430008110033
Deployed Bytecode Sourcemap
16240:18032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4851:169;;;;;;;;;;-1:-1:-1;4851:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4851:169:0;1023:187:1;17789:63:0;;;;;;;;;;-1:-1:-1;17789:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16327:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;16327:51:0;1467:230:1;21230:183:0;;;;;;;;;;-1:-1:-1;21230:183:0;;;;;:::i;:::-;;:::i;4258:108::-;;;;;;;;;;-1:-1:-1;4346:12:0;;4258:108;;;2198:25:1;;;2186:2;2171:18;4258:108:0;2052:177:1;25332:157:0;;;;;;;;;;-1:-1:-1;25332:157:0;;;;;:::i;:::-;;:::i;:::-;;17654:33;;;;;;;;;;;;;;;;31459:236;;;;;;;;;;-1:-1:-1;31459:236:0;;;;;:::i;:::-;;:::i;22184:275::-;;;;;;;;;;-1:-1:-1;22184:275:0;;;;;:::i;:::-;;:::i;5028:492::-;;;;;;;;;;-1:-1:-1;5028:492:0;;;;;:::i;:::-;;:::i;16430:53::-;;;;;;;;;;;;16476:6;16430:53;;23828:396;;;;;;;;;;;;;:::i;4157:93::-;;;;;;;;;;-1:-1:-1;4157:93:0;;4240:2;3230:36:1;;3218:2;3203:18;4157:93:0;3088:184:1;5528:215:0;;;;;;;;;;-1:-1:-1;5528:215:0;;;;;:::i;:::-;;:::i;16385:38::-;;;;;;;;;;;;;;;16903:33;;;;;;;;;;-1:-1:-1;16903:33:0;;;;;;;;16714:24;;;;;;;;;;-1:-1:-1;16714:24:0;;;;-1:-1:-1;;;;;16714:24:0;;;25671:126;;;;;;;;;;-1:-1:-1;25671:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25761:28:0;25737:4;25761:28;;;:19;:28;;;;;;;;;25671:126;16490:68;;;;;;;;;;-1:-1:-1;16490:68:0;;;;-1:-1:-1;;;;;16490:68:0;;;16829:34;;;;;;;;;;;;;;;;17479:28;;;;;;;;;;;;;;;;25151:173;;;;;;;;;;-1:-1:-1;25151:173:0;;;;;:::i;:::-;;:::i;16983:31::-;;;;;;;;;;-1:-1:-1;16983:31:0;;;;;;;;;;;4374:127;;;;;;;;;;-1:-1:-1;4374:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4475:18:0;4448:7;4475:18;;;;;;;;;;;;4374:127;2059:103;;;;;;;;;;;;;:::i;25497:166::-;;;;;;;;;;-1:-1:-1;25497:166:0;;;;;:::i;:::-;;:::i;22731:167::-;;;;;;;;;;-1:-1:-1;22731:167:0;;;;;:::i;:::-;;:::i;24422:213::-;;;;;;:::i;:::-;;:::i;17619:28::-;;;;;;;;;;;;;;;;23102:350;;;;;;;;;;-1:-1:-1;23102:350:0;;;;;:::i;:::-;;:::i;20923:255::-;;;;;;;;;;-1:-1:-1;20923:255:0;;;;;:::i;:::-;;:::i;17514:26::-;;;;;;;;;;;;;;;;1836:87;;;;;;;;;;-1:-1:-1;1909:6:0;;-1:-1:-1;;;;;1909:6:0;1836:87;;16683:24;;;;;;;;;;-1:-1:-1;16683:24:0;;;;-1:-1:-1;;;;;16683:24:0;;;22994:100;;;;;;;;;;-1:-1:-1;22994:100:0;;;;;:::i;:::-;;:::i;4045:104::-;;;;;;;;;;;;;:::i;24643:304::-;;;;;;;;;;-1:-1:-1;24643:304:0;;;;;:::i;:::-;;:::i;17446:24::-;;;;;;;;;;;;;;;;17694:27;;;;;;;;;;;;;;;;17585:25;;;;;;;;;;;;;;;;5751:413;;;;;;;;;;-1:-1:-1;5751:413:0;;;;;:::i;:::-;;:::i;4509:175::-;;;;;;;;;;-1:-1:-1;4509:175:0;;;;;:::i;:::-;;:::i;31703:385::-;;;;;;;;;;-1:-1:-1;31703:385:0;;;;;:::i;:::-;;:::i;16651:25::-;;;;;;;;;;-1:-1:-1;16651:25:0;;;;-1:-1:-1;;;;;16651:25:0;;;17861:57;;;;;;;;;;-1:-1:-1;17861:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16943:33;;;;;;;;;;-1:-1:-1;16943:33:0;;;;;;;;;;;24232:182;;;;;;;;;;-1:-1:-1;24232:182:0;;;;;:::i;:::-;;:::i;23460:360::-;;;;;;;;;;-1:-1:-1;23460:360:0;;;;;:::i;:::-;;:::i;22467:256::-;;;;;;;;;;-1:-1:-1;22467:256:0;;;;;:::i;:::-;;:::i;17149:39::-;;;;;;;;;;-1:-1:-1;17149:39:0;;;;;;;;16747:35;;;;;;;;;;;;;;;;21679:497;;;;;;;;;;-1:-1:-1;21679:497:0;;;;;:::i;:::-;;:::i;17343:27::-;;;;;;;;;;;;;;;;4692:151;;;;;;;;;;-1:-1:-1;4692:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4808:18:0;;;4781:7;4808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4692:151;16789:33;;;;;;;;;;;;;;;;17295:39;;;;;;;;;;-1:-1:-1;17295:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21474:135;;;;;;;;;;;;;:::i;17409:30::-;;;;;;;;;;;;;;;;17377:25;;;;;;;;;;;;;;;;2170:201;;;;;;;;;;-1:-1:-1;2170:201:0;;;;;:::i;:::-;;:::i;17547:31::-;;;;;;;;;;;;;;;;16870:24;;;;;;;;;;;;;;;;3937:100;3991:13;4024:5;4017:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:100;:::o;4851:169::-;4934:4;4951:39;1462:10;4974:7;4983:6;4951:8;:39::i;:::-;-1:-1:-1;5008:4:0;4851:169;;;;;:::o;21230:183::-;21323:9;;21282:4;;-1:-1:-1;;;;;21323:9:0;1462:10;-1:-1:-1;;;;;21307:25:0;;21299:51;;;;-1:-1:-1;;;21299:51:0;;5592:2:1;21299:51:0;;;5574:21:1;5631:2;5611:18;;;5604:30;-1:-1:-1;;;5650:18:1;;;5643:43;5703:18;;21299:51:0;;;;;;;;;-1:-1:-1;21361:14:0;:22;;-1:-1:-1;;21361:22:0;;;;;;;;;;-1:-1:-1;;21230:183:0:o;25332:157::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;25439:9:::1;::::0;25411:38:::1;::::0;-1:-1:-1;;;;;25439:9:0;;::::1;::::0;25411:38;::::1;::::0;::::1;::::0;25439:9:::1;::::0;25411:38:::1;25460:9;:21:::0;;-1:-1:-1;;;;;;25460:21:0::1;-1:-1:-1::0;;;;;25460:21:0;;;::::1;::::0;;;::::1;::::0;;25332:157::o;31459:236::-;31586:9;;31541:12;;31564:40;;31573:11;;-1:-1:-1;;;;;31586:9:0;31597:6;31564:8;:40::i;:::-;31637:9;;31629:58;;-1:-1:-1;;;;;31637:9:0;;;;31661:21;;31629:58;;;;31661:21;31637:9;31629:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31459:236:0:o;22184:275::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;22321:4:::1;22313;22292:13;4346:12:::0;;;4258:108;22292:13:::1;:17;::::0;22308:1:::1;22292:17;:::i;:::-;22291:26;;;;:::i;:::-;22290:35;;;;:::i;:::-;22280:6;:45;;22258:142;;;::::0;-1:-1:-1;;;22258:142:0;;7032:2:1;22258:142:0::1;::::0;::::1;7014:21:1::0;7071:2;7051:18;;;7044:30;7110:34;7090:18;;;7083:62;-1:-1:-1;;;7161:18:1;;;7154:45;7216:19;;22258:142:0::1;6830:411:1::0;22258:142:0::1;22434:17;:6:::0;22444::::1;22434:17;:::i;:::-;22411:20;:40:::0;-1:-1:-1;22184:275:0:o;5028:492::-;5168:4;5185:36;5195:6;5203:9;5214:6;5185:9;:36::i;:::-;-1:-1:-1;;;;;5261:19:0;;5234:24;5261:19;;;:11;:19;;;;;;;;1462:10;5261:33;;;;;;;;5313:26;;;;5305:79;;;;-1:-1:-1;;;5305:79:0;;7448:2:1;5305:79:0;;;7430:21:1;7487:2;7467:18;;;7460:30;7526:34;7506:18;;;7499:62;-1:-1:-1;;;7577:18:1;;;7570:38;7625:19;;5305:79:0;7246:404:1;5305:79:0;5420:57;5429:6;1462:10;5470:6;5451:16;:25;5420:8;:57::i;:::-;-1:-1:-1;5508:4:0;;5028:492;-1:-1:-1;;;;5028:492:0:o;23828:396::-;23896:12;23877:11;;23891:1;23877:15;;;;:::i;:::-;:31;;23869:48;;;;-1:-1:-1;;;23869:48:0;;;;;;7987:2:1;7969:21;;;8026:1;8006:18;;;7999:29;-1:-1:-1;;;8059:2:1;8044:18;;8037:34;8103:2;8088:18;;7785:327;23869:48:0;23941:1;23928:10;:14;;;23971:1;23953:15;:19;;;23983:9;:13;;;24022:28;;23941:1;24022:28;:::i;:::-;:40;;;;:::i;:::-;24007:12;:55;24089:1;24075:11;:15;;;-1:-1:-1;24101:16:0;:20;;;24132:10;:14;;;24173:30;;24089:1;24173:30;:::i;:::-;:43;;;;:::i;:::-;24157:13;:59;23828:396::o;5528:215::-;1462:10;5616:4;5665:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5665:34:0;;;;;;;;;;5616:4;;5633:80;;5656:7;;5665:47;;5702:10;;5665:47;:::i;:::-;5633:8;:80::i;25151:173::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;25268:10:::1;::::0;25235:44:::1;::::0;-1:-1:-1;;;;;25268:10:0;;::::1;::::0;25235:44;::::1;::::0;::::1;::::0;25268:10:::1;::::0;25235:44:::1;25290:10;:26:::0;;-1:-1:-1;;;;;;25290:26:0::1;-1:-1:-1::0;;;;;25290:26:0;;;::::1;::::0;;;::::1;::::0;;25151:173::o;2059:103::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;2124:30:::1;2151:1;2124:18;:30::i;:::-;2059:103::o:0;25497:166::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;25610:9:::1;::::0;25579:41:::1;::::0;-1:-1:-1;;;;;25610:9:0;;::::1;::::0;25579:41;::::1;::::0;::::1;::::0;25610:9:::1;::::0;25579:41:::1;25631:9;:24:::0;;-1:-1:-1;;;;;;25631:24:0::1;-1:-1:-1::0;;;;;25631:24:0;;;::::1;::::0;;;::::1;::::0;;25497:166::o;22731:167::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22844:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22844:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22731:167::o;24422:213::-;24495:4;24549;24536:9;:17;24512:94;;24570:10;:24;;;24512:94;-1:-1:-1;24623:4:0;;24422:213;-1:-1:-1;24422:213:0:o;23102:350::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;23247:10:::1;:21:::0;;;23279:15:::1;:31:::0;;;23321:9:::1;:19:::0;;;23333:7;23366:28:::1;23297:13:::0;23260:8;23366:28:::1;:::i;:::-;:40;;;;:::i;:::-;23351:12;:55:::0;;;23441:2:::1;-1:-1:-1::0;23425:18:0::1;23417:27;;;::::0;::::1;;23102:350:::0;;;:::o;20923:255::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;21006:13:::1;::::0;::::1;::::0;::::1;;;21005:14;20997:41;;;::::0;-1:-1:-1;;;20997:41:0;;8319:2:1;20997:41:0::1;::::0;::::1;8301:21:1::0;8358:2;8338:18;;;8331:30;-1:-1:-1;;;8377:18:1;;;8370:44;8431:18;;20997:41:0::1;8117:338:1::0;20997:41:0::1;21049:13;:20:::0;;21094:12:::1;21080:11;:26:::0;-1:-1:-1;;21117:18:0;;;;;21146:10:::1;:24:::0;20923:255::o;22994:100::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;23065:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23065:21:0;;::::1;::::0;;;::::1;::::0;;22994:100::o;4045:104::-;4101:13;4134:7;4127:14;;;;;:::i;24643:304::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;24787:13:::1;-1:-1:-1::0;;;;;24779:21:0::1;:4;-1:-1:-1::0;;;;;24779:21:0::1;::::0;24757:128:::1;;;::::0;-1:-1:-1;;;24757:128:0;;8662:2:1;24757:128:0::1;::::0;::::1;8644:21:1::0;8701:2;8681:18;;;8674:30;8740:34;8720:18;;;8713:62;8811:27;8791:18;;;8784:55;8856:19;;24757:128:0::1;8460:421:1::0;24757:128:0::1;24898:41;24927:4;24933:5;24898:28;:41::i;:::-;24643:304:::0;;:::o;5751:413::-;1462:10;5844:4;5888:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5888:34:0;;;;;;;;;;5941:35;;;;5933:85;;;;-1:-1:-1;;;5933:85:0;;9088:2:1;5933:85:0;;;9070:21:1;9127:2;9107:18;;;9100:30;9166:34;9146:18;;;9139:62;-1:-1:-1;;;9217:18:1;;;9210:35;9262:19;;5933:85:0;8886:401:1;5933:85:0;6054:67;1462:10;6077:7;6105:15;6086:16;:34;6054:8;:67::i;:::-;-1:-1:-1;6152:4:0;;5751:413;-1:-1:-1;;;5751:413:0:o;4509:175::-;4595:4;4612:42;1462:10;4636:9;4647:6;4612:9;:42::i;31703:385::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;31804:9:::1;31800:281;31818:17:::0;;::::1;31800:281;;;31855:15;31873:8;;31882:1;31873:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31855:29:::0;-1:-1:-1;;;;;;31902:24:0;::::1;31921:4;31902:24;::::0;::::1;::::0;:64:::1;;-1:-1:-1::0;31958:8:0::1;::::0;-1:-1:-1;;;;;31947:19:0;;::::1;31958:8:::0;::::1;31947:19;;31902:64;:118;;;;;32006:13;-1:-1:-1::0;;;;;31987:33:0::1;:7;-1:-1:-1::0;;;;;31987:33:0::1;;;31902:118;31899:170;;;-1:-1:-1::0;;;;;32039:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;32039:30:0::1;::::0;::::1;;;::::0;;31899:170:::1;-1:-1:-1::0;31836:3:0;::::1;::::0;::::1;:::i;:::-;;;;31800:281;;;;31703:385:::0;;;:::o;24232:182::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24317:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;24317:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24372:34;;1163:41:1;;;24372:34:0::1;::::0;1136:18:1;24372:34:0::1;;;;;;;24232:182:::0;;:::o;23460:360::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;23606:11:::1;:22:::0;;;23639:16:::1;:32:::0;;;23682:10:::1;:20:::0;;;23695:7;23729:30:::1;23658:13:::0;23620:8;23729:30:::1;:::i;:::-;:43;;;;:::i;:::-;23713:13;:59:::0;;;23808:2:::1;-1:-1:-1::0;23791:19:0::1;23783:28;;;::::0;::::1;22467:256:::0;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;22607:4:::1;22599;22578:13;4346:12:::0;;;4258:108;22578:13:::1;:17;::::0;22594:1:::1;22578:17;:::i;:::-;22577:26;;;;:::i;:::-;22576:35;;;;:::i;:::-;22566:6;:45;;22544:131;;;::::0;-1:-1:-1;;;22544:131:0;;9766:2:1;22544:131:0::1;::::0;::::1;9748:21:1::0;9805:2;9785:18;;;9778:30;9844:34;9824:18;;;9817:62;-1:-1:-1;;;9895:18:1;;;9888:34;9939:19;;22544:131:0::1;9564:400:1::0;22544:131:0::1;22698:17;:6:::0;22708::::1;22698:17;:::i;:::-;22686:9;:29:::0;-1:-1:-1;22467:256:0:o;21679:497::-;1909:6;;21787:4;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;21866:6:::1;21845:13;4346:12:::0;;;4258:108;21845:13:::1;:17;::::0;21861:1:::1;21845:17;:::i;:::-;21844:28;;;;:::i;:::-;21831:9;:41;;21809:144;;;::::0;-1:-1:-1;;;21809:144:0;;10171:2:1;21809:144:0::1;::::0;::::1;10153:21:1::0;10210:2;10190:18;;;10183:30;10249:34;10229:18;;;10222:62;-1:-1:-1;;;10300:18:1;;;10293:51;10361:19;;21809:144:0::1;9969:417:1::0;21809:144:0::1;22021:4;22000:13;4346:12:::0;;;4258:108;22000:13:::1;:17;::::0;22016:1:::1;22000:17;:::i;:::-;21999:26;;;;:::i;:::-;21986:9;:39;;21964:141;;;::::0;-1:-1:-1;;;21964:141:0;;10593:2:1;21964:141:0::1;::::0;::::1;10575:21:1::0;10632:2;10612:18;;;10605:30;10671:34;10651:18;;;10644:62;-1:-1:-1;;;10722:18:1;;;10715:50;10782:19;;21964:141:0::1;10391:416:1::0;21964:141:0::1;-1:-1:-1::0;22116:18:0::1;:30:::0;;;22164:4:::1;2042:1;21679:497:::0;;;:::o;21474:135::-;1909:6;;21534:4;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;-1:-1:-1;21551:20:0::1;:28:::0;;-1:-1:-1;;21551:28:0::1;::::0;;;21474:135;:::o;2170:201::-;1909:6;;-1:-1:-1;;;;;1909:6:0;1462:10;1971:23;1963:68;;;;-1:-1:-1;;;1963:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2259:22:0;::::1;2251:73;;;::::0;-1:-1:-1;;;2251:73:0;;11014:2:1;2251:73:0::1;::::0;::::1;10996:21:1::0;11053:2;11033:18;;;11026:30;11092:34;11072:18;;;11065:62;-1:-1:-1;;;11143:18:1;;;11136:36;11189:19;;2251:73:0::1;10812:402:1::0;2251:73:0::1;2335:28;2354:8;2335:18;:28::i;:::-;2170:201:::0;:::o;7919:380::-;-1:-1:-1;;;;;8055:19:0;;8047:68;;;;-1:-1:-1;;;8047:68:0;;11421:2:1;8047:68:0;;;11403:21:1;11460:2;11440:18;;;11433:30;11499:34;11479:18;;;11472:62;-1:-1:-1;;;11550:18:1;;;11543:34;11594:19;;8047:68:0;11219:400:1;8047:68:0;-1:-1:-1;;;;;8134:21:0;;8126:68;;;;-1:-1:-1;;;8126:68:0;;11826:2:1;8126:68:0;;;11808:21:1;11865:2;11845:18;;;11838:30;11904:34;11884:18;;;11877:62;-1:-1:-1;;;11955:18:1;;;11948:32;11997:19;;8126:68:0;11624:398:1;8126:68:0;-1:-1:-1;;;;;8207:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8259:32;;2198:25:1;;;8259:32:0;;2171:18:1;8259:32:0;;;;;;;7919:380;;;:::o;25855:4999::-;-1:-1:-1;;;;;25987:18:0;;25979:68;;;;-1:-1:-1;;;25979:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26066:16:0;;26058:64;;;;-1:-1:-1;;;26058:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26142:13:0;;;;;;:7;:13;;;;;;;;26141:14;26133:41;;;;-1:-1:-1;;;26133:41:0;;13039:2:1;26133:41:0;;;13021:21:1;13078:2;13058:18;;;13051:30;-1:-1:-1;;;13097:18:1;;;13090:44;13151:18;;26133:41:0;12837:338:1;26133:41:0;26191:6;26201:1;26191:11;26187:93;;26219:28;26235:4;26241:2;26245:1;26219:15;:28::i;26187:93::-;26296:14;;;;26292:1988;;;1909:6;;-1:-1:-1;;;;;26349:15:0;;;1909:6;;26349:15;;;;:49;;-1:-1:-1;1909:6:0;;-1:-1:-1;;;;;26385:13:0;;;1909:6;;26385:13;;26349:49;:86;;;;-1:-1:-1;;;;;;26419:16:0;;;;26349:86;:128;;;;-1:-1:-1;;;;;;26456:21:0;;26470:6;26456:21;;26349:128;:158;;;;-1:-1:-1;26499:8:0;;-1:-1:-1;;;26499:8:0;;;;26498:9;26349:158;26327:1942;;;26547:13;;;;;;;26542:223;;-1:-1:-1;;;;;26619:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26648:23:0;;;;;;:19;:23;;;;;;;;26619:52;26585:160;;;;-1:-1:-1;;;26585:160:0;;13382:2:1;26585:160:0;;;13364:21:1;13421:2;13401:18;;;13394:30;-1:-1:-1;;;13440:18:1;;;13433:52;13502:18;;26585:160:0;13180:346:1;26585:160:0;26818:10;;26804:11;;:24;;;;:::i;:::-;26788:12;:40;;:74;;;;;26848:13;-1:-1:-1;;;;;26832:30:0;:4;-1:-1:-1;;;;;26832:30:0;;26788:74;:111;;;;-1:-1:-1;26891:8:0;;-1:-1:-1;;;;;26885:14:0;;;26891:8;;26885:14;;26788:111;:134;;;;-1:-1:-1;;;;;;26903:19:0;;26917:4;26903:19;;26788:134;:166;;;;;26940:13;-1:-1:-1;;;;;26926:28:0;:2;-1:-1:-1;;;;;26926:28:0;;;26788:166;26785:274;;;-1:-1:-1;;;;;26978:11:0;;;;;;:7;:11;;;;;;:18;;-1:-1:-1;;26978:18:0;26992:4;26978:18;;;27024:15;;;26978:11;27024:15;26785:274;-1:-1:-1;;;;;27133:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;27190:35:0;;;;;;:31;:35;;;;;;;;27189:36;27133:92;27107:1147;;;27312:20;;27302:6;:30;;27268:169;;;;-1:-1:-1;;;27268:169:0;;13733:2:1;27268:169:0;;;13715:21:1;13772:2;13752:18;;;13745:30;13811:34;13791:18;;;13784:62;-1:-1:-1;;;13862:18:1;;;13855:51;13923:19;;27268:169:0;13531:417:1;27268:169:0;27520:9;;-1:-1:-1;;;;;4475:18:0;;4448:7;4475:18;;;;;;;;;;;27494:22;;:6;:22;:::i;:::-;:35;;27460:140;;;;-1:-1:-1;;;27460:140:0;;14155:2:1;27460:140:0;;;14137:21:1;14194:2;14174:18;;;14167:30;-1:-1:-1;;;14213:18:1;;;14206:49;14272:18;;27460:140:0;13953:343:1;27460:140:0;27107:1147;;;-1:-1:-1;;;;;27698:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;27753:37:0;;;;;;:31;:37;;;;;;;;27752:38;27698:92;27672:582;;;27877:20;;27867:6;:30;;27833:170;;;;-1:-1:-1;;;27833:170:0;;14503:2:1;27833:170:0;;;14485:21:1;14542:2;14522:18;;;14515:30;14581:34;14561:18;;;14554:62;-1:-1:-1;;;14632:18:1;;;14625:52;14694:19;;27833:170:0;14301:418:1;27672:582:0;-1:-1:-1;;;;;28034:35:0;;;;;;:31;:35;;;;;;;;28029:225;;28154:9;;-1:-1:-1;;;;;4475:18:0;;4448:7;4475:18;;;;;;;;;;;28128:22;;:6;:22;:::i;:::-;:35;;28094:140;;;;-1:-1:-1;;;28094:140:0;;14155:2:1;28094:140:0;;;14137:21:1;14194:2;14174:18;;;14167:30;-1:-1:-1;;;14213:18:1;;;14206:49;14272:18;;28094:140:0;13953:343:1;28094:140:0;28294:20;;;;28290:739;;;-1:-1:-1;;;;;28335:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;28369:37:0;;;;;;:31;:37;;;;;;;;28368:38;28335:71;:104;;;;;28420:19;;28410:6;:29;;28335:104;28331:379;;;28572:10;;28557:25;;:12;:25;:::i;:::-;28519:9;28490:39;;;;:28;:39;;;;;;:92;28460:234;;;;-1:-1:-1;;;28460:234:0;;15059:2:1;28460:234:0;;;15041:21:1;15098:2;15078:18;;;15071:30;;;15137:34;15117:18;;;15110:62;15208:34;15188:18;;;15181:62;-1:-1:-1;;;15259:19:1;;;15252:35;15304:19;;28460:234:0;14857:472:1;28460:234:0;-1:-1:-1;;;;;28747:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;28781:37:0;;;;;;:31;:37;;;;;;;;28780:38;28747:71;28746:167;;;-1:-1:-1;;;;;;28841:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;28877:35:0;;;;;;:31;:35;;;;;;;;28876:36;28841:71;28724:294;;;28977:9;28948:39;;;;:28;:39;;;;;28990:12;28948:54;;28724:294;29090:4;29041:28;4475:18;;;;;;;;;;;29148;;29124:42;;;;;;;29197:35;;-1:-1:-1;29221:11:0;;;;;;;29197:35;:61;;;;-1:-1:-1;29250:8:0;;-1:-1:-1;;;29250:8:0;;;;29249:9;29197:61;:110;;;;-1:-1:-1;;;;;;29276:31:0;;;;;;:25;:31;;;;;;;;29275:32;29197:110;:153;;;;-1:-1:-1;;;;;;29325:25:0;;;;;;:19;:25;;;;;;;;29324:26;29197:153;:194;;;;-1:-1:-1;;;;;;29368:23:0;;;;;;:19;:23;;;;;;;;29367:24;29197:194;29179:326;;;29418:8;:15;;-1:-1:-1;;;;29418:15:0;-1:-1:-1;;;29418:15:0;;;29450:10;:8;:10::i;:::-;29477:8;:16;;-1:-1:-1;;;;29477:16:0;;;29179:326;29533:8;;-1:-1:-1;;;;;29643:25:0;;29517:12;29643:25;;;:19;:25;;;;;;29533:8;-1:-1:-1;;;29533:8:0;;;;;29532:9;;29643:25;;:52;;-1:-1:-1;;;;;;29672:23:0;;;;;;:19;:23;;;;;;;;29643:52;29639:100;;;-1:-1:-1;29722:5:0;29639:100;29751:12;29856:7;29852:949;;;-1:-1:-1;;;;;29908:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29957:1;29941:13;;:17;29908:50;29904:748;;;29986:34;30016:3;29986:25;29997:13;;29986:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29979:41;;30089:13;;30069:16;;30062:4;:23;;;;:::i;:::-;30061:41;;;;:::i;:::-;30039:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30159:13:0;;30145:10;;30138:17;;:4;:17;:::i;:::-;30137:35;;;;:::i;:::-;30121:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;30231:13:0;;30216:11;;30209:18;;:4;:18;:::i;:::-;30208:36;;;;:::i;:::-;30191:13;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;29904:748:0;;-1:-1:-1;29904:748:0;;-1:-1:-1;;;;;30306:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30356:1;30341:12;;:16;30306:51;30302:350;;;30385:33;30414:3;30385:24;30396:12;;30385:6;:10;;:24;;;;:::i;:33::-;30378:40;;30486:12;;30467:15;;30460:4;:22;;;;:::i;:::-;30459:39;;;;:::i;:::-;30437:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30554:12:0;;30541:9;;30534:16;;:4;:16;:::i;:::-;30533:33;;;;:::i;:::-;30517:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30624:12:0;;30610:10;;30603:17;;:4;:17;:::i;:::-;30602:34;;;;:::i;:::-;30585:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;30302:350:0;30672:8;;30668:91;;30701:42;30717:4;30731;30738;30701:15;:42::i;:::-;30775:14;30785:4;30775:14;;:::i;:::-;;;29852:949;30813:33;30829:4;30835:2;30839:6;30813:15;:33::i;:::-;25968:4886;;;;25855:4999;;;:::o;2379:191::-;2472:6;;;-1:-1:-1;;;;;2489:17:0;;;-1:-1:-1;;;;;;2489:17:0;;;;;;;2522:40;;2472:6;;;2489:17;2472:6;;2522:40;;2453:16;;2522:40;2442:128;2379:191;:::o;24955:188::-;-1:-1:-1;;;;;25038:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;25038:39:0;;;;;;;;;;25095:40;;25038:39;;:31;25095:40;;;24955:188;;:::o;6172:733::-;-1:-1:-1;;;;;6312:20:0;;6304:70;;;;-1:-1:-1;;;6304:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6393:23:0;;6385:71;;;;-1:-1:-1;;;6385:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6553:17:0;;6529:21;6553:17;;;;;;;;;;;6589:23;;;;6581:74;;;;-1:-1:-1;;;6581:74:0;;15536:2:1;6581:74:0;;;15518:21:1;15575:2;15555:18;;;15548:30;15614:34;15594:18;;;15587:62;-1:-1:-1;;;15665:18:1;;;15658:36;15711:19;;6581:74:0;15334:402:1;6581:74:0;-1:-1:-1;;;;;6691:17:0;;;:9;:17;;;;;;;;;;;6711:22;;;6691:42;;6755:20;;;;;;;;:30;;6727:6;;6691:9;6755:30;;6727:6;;6755:30;:::i;:::-;;;;;;;;6820:9;-1:-1:-1;;;;;6803:35:0;6812:6;-1:-1:-1;;;;;6803:35:0;;6831:6;6803:35;;;;2198:25:1;;2186:2;2171:18;;2052:177;6803:35:0;;;;;;;;6851:46;23102:350;32619:1650;32702:4;32658:23;4475:18;;;;;;;;;;;32658:50;;32719:25;32810:12;;32781:13;;32747:18;;:47;;;;:::i;:::-;:75;;;;:::i;:::-;32719:103;-1:-1:-1;32833:12:0;32862:20;;;:46;;-1:-1:-1;32886:22:0;;32862:46;32858:85;;;32925:7;;;32619:1650::o;32858:85::-;32977:18;;:23;;32998:2;32977:23;:::i;:::-;32959:15;:41;32955:115;;;33035:18;;:23;;33056:2;33035:23;:::i;:::-;33017:41;;32955:115;33131:23;33218:1;33198:17;33176:18;;33158:15;:36;;;;:::i;:::-;33157:58;;;;:::i;:::-;:62;;;;:::i;:::-;33131:88;-1:-1:-1;33230:26:0;33259:36;:15;33131:88;33259:19;:36::i;:::-;33230:65;-1:-1:-1;33336:21:0;33370:36;33230:65;33370:16;:36::i;:::-;33419:18;33440:44;:21;33466:17;33440:25;:44::i;:::-;33419:65;;33497:18;33518:52;33552:17;33518:29;33533:13;;33518:10;:14;;:29;;;;:::i;:52::-;33497:73;;33581:17;33601:51;33634:17;33601:28;33616:12;;33601:10;:14;;:28;;;;:::i;:51::-;33581:71;-1:-1:-1;33665:23:0;33581:71;33691:23;33704:10;33691;:23;:::i;:::-;:35;;;;:::i;:::-;33760:1;33739:18;:22;;;33772:13;:17;;;33800:12;:16;;;33851:9;;33843:45;;33665:61;;-1:-1:-1;;;;;;33851:9:0;;33874;;33843:45;33760:1;33843:45;33874:9;33851;33843:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33829:59:0;;-1:-1:-1;;33905:19:0;;;;;:42;;;33946:1;33928:15;:19;33905:42;33901:278;;;33964:46;33977:15;33994;33964:12;:46::i;:::-;34134:18;;34030:137;;;15943:25:1;;;15999:2;15984:18;;15977:34;;;16027:18;;;16020:34;;;;34030:137:0;;;;;;15931:2:1;34030:137:0;;;33901:278;34211:10;;34203:58;;-1:-1:-1;;;;;34211:10:0;;;;34235:21;;34203:58;;;;34235:21;34211:10;34203:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;32619:1650:0:o;9925:98::-;9983:7;10010:5;10014:1;10010;:5;:::i;:::-;10003:12;9925:98;-1:-1:-1;;;9925:98:0:o;10031:::-;10089:7;10116:5;10120:1;10116;:5;:::i;9819:98::-;9877:7;9904:5;9908:1;9904;:5;:::i;30862:589::-;31012:16;;;31026:1;31012:16;;;;;;;;30988:21;;31012:16;;;;;;;;;;-1:-1:-1;31012:16:0;30988:40;;31057:4;31039;31044:1;31039:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31039:23:0;;;-1:-1:-1;;;;;31039:23:0;;;;;31083:15;-1:-1:-1;;;;;31083:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31073:4;31078:1;31073:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31073:32:0;;;-1:-1:-1;;;;;31073:32:0;;;;;31118:62;31135:4;31150:15;31168:11;31118:8;:62::i;:::-;31219:224;;-1:-1:-1;;;31219:224:0;;-1:-1:-1;;;;;31219:15:0;:66;;;;:224;;31300:11;;31326:1;;31370:4;;31397;;31417:15;;31219:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32096:515;32244:62;32261:4;32276:15;32294:11;32244:8;:62::i;:::-;32553:9;;32349:254;;-1:-1:-1;;;32349:254:0;;32421:4;32349:254;;;17779:34:1;17829:18;;;17822:34;;;32467:1:0;17872:18:1;;;17865:34;;;17915:18;;;17908:34;-1:-1:-1;;;;;32553:9:0;;;17958:19:1;;;17951:44;32577:15:0;18011:19:1;;;18004:35;32349:15:0;:31;;;;;;32388:9;;17713:19:1;;32349:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32096:515;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1702:160::-;1767:20;;1823:13;;1816:21;1806:32;;1796:60;;1852:1;1849;1842:12;1867:180;1923:6;1976:2;1964:9;1955:7;1951:23;1947:32;1944:52;;;1992:1;1989;1982:12;1944:52;2015:26;2031:9;2015:26;:::i;2234:180::-;2293:6;2346:2;2334:9;2325:7;2321:23;2317:32;2314:52;;;2362:1;2359;2352:12;2314:52;-1:-1:-1;2385:23:1;;2234:180;-1:-1:-1;2234:180:1:o;2419:456::-;2496:6;2504;2512;2565:2;2553:9;2544:7;2540:23;2536:32;2533:52;;;2581:1;2578;2571:12;2533:52;2620:9;2607:23;2639:31;2664:5;2639:31;:::i;:::-;2689:5;-1:-1:-1;2746:2:1;2731:18;;2718:32;2759:33;2718:32;2759:33;:::i;:::-;2419:456;;2811:7;;-1:-1:-1;;;2865:2:1;2850:18;;;;2837:32;;2419:456::o;3277:315::-;3342:6;3350;3403:2;3391:9;3382:7;3378:23;3374:32;3371:52;;;3419:1;3416;3409:12;3371:52;3458:9;3445:23;3477:31;3502:5;3477:31;:::i;:::-;3527:5;-1:-1:-1;3551:35:1;3582:2;3567:18;;3551:35;:::i;:::-;3541:45;;3277:315;;;;;:::o;3597:316::-;3674:6;3682;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;-1:-1:-1;;3782:23:1;;;3852:2;3837:18;;3824:32;;-1:-1:-1;3903:2:1;3888:18;;;3875:32;;3597:316;-1:-1:-1;3597:316:1:o;3918:689::-;4010:6;4018;4026;4079:2;4067:9;4058:7;4054:23;4050:32;4047:52;;;4095:1;4092;4085:12;4047:52;4135:9;4122:23;4164:18;4205:2;4197:6;4194:14;4191:34;;;4221:1;4218;4211:12;4191:34;4259:6;4248:9;4244:22;4234:32;;4304:7;4297:4;4293:2;4289:13;4285:27;4275:55;;4326:1;4323;4316:12;4275:55;4366:2;4353:16;4392:2;4384:6;4381:14;4378:34;;;4408:1;4405;4398:12;4378:34;4463:7;4456:4;4446:6;4443:1;4439:14;4435:2;4431:23;4427:34;4424:47;4421:67;;;4484:1;4481;4474:12;4421:67;4515:4;4507:13;;;;-1:-1:-1;4539:6:1;-1:-1:-1;4564:37:1;;4580:20;;;-1:-1:-1;4564:37:1;:::i;:::-;4554:47;;3918:689;;;;;:::o;4612:388::-;4680:6;4688;4741:2;4729:9;4720:7;4716:23;4712:32;4709:52;;;4757:1;4754;4747:12;4709:52;4796:9;4783:23;4815:31;4840:5;4815:31;:::i;:::-;4865:5;-1:-1:-1;4922:2:1;4907:18;;4894:32;4935:33;4894:32;4935:33;:::i;:::-;4987:7;4977:17;;;4612:388;;;;;:::o;5005:380::-;5084:1;5080:12;;;;5127;;;5148:61;;5202:4;5194:6;5190:17;5180:27;;5148:61;5255:2;5247:6;5244:14;5224:18;5221:38;5218:161;;5301:10;5296:3;5292:20;5289:1;5282:31;5336:4;5333:1;5326:15;5364:4;5361:1;5354:15;5218:161;;5005:380;;;:::o;5732:356::-;5934:2;5916:21;;;5953:18;;;5946:30;6012:34;6007:2;5992:18;;5985:62;6079:2;6064:18;;5732:356::o;6303:127::-;6364:10;6359:3;6355:20;6352:1;6345:31;6395:4;6392:1;6385:15;6419:4;6416:1;6409:15;6435:168;6508:9;;;6539;;6556:15;;;6550:22;;6536:37;6526:71;;6577:18;;:::i;6608:217::-;6648:1;6674;6664:132;;6718:10;6713:3;6709:20;6706:1;6699:31;6753:4;6750:1;6743:15;6781:4;6778:1;6771:15;6664:132;-1:-1:-1;6810:9:1;;6608:217::o;7655:125::-;7720:9;;;7741:10;;;7738:36;;;7754:18;;:::i;9292:127::-;9353:10;9348:3;9344:20;9341:1;9334:31;9384:4;9381:1;9374:15;9408:4;9405:1;9398:15;9424:135;9463:3;9484:17;;;9481:43;;9504:18;;:::i;:::-;-1:-1:-1;9551:1:1;9540:13;;9424:135::o;12027:401::-;12229:2;12211:21;;;12268:2;12248:18;;;12241:30;12307:34;12302:2;12287:18;;12280:62;-1:-1:-1;;;12373:2:1;12358:18;;12351:35;12418:3;12403:19;;12027:401::o;12433:399::-;12635:2;12617:21;;;12674:2;12654:18;;;12647:30;12713:34;12708:2;12693:18;;12686:62;-1:-1:-1;;;12779:2:1;12764:18;;12757:33;12822:3;12807:19;;12433:399::o;14724:128::-;14791:9;;;14812:11;;;14809:37;;;14826:18;;:::i;16197:251::-;16267:6;16320:2;16308:9;16299:7;16295:23;16291:32;16288:52;;;16336:1;16333;16326:12;16288:52;16368:9;16362:16;16387:31;16412:5;16387:31;:::i;16453:980::-;16715:4;16763:3;16752:9;16748:19;16794:6;16783:9;16776:25;16820:2;16858:6;16853:2;16842:9;16838:18;16831:34;16901:3;16896:2;16885:9;16881:18;16874:31;16925:6;16960;16954:13;16991:6;16983;16976:22;17029:3;17018:9;17014:19;17007:26;;17068:2;17060:6;17056:15;17042:29;;17089:1;17099:195;17113:6;17110:1;17107:13;17099:195;;;17178:13;;-1:-1:-1;;;;;17174:39:1;17162:52;;17269:15;;;;17234:12;;;;17210:1;17128:9;17099:195;;;-1:-1:-1;;;;;;;17350:32:1;;;;17345:2;17330:18;;17323:60;-1:-1:-1;;;17414:3:1;17399:19;17392:35;17311:3;16453:980;-1:-1:-1;;;16453:980:1:o;18050:306::-;18138:6;18146;18154;18207:2;18195:9;18186:7;18182:23;18178:32;18175:52;;;18223:1;18220;18213:12;18175:52;18252:9;18246:16;18236:26;;18302:2;18291:9;18287:18;18281:25;18271:35;;18346:2;18335:9;18331:18;18325:25;18315:35;;18050:306;;;;;:::o
Swarm Source
ipfs://1468e3f12676c0d01e7b56bfe969d08f1e53c62bc6e68c68406e765c83ca6955
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.