ERC-20
Overview
Max Total Supply
100,000,000,000,000,000 $GENCAP
Holders
1,377
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.807896182 $GENCAPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GencoinCapital
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-02 */ /** Gencoin Capital is a community-driven token that aims to bring generational wealth for it's holders. Powered by a unique investment treasury and a turbo-charged tokenomic system, Gencoin is strategically designed to incentivize holders with token buybacks, holder giveaways and charity events. Website: https://gencoincapital.finance Telegram: https://t.me/gencoincapital Twitter: https://twitter.com/gencoincapital */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract GencoinCapital is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address payable private devWallet = payable (0xc446883641359C7b192EB7006f27dA97B8F454ac); // Main tax wallet mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isSniper; uint256 public deadBlocks = 5; uint256 public launchedAtBlock = 0; uint256 public launchedAtTime = 0; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isMaxWalletExempt; mapping (address => bool) private _isExcluded; address[] private _excluded; struct StaticMaxTax { uint256 maxLiquidity; uint256 maxReflection; uint256 maxTreasury; uint256 maxMarketing; uint256 maxTeamfee; } address DEAD = 0x000000000000000000000000000000000000dEaD; uint8 private _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1e17 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Gencoin Capital"; string private _symbol = "$GENCAP"; uint256 public _maxWalletToken = _tTotal.div(2000).mul(10); //1% of available tokens (500T) bool public maxEthTradesEnabled = true; uint256 public maxEthSell_launch = 1 * 10**18; //Max sell is 1 ETH for 24 hours. uint256 public maxEthSell = 5 * 10**18; //Regular Max sell is 5 ETH. uint256 private swapThreshold = (_tTotal * 5) / 10000; uint256 private swapAmount = (_tTotal * 25) / 10000; uint256 public _buyLiquidityFee = 2; //2% uint256 public _buyReflectionFee = 1; //1% uint256 public _buyTreasuryFee = 4; //4% uint256 public _buyMarketingFee = 4; //4% uint256 public _buyTeamFee = 2; //2% uint256 public _sellLiquidityFee = 2; //2% uint256 public _sellReflectionFee = 1; //1% uint256 public _sellTreasuryFee = 4; //4% uint256 public _sellMarketingFee = 4; //4% uint256 public _sellTeamFee = 2; //2% StaticMaxTax public staticTax = StaticMaxTax({ maxLiquidity: 2, //2% maxReflection: 1, //1% maxTreasury: 4, //4% maxMarketing: 4, //4% maxTeamfee: 2 //2% }); uint256 private liquidityFee = _buyLiquidityFee; uint256 private treasuryFee = _buyTreasuryFee; uint256 private marketingFee = _buyMarketingFee; uint256 private teamFee = _buyTeamFee; uint256 private reflectionFee=_buyReflectionFee; uint256 private totalFee = liquidityFee.add(treasuryFee).add(marketingFee).add(teamFee); uint256 private currenttotalFee = totalFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwap; address[] path; bool public tradingOpen = false; bool public zeroBuyTaxmode = false; event SwapETHForTokens( uint256 amountIn, address[] path ); event SwapTokensForETH( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isMaxWalletExempt[owner()] = true; _isMaxWalletExempt[address(this)] = true; _isMaxWalletExempt[uniswapV2Pair] = true; _isMaxWalletExempt[DEAD] = true; path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), MAX); _approve(_msgSender(), address(uniswapV2Router), MAX); emit Transfer(address(0), _msgSender(), _tTotal); } function openTrading() external onlyOwner() { require(!tradingOpen); tradingOpen = true; excludeFromReward(address(this)); excludeFromReward(uniswapV2Pair); if(tradingOpen && launchedAtBlock == 0){ launchedAtBlock = block.number; launchedAtTime = block.timestamp; } } function setZeroBuyTaxmode(bool _status) external onlyOwner() { zeroBuyTaxmode = _status; } function setNewRouter(address newRouter) external onlyOwner() { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { uniswapV2Pair = get_pair; } uniswapV2Router = _newRouter; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isSniper[to], "You are on the sniper list!"); require(!_isSniper[from], "You are on the sniper list!"); if (from != owner() && to != owner()) require(tradingOpen, "Trading not yet enabled."); //trading not open yet bool takeFee = false; if (!(_isExcludedFromFee[from] || _isExcludedFromFee[to])) { takeFee = true; } currenttotalFee=totalFee; reflectionFee=_buyReflectionFee; //max wallet holding if(!_isMaxWalletExempt[to] && from != owner() && from == uniswapV2Pair){ if(zeroBuyTaxmode){ //adjust max amount according to 0% buy tax require(amount + balanceOf(to) <= _maxWalletToken , "Total holding is limited"); }else{ //adjust max amount according to tax uint256 baseactualfee = _buyReflectionFee.add(_buyLiquidityFee).add(_buyTreasuryFee).add(_buyMarketingFee).add(_buyTeamFee); uint256 maxpercent = 100; baseactualfee = maxpercent.sub(baseactualfee); require(amount.mul(baseactualfee).div(100) + balanceOf(to) <= _maxWalletToken , "Total holding is limited"); } } if(tradingOpen && to == uniswapV2Pair) { //sell reflectionFee = _sellReflectionFee; if (maxEthTradesEnabled) { uint256 _ethBalance = uniswapV2Router.getAmountsOut(amount, path)[1]; if(block.timestamp <= launchedAtTime + 24 hours) { require(_ethBalance <= maxEthSell_launch); //max 1 ETH sell for 24 hours. }else{ require(_ethBalance <= maxEthSell); //max 5 ETH sell after 24 hours. } } //anti-dump structure for the first 24 hours. if(block.timestamp <= launchedAtTime + 2 hours) { currenttotalFee = 30; //30% }else if (block.timestamp <= launchedAtTime + 12 hours) { currenttotalFee = 25; //25% }else if (block.timestamp <= launchedAtTime + 24 hours) { currenttotalFee = 20; //20% }else{ currenttotalFee = _sellLiquidityFee.add(_sellTreasuryFee).add(_sellMarketingFee).add(_sellTeamFee); //12%+1%reflection } } //antisniper - first 5 blocks if(launchedAtBlock > 0 && ((launchedAtBlock + deadBlocks) >= block.number)){ _isSniper[to]=true; } //on buys only if(zeroBuyTaxmode){ if(tradingOpen && from == uniswapV2Pair) { currenttotalFee=0; } } //sell if (!inSwap && tradingOpen && to == uniswapV2Pair) { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= swapThreshold) { if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; } swapTokens(contractTokenBalance); } } _tokenTransfer(from,to,amount,takeFee); } function swapTokens(uint256 contractTokenBalance) private lockTheSwap { uint256 amountToLiquify = contractTokenBalance.mul(liquidityFee).div(totalFee).div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); swapTokensForEth(amountToSwap); uint256 amountETH = address(this).balance; uint256 totalETHFee = totalFee.sub(liquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2); uint256 totalTAXfee = treasuryFee.add(marketingFee).add(teamFee); uint256 amountETHdev = amountETH.mul(totalTAXfee).div(totalETHFee); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(amountETHdev,devWallet); } if (amountToLiquify > 0) { addLiquidity(amountToLiquify,amountETHLiquidity); } } function sendETHToFee(uint256 amount,address payable wallet) private { wallet.transfer(amount); } function swapTokensForEth(uint256 tokenAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this), tokenAmount, 0, 0, owner(), block.timestamp); } function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { uint256 _previousReflectionFee=reflectionFee; uint256 _previousTotalFee=currenttotalFee; if(!takeFee){ reflectionFee = 0; currenttotalFee = 0; } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee){ reflectionFee = _previousReflectionFee; currenttotalFee = _previousTotalFee; } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(reflectionFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(currenttotalFee).div(10**2); } function excludeMultiple(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function excludeFromFee(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isExcludedFromFee[addresses[i]] = true; } } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setWallets(address _devWallet) external onlyOwner() { devWallet = payable(_devWallet); } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function isSniper(address account) public view returns (bool) { return _isSniper[account]; } function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isSniper[addresses[i]] = status; } } function withDrawLeftoverETH(address payable recipient) public onlyOwner { recipient.transfer(address(this).balance); } function withdrawStuckTokens(IERC20 token, address to) public onlyOwner { uint256 balance = token.balanceOf(address(this)); token.transfer(to, balance); } function setMaxWalletBase2000(uint256 maxWallet) external onlyOwner() { _maxWalletToken = _tTotal.div(2000).mul(maxWallet); } function setMaxWalletExempt(address _addr) external onlyOwner { _isMaxWalletExempt[_addr] = true; } function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; swapAmount = (_tTotal * amountPercent) / amountDivisor; } function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _treasuryFee, uint256 _marketingFee, uint256 _teamFee) external onlyOwner { require(_reflectionFee <= staticTax.maxReflection && _liquidityFee <= staticTax.maxLiquidity && _marketingFee <= staticTax.maxMarketing && _teamFee <= staticTax.maxTeamfee); uint256 total_buy_fee = _reflectionFee.add(_liquidityFee).add(_treasuryFee).add(_marketingFee).add(_teamFee); require(total_buy_fee <= 13); //Max buy fee 13% _buyLiquidityFee = _liquidityFee; _buyReflectionFee = _reflectionFee; _buyTreasuryFee = _treasuryFee; _buyMarketingFee = _marketingFee; _buyTeamFee = _teamFee; reflectionFee = _reflectionFee; liquidityFee = _liquidityFee; treasuryFee = _treasuryFee; marketingFee = _marketingFee; teamFee = _teamFee; totalFee = liquidityFee.add(treasuryFee).add(marketingFee).add(teamFee); } function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _treasuryFee, uint256 _marketingFee, uint256 _teamFee) external onlyOwner { require(_reflectionFee <= staticTax.maxReflection && _liquidityFee <= staticTax.maxLiquidity && _marketingFee <= staticTax.maxMarketing && _teamFee <= staticTax.maxTeamfee); uint256 total_sell_fee = _reflectionFee.add(_liquidityFee).add(_treasuryFee).add(_marketingFee).add(_teamFee); require(total_sell_fee <= 13); //Max sell fee 13% _sellLiquidityFee = _liquidityFee; _sellReflectionFee= _reflectionFee; _sellTreasuryFee = _treasuryFee; _sellMarketingFee = _marketingFee; _sellTeamFee = _teamFee; } function setEthLimits(uint256 sellVal) external onlyOwner { require(sellVal >= 5 * 10**18); maxEthSell = sellVal * 10**18; } function setEthLimitsEnabled(bool maxEthTrades) external onlyOwner { maxEthTradesEnabled = maxEthTrades; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxEthSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthSell_launch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellVal","type":"uint256"}],"name":"setEthLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"maxEthTrades","type":"bool"}],"name":"setEthLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletBase2000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticTax","outputs":[{"internalType":"uint256","name":"maxLiquidity","type":"uint256"},{"internalType":"uint256","name":"maxReflection","type":"uint256"},{"internalType":"uint256","name":"maxTreasury","type":"uint256"},{"internalType":"uint256","name":"maxMarketing","type":"uint256"},{"internalType":"uint256","name":"maxTeamfee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"address payable","name":"recipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600380546001600160a01b03191673c446883641359c7b192eb7006f27da97b8f454ac179055600560085560006009819055600a908155600f80547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200007d91600160a01b90910460ff169062000bf3565b620000919067016345785d8a000062000cb2565b6010819055620000a49060001962000d2b565b620000b29060001962000cd4565b60115560408051808201909152600f8082526e11d95b98dbda5b8810d85c1a5d185b608a1b6020909201918252620000ed91601391620009fb565b506040805180820190915260078082526602447454e4341560cc1b60209092019182526200011e91601491620009fb565b5062000157600a620001436107d06010546200075660201b62001da71790919060201c565b620007a960201b62001de91790919060201c565b6015556016805460ff19166001179055670de0b6b3a7640000601755674563918244f40000601855601054612710906200019390600562000cb2565b6200019f919062000b93565b6019556127106010546019620001b6919062000cb2565b620001c2919062000b93565b601a556002601b8190556001601c8190556004601d819055601e819055601f839055602083815560218390556022829055602382905560248490556040805160a0810182528581528083018590529081018390526060810183905260800184905260258490556026839055602782905560288290556029849055602a849055602b829055602c829055602d849055602e929092556200028b929162000277919082908490839062001e6862000834821b17901c565b6200083460201b62001e681790919060201c565b602f8190556030556034805461ffff19169055348015620002ab57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a0155938181019391829003018186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000388919062000af9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d157600080fd5b505afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000af9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200045557600080fd5b505af11580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062000af9565b603280546001600160a01b03199081166001600160a01b0393841617909155603180549091169183169190911790556001600b6000620004d86000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252812080549092166001908117909255600c90620005316000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c909352818320805485166001908117909155603254821684528284208054861682179055600f549091168352912080549092161790556002604051908082528060200260200182016040528015620005c6578160200160208202803683370190505b508051620005dd9160339160209091019062000a8a565b503060336000815481106200060257634e487b7160e01b600052603260045260246000fd5b60009182526020918290200180546001600160a01b0319166001600160a01b03938416179055603154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156200066357600080fd5b505afa15801562000678573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069e919062000af9565b6033600181548110620006c157634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055603154620006fa9130911660001962000897565b62000714336031546001600160a01b031660001962000897565b60105460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000d6e565b6000620007a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009bf60201b60201c565b90505b92915050565b600082620007ba57506000620007a3565b6000620007c8838562000cb2565b905082620007d7858362000b93565b14620007a05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b60008062000843838562000b78565b905083811015620007a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200082b565b6001600160a01b038316620008fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200082b565b6001600160a01b0382166200095e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200082b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008183620009e35760405162461bcd60e51b81526004016200082b919062000b22565b506000620009f2848662000b93565b95945050505050565b82805462000a099062000cee565b90600052602060002090601f01602090048101928262000a2d576000855562000a78565b82601f1062000a4857805160ff191683800117855562000a78565b8280016001018555821562000a78579182015b8281111562000a7857825182559160200191906001019062000a5b565b5062000a8692915062000ae2565b5090565b82805482825590600052602060002090810192821562000a78579160200282015b8281111562000a7857825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000aab565b5b8082111562000a86576000815560010162000ae3565b60006020828403121562000b0b578081fd5b81516001600160a01b0381168114620007a0578182fd5b6000602080835283518082850152825b8181101562000b505785810183015185820160400152820162000b32565b8181111562000b625783604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000b8e5762000b8e62000d42565b500190565b60008262000ba55762000ba562000d58565b500490565b600181815b8085111562000beb57816000190482111562000bcf5762000bcf62000d42565b8085161562000bdd57918102915b93841c939080029062000baf565b509250929050565b6000620007a060ff84168360008262000c0f57506001620007a3565b8162000c1e57506000620007a3565b816001811462000c37576002811462000c425762000c62565b6001915050620007a3565b60ff84111562000c565762000c5662000d42565b50506001821b620007a3565b5060208310610133831016604e8410600b841016171562000c87575081810a620007a3565b62000c93838362000baa565b806000190482111562000caa5762000caa62000d42565b029392505050565b600081600019048311821515161562000ccf5762000ccf62000d42565b500290565b60008282101562000ce95762000ce962000d42565b500390565b600181811c9082168062000d0357607f821691505b6020821081141562000d2557634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000d3d5762000d3d62000d58565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61382e8062000d7e6000396000f3fe60806040526004361061039b5760003560e01c80637598f8bc116101dc578063c860795211610102578063eafb5a3c116100a0578063fabb0b4f1161006f578063fabb0b4f14610aa3578063fb78680d14610ab9578063fe71c03f14610ad9578063ffb54a9914610af957600080fd5b8063eafb5a3c14610a23578063eb50e70e14610a43578063f259c57b14610a63578063f2fde38b14610a8357600080fd5b8063d628df9c116100dc578063d628df9c14610991578063dc44b6a0146109a7578063dd62ed3e146109bd578063ea2f0b3714610a0357600080fd5b8063c860795214610950578063c9567bf914610966578063cab034711461097b57600080fd5b80639baf6a3b1161017a578063a9059cbb11610149578063a9059cbb146108ea578063c011f2031461090a578063c469b6dd14610924578063c5d241891461093a57600080fd5b80639baf6a3b1461087e578063a03b3b4d14610894578063a3b84b6b146108aa578063a457c2d7146108ca57600080fd5b806388f82020116101b657806388f82020146107fc5780638da5cb5b146108355780638de890bd1461085357806395d89b411461086957600080fd5b80637598f8bc146107ba57806378109e54146107d057806388790a68146107e657600080fd5b8063401aa5c0116102c15780635d54c0af1161025f578063715018a61161022e578063715018a61461074f57806371b9189c14610764578063743942b6146107845780637580a014146107a457600080fd5b80635d54c0af146106cf5780636695fffe146106ef578063684c81991461070f57806370a082311461072f57600080fd5b80634b01547f1161029b5780634b01547f1461062057806352390c02146106405780635c4174c4146106605780635c6d4835146106af57600080fd5b8063401aa5c0146105ca5780634549b039146105e057806349bd5a5e1461060057600080fd5b806324fcf8cf116103395780632dd5efe7116103085780632dd5efe71461053e578063313ce5671461055e5780633685d4191461058a57806339509351146105aa57600080fd5b806324fcf8cf146104c757806325b86edf146104dd5780632691bc80146104ff5780632d8381191461051e57600080fd5b806313114a9d1161037557806313114a9d1461043b5780631694505e1461045a57806318160ddd1461049257806323b872dd146104a757600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630f3a325f1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b13565b6040516103c991906135b0565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046132b4565b610ba5565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004613204565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044757600080fd5b506012545b6040519081526020016103c9565b34801561046657600080fd5b5060315461047a906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049e57600080fd5b5060105461044c565b3480156104b357600080fd5b506103f26104c2366004613274565b610bbc565b3480156104d357600080fd5b5061044c60225481565b3480156104e957600080fd5b506104fd6104f836600461346c565b610c25565b005b34801561050b57600080fd5b506034546103f290610100900460ff1681565b34801561052a57600080fd5b5061044c61053936600461347e565b610d5e565b34801561054a57600080fd5b506104fd610559366004613204565b610de2565b34801561056a57600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016103c9565b34801561059657600080fd5b506104fd6105a5366004613204565b610e30565b3480156105b657600080fd5b506103f26105c53660046132b4565b61101f565b3480156105d657600080fd5b5061044c601c5481565b3480156105ec57600080fd5b5061044c6105fb3660046134ae565b611055565b34801561060c57600080fd5b5060325461047a906001600160a01b031681565b34801561062c57600080fd5b506104fd61063b366004613434565b6110e2565b34801561064c57600080fd5b506104fd61065b366004613204565b611126565b34801561066c57600080fd5b50602554602654602754602854602954610687949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c9565b3480156106bb57600080fd5b506104fd6106ca366004613530565b611210565b3480156106db57600080fd5b506104fd6106ea36600461331f565b6112b8565b3480156106fb57600080fd5b506104fd61070a36600461347e565b61135f565b34801561071b57600080fd5b506104fd61072a366004613434565b6113b0565b34801561073b57600080fd5b5061044c61074a366004613204565b6113ed565b34801561075b57600080fd5b506104fd61144c565b34801561077057600080fd5b506104fd61077f3660046132df565b6114c0565b34801561079057600080fd5b506104fd61079f366004613204565b61156d565b3480156107b057600080fd5b5061044c60175481565b3480156107c657600080fd5b5061044c60215481565b3480156107dc57600080fd5b5061044c60155481565b3480156107f257600080fd5b5061044c60205481565b34801561080857600080fd5b506103f2610817366004613204565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b031661047a565b34801561085f57600080fd5b5061044c60095481565b34801561087557600080fd5b506103bc6115cc565b34801561088a57600080fd5b5061044c60185481565b3480156108a057600080fd5b5061044c600a5481565b3480156108b657600080fd5b506104fd6108c5366004613530565b6115db565b3480156108d657600080fd5b506103f26108e53660046132b4565b6116af565b3480156108f657600080fd5b506103f26109053660046132b4565b6116fe565b34801561091657600080fd5b506016546103f29060ff1681565b34801561093057600080fd5b5061044c601f5481565b34801561094657600080fd5b5061044c601e5481565b34801561095c57600080fd5b5061044c60235481565b34801561097257600080fd5b506104fd61170b565b34801561098757600080fd5b5061044c60245481565b34801561099d57600080fd5b5061044c601d5481565b3480156109b357600080fd5b5061044c601b5481565b3480156109c957600080fd5b5061044c6109d836600461323c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0f57600080fd5b506104fd610a1e366004613204565b611792565b348015610a2f57600080fd5b506104fd610a3e366004613204565b6117dd565b348015610a4f57600080fd5b506104fd610a5e366004613204565b611b63565b348015610a6f57600080fd5b506104fd610a7e366004613204565b611baf565b348015610a8f57600080fd5b506104fd610a9e366004613204565b611bfd565b348015610aaf57600080fd5b5061044c60085481565b348015610ac557600080fd5b506104fd610ad43660046134ff565b611ce7565b348015610ae557600080fd5b506104fd610af436600461347e565b611d50565b348015610b0557600080fd5b506034546103f29060ff1681565b606060138054610b2290613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90613703565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb2338484611ec7565b5060015b92915050565b6000610bc9848484611feb565b610c1b8433610c16856040518060600160405280602881526020016137ac602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906126d7565b611ec7565b5060019392505050565b6000546001600160a01b03163314610c585760405162461bcd60e51b8152600401610c4f90613603565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613496565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d589190613450565b50505050565b6000601154821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c4f565b6000610dcf612711565b9050610ddb8382611da7565b9392505050565b6000546001600160a01b03163314610e0c5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b0381166000908152600d602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c4f565b60005b600e5481101561101b57816001600160a01b0316600e8281548110610efa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561100957600e8054610f25906001906136ec565b81548110610f4357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b039092169183908110610f7d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480610fe357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110138161373e565b915050610ec5565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610bb2918590610c169086611e68565b60006010548311156110a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c4f565b816110c85760006110b984612734565b50939550610bb6945050505050565b60006110d384612734565b50929550610bb6945050505050565b6000546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610c4f90613603565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111505760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116600090815260046020526040902054156111aa576001600160a01b03811660009081526004602052604090205461119090610d5e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461123a5760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061124e57506025548411155b801561125c57506028548211155b801561126a57506029548111155b61127357600080fd5b600061128d82611287858188818c8c611e68565b90611e68565b9050600d81111561129d57600080fd5b50602093909355602193909355602255602391909155602455565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610c4f90613603565b60005b82811015610d5857816007600086868581811061131257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113279190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113588161373e565b90506112e5565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610c4f90613603565b6113aa816113a46107d0601054611da790919063ffffffff16565b90611de9565b60155550565b6000546001600160a01b031633146113da5760405162461bcd60e51b8152600401610c4f90613603565b6016805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff161561142a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610bb690610d5e565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610c4f90613603565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610c4f90613603565b60005b81811015611568576001600b600085858581811061151b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115309190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115618161373e565b90506114ed565b505050565b6000546001600160a01b031633146115975760405162461bcd60e51b8152600401610c4f90613603565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561101b573d6000803e3d6000fd5b606060148054610b2290613703565b6000546001600160a01b031633146116055760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061161957506025548411155b801561162757506028548211155b801561163557506029548111155b61163e57600080fd5b600061165282611287858188818c8c611e68565b9050600d81111561166257600080fd5b601b859055601c869055601d849055601e839055601f829055602e869055602a859055602b849055602c839055602d8290556116a48261128785818989611e68565b602f55505050505050565b6000610bb23384610c16856040518060600160405280602581526020016137d4602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906126d7565b6000610bb2338484611feb565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c4f90613603565b60345460ff161561174557600080fd5b6034805460ff1916600117905561175b30611126565b603254611770906001600160a01b0316611126565b60345460ff1680156117825750600954155b15611790574360095542600a555b565b6000546001600160a01b031633146117bc5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146118075760405162461bcd60e51b8152600401610c4f90613603565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190613220565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c757600080fd5b505afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561194557600080fd5b505afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613220565b90506001600160a01b038116611b2357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c657600080fd5b505afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190613220565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4657600080fd5b505afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613220565b603280546001600160a01b0319166001600160a01b0392909216919091179055611b3f565b603280546001600160a01b0319166001600160a01b0383161790555b50603180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611b8d5760405162461bcd60e51b8152600401610c4f90613603565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611c275760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116611c8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d115760405162461bcd60e51b8152600401610c4f90613603565b8284601054611d2091906136cd565b611d2a91906136ad565b6019556010548190611d3d9084906136cd565b611d4791906136ad565b601a5550505050565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610c4f90613603565b674563918244f40000811015611d8f57600080fd5b611da181670de0b6b3a76400006136cd565b60185550565b6000610ddb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612783565b600082611df857506000610bb6565b6000611e0483856136cd565b905082611e1185836136ad565b14610ddb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c4f565b600080611e758385613695565b905083811015610ddb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c4f565b6001600160a01b038316611f295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4f565b6001600160a01b038216611f8a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4f565b6001600160a01b0382166120b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4f565b600081116121135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c4f565b6001600160a01b03821660009081526007602052604090205460ff161561217c5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6001600160a01b03831660009081526007602052604090205460ff16156121e55760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6000546001600160a01b0384811691161480159061221157506000546001600160a01b03838116911614155b156122685760345460ff166122685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c4f565b6001600160a01b0383166000908152600b602052604081205460ff16806122a757506001600160a01b0383166000908152600b602052604090205460ff165b6122af575060015b602f54603055601c54602e556001600160a01b0383166000908152600c602052604090205460ff161580156122f257506000546001600160a01b03858116911614155b801561230b57506032546001600160a01b038581169116145b1561243657603454610100900460ff16156123845760155461232c846113ed565b6123369084613695565b111561237f5760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b612436565b60006123af601f54611287601e54611287601d54611287601b54601c54611e6890919063ffffffff16565b905060646123bd81836127b1565b91506015546123cb866113ed565b6123e060646123da8887611de9565b90611da7565b6123ea9190613695565b11156124335760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b50505b60345460ff16801561245557506032546001600160a01b038481169116145b156125de57602154602e5560165460ff16156125595760315460405163d06ca61f60e01b81526000916001600160a01b03169063d06ca61f9061249f908690603390600401613638565b60006040518083038186803b1580156124b757600080fd5b505afa1580156124cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f39190810190613374565b60018151811061251357634e487b7160e01b600052603260045260246000fd5b60200260200101519050600a546201518061252e9190613695565b42116125485760175481111561254357600080fd5b612557565b60185481111561255757600080fd5b505b600a5461256890611c20613695565b421161257857601e6030556125de565b600a546125879061a8c0613695565b42116125975760196030556125de565b600a546125a79062015180613695565b42116125b75760146030556125de565b6125da602454611287602354611287602254602054611e6890919063ffffffff16565b6030555b60006009541180156125ff5750436008546009546125fc9190613695565b10155b15612628576001600160a01b0383166000908152600760205260409020805460ff191660011790555b603454610100900460ff16156126625760345460ff16801561265757506032546001600160a01b038581169116145b156126625760006030555b603254600160a01b900460ff1615801561267e575060345460ff165b801561269757506032546001600160a01b038481169116145b156126cb5760006126a7306113ed565b905060195481106126c957601a5481106126c05750601a545b6126c9816127f3565b505b610d58848484846128f9565b600081848411156126fb5760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ec565b95945050505050565b600080600061271e612a29565b909250905061272d8282611da7565b9250505090565b600080600080600080600080600061274b8a612be3565b92509250925060008060006127698d8686612764612711565b612c25565b919f909e50909c50959a5093985091965092945050505050565b600081836127a45760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ad565b6000610ddb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126d7565b6032805460ff60a01b1916600160a01b179055602f54602a54600091612823916002916123da9182908790611de9565b9050600061283183836127b1565b905061283c81612c75565b602a54479060009061285c90612853906002611da7565b602f54906127b1565b9050600061287e60026123da846123da602a5488611de990919063ffffffff16565b9050600061289f602d54611287602c54602b54611e6890919063ffffffff16565b905060006128b1846123da8785611de9565b90504780156128d1576003546128d19083906001600160a01b0316612d36565b87156128e1576128e18885612d6c565b50506032805460ff60a01b1916905550505050505050565b602e546030548261290f576000602e8190556030555b6001600160a01b0386166000908152600d602052604090205460ff16801561295057506001600160a01b0385166000908152600d602052604090205460ff16155b1561296557612960868686612e50565b612a11565b6001600160a01b0386166000908152600d602052604090205460ff161580156129a657506001600160a01b0385166000908152600d602052604090205460ff165b156129b657612960868686612f76565b6001600160a01b0386166000908152600d602052604090205460ff1680156129f657506001600160a01b0385166000908152600d602052604090205460ff165b15612a065761296086868661301f565b612a11868686613092565b82612a2157602e82905560308190555b505050505050565b6011546010546000918291825b600e54811015612bb3578260046000600e8481548110612a6657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612adf57508160056000600e8481548110612ab857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612af557601154601054945094505050509091565b612b4960046000600e8481548110612b1d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127b1565b9250612b9f60056000600e8481548110612b7357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127b1565b915080612bab8161373e565b915050612a36565b50601054601154612bc391611da7565b821015612bda576011546010549350935050509091565b90939092509050565b600080600080612bf2856130d6565b90506000612bff866130f2565b90506000612c1782612c1189866127b1565b906127b1565b979296509094509092505050565b6000808080612c348886611de9565b90506000612c428887611de9565b90506000612c508888611de9565b90506000612c6282612c1186866127b1565b939b939a50919850919650505050505050565b603154612c8d9030906001600160a01b031683611ec7565b60315460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc790849060009060339030904290600401613659565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7816033604051612d2b929190613638565b60405180910390a150565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611568573d6000803e3d6000fd5b603154612d849030906001600160a01b031684611ec7565b6031546001600160a01b031663f305d719823085600080612dad6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4991906134d2565b5050505050565b600080600080600080612e6287612734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9490886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ec390876127b1565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612ef29086611e68565b6001600160a01b038916600090815260046020526040902055612f148161310e565b612f1e8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6391815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8887612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fba90876127b1565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612ff09084611e68565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612ef29086611e68565b60008060008060008061303187612734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061306390886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612fba90876127b1565b6000806000806000806130a487612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ec390876127b1565b6000610bb660646123da602e5485611de990919063ffffffff16565b6000610bb660646123da60305485611de990919063ffffffff16565b6000613118612711565b905060006131268383611de9565b306000908152600460205260409020549091506131439082611e68565b30600090815260046020908152604080832093909355600d9052205460ff161561156857306000908152600560205260409020546131819084611e68565b30600090815260056020526040902055505050565b6011546131a390836127b1565b6011556012546131b39082611e68565b6012555050565b60008083601f8401126131cb578182fd5b50813567ffffffffffffffff8111156131e2578182fd5b6020830191508360208260051b85010111156131fd57600080fd5b9250929050565b600060208284031215613215578081fd5b8135610ddb81613785565b600060208284031215613231578081fd5b8151610ddb81613785565b6000806040838503121561324e578081fd5b823561325981613785565b9150602083013561326981613785565b809150509250929050565b600080600060608486031215613288578081fd5b833561329381613785565b925060208401356132a381613785565b929592945050506040919091013590565b600080604083850312156132c6578182fd5b82356132d181613785565b946020939093013593505050565b600080602083850312156132f1578182fd5b823567ffffffffffffffff811115613307578283fd5b613313858286016131ba565b90969095509350505050565b600080600060408486031215613333578283fd5b833567ffffffffffffffff811115613349578384fd5b613355868287016131ba565b90945092505060208401356133698161379d565b809150509250925092565b60006020808385031215613386578182fd5b825167ffffffffffffffff8082111561339d578384fd5b818501915085601f8301126133b0578384fd5b8151818111156133c2576133c261376f565b8060051b604051601f19603f830116810181811085821117156133e7576133e761376f565b604052828152858101935084860182860187018a1015613405578788fd5b8795505b83861015613427578051855260019590950194938601938601613409565b5098975050505050505050565b600060208284031215613445578081fd5b8135610ddb8161379d565b600060208284031215613461578081fd5b8151610ddb8161379d565b6000806040838503121561324e578182fd5b60006020828403121561348f578081fd5b5035919050565b6000602082840312156134a7578081fd5b5051919050565b600080604083850312156134c0578182fd5b8235915060208301356132698161379d565b6000806000606084860312156134e6578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613514578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613547578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815480845260208085019450838352808320835b838110156135a55781546001600160a01b031687529582019560019182019101613580565b509495945050505050565b6000602080835283518082850152825b818110156135dc578581018301518582016040015282016135c0565b818111156135ed5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613651604083018461356a565b949350505050565b85815284602082015260a06040820152600061367860a083018661356a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136a8576136a8613759565b500190565b6000826136c857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136e7576136e7613759565b500290565b6000828210156136fe576136fe613759565b500390565b600181811c9082168061371757607f821691505b6020821081141561373857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561375257613752613759565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461379a57600080fd5b50565b801515811461379a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208707c22a952c21e3b91b386426c41568c2c065780ec9d298ac8280a5b6103b5a64736f6c63430008040033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80637598f8bc116101dc578063c860795211610102578063eafb5a3c116100a0578063fabb0b4f1161006f578063fabb0b4f14610aa3578063fb78680d14610ab9578063fe71c03f14610ad9578063ffb54a9914610af957600080fd5b8063eafb5a3c14610a23578063eb50e70e14610a43578063f259c57b14610a63578063f2fde38b14610a8357600080fd5b8063d628df9c116100dc578063d628df9c14610991578063dc44b6a0146109a7578063dd62ed3e146109bd578063ea2f0b3714610a0357600080fd5b8063c860795214610950578063c9567bf914610966578063cab034711461097b57600080fd5b80639baf6a3b1161017a578063a9059cbb11610149578063a9059cbb146108ea578063c011f2031461090a578063c469b6dd14610924578063c5d241891461093a57600080fd5b80639baf6a3b1461087e578063a03b3b4d14610894578063a3b84b6b146108aa578063a457c2d7146108ca57600080fd5b806388f82020116101b657806388f82020146107fc5780638da5cb5b146108355780638de890bd1461085357806395d89b411461086957600080fd5b80637598f8bc146107ba57806378109e54146107d057806388790a68146107e657600080fd5b8063401aa5c0116102c15780635d54c0af1161025f578063715018a61161022e578063715018a61461074f57806371b9189c14610764578063743942b6146107845780637580a014146107a457600080fd5b80635d54c0af146106cf5780636695fffe146106ef578063684c81991461070f57806370a082311461072f57600080fd5b80634b01547f1161029b5780634b01547f1461062057806352390c02146106405780635c4174c4146106605780635c6d4835146106af57600080fd5b8063401aa5c0146105ca5780634549b039146105e057806349bd5a5e1461060057600080fd5b806324fcf8cf116103395780632dd5efe7116103085780632dd5efe71461053e578063313ce5671461055e5780633685d4191461058a57806339509351146105aa57600080fd5b806324fcf8cf146104c757806325b86edf146104dd5780632691bc80146104ff5780632d8381191461051e57600080fd5b806313114a9d1161037557806313114a9d1461043b5780631694505e1461045a57806318160ddd1461049257806323b872dd146104a757600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630f3a325f1461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b13565b6040516103c991906135b0565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046132b4565b610ba5565b60405190151581526020016103c9565b34801561040e57600080fd5b506103f261041d366004613204565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561044757600080fd5b506012545b6040519081526020016103c9565b34801561046657600080fd5b5060315461047a906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561049e57600080fd5b5060105461044c565b3480156104b357600080fd5b506103f26104c2366004613274565b610bbc565b3480156104d357600080fd5b5061044c60225481565b3480156104e957600080fd5b506104fd6104f836600461346c565b610c25565b005b34801561050b57600080fd5b506034546103f290610100900460ff1681565b34801561052a57600080fd5b5061044c61053936600461347e565b610d5e565b34801561054a57600080fd5b506104fd610559366004613204565b610de2565b34801561056a57600080fd5b50600f54600160a01b900460ff1660405160ff90911681526020016103c9565b34801561059657600080fd5b506104fd6105a5366004613204565b610e30565b3480156105b657600080fd5b506103f26105c53660046132b4565b61101f565b3480156105d657600080fd5b5061044c601c5481565b3480156105ec57600080fd5b5061044c6105fb3660046134ae565b611055565b34801561060c57600080fd5b5060325461047a906001600160a01b031681565b34801561062c57600080fd5b506104fd61063b366004613434565b6110e2565b34801561064c57600080fd5b506104fd61065b366004613204565b611126565b34801561066c57600080fd5b50602554602654602754602854602954610687949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c9565b3480156106bb57600080fd5b506104fd6106ca366004613530565b611210565b3480156106db57600080fd5b506104fd6106ea36600461331f565b6112b8565b3480156106fb57600080fd5b506104fd61070a36600461347e565b61135f565b34801561071b57600080fd5b506104fd61072a366004613434565b6113b0565b34801561073b57600080fd5b5061044c61074a366004613204565b6113ed565b34801561075b57600080fd5b506104fd61144c565b34801561077057600080fd5b506104fd61077f3660046132df565b6114c0565b34801561079057600080fd5b506104fd61079f366004613204565b61156d565b3480156107b057600080fd5b5061044c60175481565b3480156107c657600080fd5b5061044c60215481565b3480156107dc57600080fd5b5061044c60155481565b3480156107f257600080fd5b5061044c60205481565b34801561080857600080fd5b506103f2610817366004613204565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561084157600080fd5b506000546001600160a01b031661047a565b34801561085f57600080fd5b5061044c60095481565b34801561087557600080fd5b506103bc6115cc565b34801561088a57600080fd5b5061044c60185481565b3480156108a057600080fd5b5061044c600a5481565b3480156108b657600080fd5b506104fd6108c5366004613530565b6115db565b3480156108d657600080fd5b506103f26108e53660046132b4565b6116af565b3480156108f657600080fd5b506103f26109053660046132b4565b6116fe565b34801561091657600080fd5b506016546103f29060ff1681565b34801561093057600080fd5b5061044c601f5481565b34801561094657600080fd5b5061044c601e5481565b34801561095c57600080fd5b5061044c60235481565b34801561097257600080fd5b506104fd61170b565b34801561098757600080fd5b5061044c60245481565b34801561099d57600080fd5b5061044c601d5481565b3480156109b357600080fd5b5061044c601b5481565b3480156109c957600080fd5b5061044c6109d836600461323c565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610a0f57600080fd5b506104fd610a1e366004613204565b611792565b348015610a2f57600080fd5b506104fd610a3e366004613204565b6117dd565b348015610a4f57600080fd5b506104fd610a5e366004613204565b611b63565b348015610a6f57600080fd5b506104fd610a7e366004613204565b611baf565b348015610a8f57600080fd5b506104fd610a9e366004613204565b611bfd565b348015610aaf57600080fd5b5061044c60085481565b348015610ac557600080fd5b506104fd610ad43660046134ff565b611ce7565b348015610ae557600080fd5b506104fd610af436600461347e565b611d50565b348015610b0557600080fd5b506034546103f29060ff1681565b606060138054610b2290613703565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4e90613703565b8015610b9b5780601f10610b7057610100808354040283529160200191610b9b565b820191906000526020600020905b815481529060010190602001808311610b7e57829003601f168201915b5050505050905090565b6000610bb2338484611ec7565b5060015b92915050565b6000610bc9848484611feb565b610c1b8433610c16856040518060600160405280602881526020016137ac602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906126d7565b611ec7565b5060019392505050565b6000546001600160a01b03163314610c585760405162461bcd60e51b8152600401610c4f90613603565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c9a57600080fd5b505afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613496565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d589190613450565b50505050565b6000601154821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c4f565b6000610dcf612711565b9050610ddb8382611da7565b9392505050565b6000546001600160a01b03163314610e0c5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b0381166000908152600d602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c4f565b60005b600e5481101561101b57816001600160a01b0316600e8281548110610efa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561100957600e8054610f25906001906136ec565b81548110610f4357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600e80546001600160a01b039092169183908110610f7d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480610fe357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110138161373e565b915050610ec5565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610bb2918590610c169086611e68565b60006010548311156110a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c4f565b816110c85760006110b984612734565b50939550610bb6945050505050565b60006110d384612734565b50929550610bb6945050505050565b6000546001600160a01b0316331461110c5760405162461bcd60e51b8152600401610c4f90613603565b603480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111505760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116600090815260046020526040902054156111aa576001600160a01b03811660009081526004602052604090205461119090610d5e565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461123a5760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061124e57506025548411155b801561125c57506028548211155b801561126a57506029548111155b61127357600080fd5b600061128d82611287858188818c8c611e68565b90611e68565b9050600d81111561129d57600080fd5b50602093909355602193909355602255602391909155602455565b6000546001600160a01b031633146112e25760405162461bcd60e51b8152600401610c4f90613603565b60005b82811015610d5857816007600086868581811061131257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113279190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113588161373e565b90506112e5565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610c4f90613603565b6113aa816113a46107d0601054611da790919063ffffffff16565b90611de9565b60155550565b6000546001600160a01b031633146113da5760405162461bcd60e51b8152600401610c4f90613603565b6016805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff161561142a57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610bb690610d5e565b6000546001600160a01b031633146114765760405162461bcd60e51b8152600401610c4f90613603565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114ea5760405162461bcd60e51b8152600401610c4f90613603565b60005b81811015611568576001600b600085858581811061151b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115309190613204565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115618161373e565b90506114ed565b505050565b6000546001600160a01b031633146115975760405162461bcd60e51b8152600401610c4f90613603565b6040516001600160a01b038216904780156108fc02916000818181858888f1935050505015801561101b573d6000803e3d6000fd5b606060148054610b2290613703565b6000546001600160a01b031633146116055760405162461bcd60e51b8152600401610c4f90613603565b602654851180159061161957506025548411155b801561162757506028548211155b801561163557506029548111155b61163e57600080fd5b600061165282611287858188818c8c611e68565b9050600d81111561166257600080fd5b601b859055601c869055601d849055601e839055601f829055602e869055602a859055602b849055602c839055602d8290556116a48261128785818989611e68565b602f55505050505050565b6000610bb23384610c16856040518060600160405280602581526020016137d4602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906126d7565b6000610bb2338484611feb565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610c4f90613603565b60345460ff161561174557600080fd5b6034805460ff1916600117905561175b30611126565b603254611770906001600160a01b0316611126565b60345460ff1680156117825750600954155b15611790574360095542600a555b565b6000546001600160a01b031633146117bc5760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146118075760405162461bcd60e51b8152600401610c4f90613603565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190613220565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c757600080fd5b505afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561194557600080fd5b505afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613220565b90506001600160a01b038116611b2357816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c657600080fd5b505afa1580156119da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fe9190613220565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4657600080fd5b505afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190613220565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190613220565b603280546001600160a01b0319166001600160a01b0392909216919091179055611b3f565b603280546001600160a01b0319166001600160a01b0383161790555b50603180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611b8d5760405162461bcd60e51b8152600401610c4f90613603565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bd95760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611c275760405162461bcd60e51b8152600401610c4f90613603565b6001600160a01b038116611c8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d115760405162461bcd60e51b8152600401610c4f90613603565b8284601054611d2091906136cd565b611d2a91906136ad565b6019556010548190611d3d9084906136cd565b611d4791906136ad565b601a5550505050565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610c4f90613603565b674563918244f40000811015611d8f57600080fd5b611da181670de0b6b3a76400006136cd565b60185550565b6000610ddb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612783565b600082611df857506000610bb6565b6000611e0483856136cd565b905082611e1185836136ad565b14610ddb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c4f565b600080611e758385613695565b905083811015610ddb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c4f565b6001600160a01b038316611f295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4f565b6001600160a01b038216611f8a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c4f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661204f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c4f565b6001600160a01b0382166120b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c4f565b600081116121135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c4f565b6001600160a01b03821660009081526007602052604090205460ff161561217c5760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6001600160a01b03831660009081526007602052604090205460ff16156121e55760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206f6e2074686520736e69706572206c6973742100000000006044820152606401610c4f565b6000546001600160a01b0384811691161480159061221157506000546001600160a01b03838116911614155b156122685760345460ff166122685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610c4f565b6001600160a01b0383166000908152600b602052604081205460ff16806122a757506001600160a01b0383166000908152600b602052604090205460ff165b6122af575060015b602f54603055601c54602e556001600160a01b0383166000908152600c602052604090205460ff161580156122f257506000546001600160a01b03858116911614155b801561230b57506032546001600160a01b038581169116145b1561243657603454610100900460ff16156123845760155461232c846113ed565b6123369084613695565b111561237f5760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b612436565b60006123af601f54611287601e54611287601d54611287601b54601c54611e6890919063ffffffff16565b905060646123bd81836127b1565b91506015546123cb866113ed565b6123e060646123da8887611de9565b90611da7565b6123ea9190613695565b11156124335760405162461bcd60e51b8152602060048201526018602482015277151bdd185b081a1bdb191a5b99c81a5cc81b1a5b5a5d195960421b6044820152606401610c4f565b50505b60345460ff16801561245557506032546001600160a01b038481169116145b156125de57602154602e5560165460ff16156125595760315460405163d06ca61f60e01b81526000916001600160a01b03169063d06ca61f9061249f908690603390600401613638565b60006040518083038186803b1580156124b757600080fd5b505afa1580156124cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f39190810190613374565b60018151811061251357634e487b7160e01b600052603260045260246000fd5b60200260200101519050600a546201518061252e9190613695565b42116125485760175481111561254357600080fd5b612557565b60185481111561255757600080fd5b505b600a5461256890611c20613695565b421161257857601e6030556125de565b600a546125879061a8c0613695565b42116125975760196030556125de565b600a546125a79062015180613695565b42116125b75760146030556125de565b6125da602454611287602354611287602254602054611e6890919063ffffffff16565b6030555b60006009541180156125ff5750436008546009546125fc9190613695565b10155b15612628576001600160a01b0383166000908152600760205260409020805460ff191660011790555b603454610100900460ff16156126625760345460ff16801561265757506032546001600160a01b038581169116145b156126625760006030555b603254600160a01b900460ff1615801561267e575060345460ff165b801561269757506032546001600160a01b038481169116145b156126cb5760006126a7306113ed565b905060195481106126c957601a5481106126c05750601a545b6126c9816127f3565b505b610d58848484846128f9565b600081848411156126fb5760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ec565b95945050505050565b600080600061271e612a29565b909250905061272d8282611da7565b9250505090565b600080600080600080600080600061274b8a612be3565b92509250925060008060006127698d8686612764612711565b612c25565b919f909e50909c50959a5093985091965092945050505050565b600081836127a45760405162461bcd60e51b8152600401610c4f91906135b0565b50600061270884866136ad565b6000610ddb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126d7565b6032805460ff60a01b1916600160a01b179055602f54602a54600091612823916002916123da9182908790611de9565b9050600061283183836127b1565b905061283c81612c75565b602a54479060009061285c90612853906002611da7565b602f54906127b1565b9050600061287e60026123da846123da602a5488611de990919063ffffffff16565b9050600061289f602d54611287602c54602b54611e6890919063ffffffff16565b905060006128b1846123da8785611de9565b90504780156128d1576003546128d19083906001600160a01b0316612d36565b87156128e1576128e18885612d6c565b50506032805460ff60a01b1916905550505050505050565b602e546030548261290f576000602e8190556030555b6001600160a01b0386166000908152600d602052604090205460ff16801561295057506001600160a01b0385166000908152600d602052604090205460ff16155b1561296557612960868686612e50565b612a11565b6001600160a01b0386166000908152600d602052604090205460ff161580156129a657506001600160a01b0385166000908152600d602052604090205460ff165b156129b657612960868686612f76565b6001600160a01b0386166000908152600d602052604090205460ff1680156129f657506001600160a01b0385166000908152600d602052604090205460ff165b15612a065761296086868661301f565b612a11868686613092565b82612a2157602e82905560308190555b505050505050565b6011546010546000918291825b600e54811015612bb3578260046000600e8481548110612a6657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612adf57508160056000600e8481548110612ab857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612af557601154601054945094505050509091565b612b4960046000600e8481548110612b1d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127b1565b9250612b9f60056000600e8481548110612b7357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127b1565b915080612bab8161373e565b915050612a36565b50601054601154612bc391611da7565b821015612bda576011546010549350935050509091565b90939092509050565b600080600080612bf2856130d6565b90506000612bff866130f2565b90506000612c1782612c1189866127b1565b906127b1565b979296509094509092505050565b6000808080612c348886611de9565b90506000612c428887611de9565b90506000612c508888611de9565b90506000612c6282612c1186866127b1565b939b939a50919850919650505050505050565b603154612c8d9030906001600160a01b031683611ec7565b60315460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc790849060009060339030904290600401613659565b600060405180830381600087803b158015612ce157600080fd5b505af1158015612cf5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7816033604051612d2b929190613638565b60405180910390a150565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611568573d6000803e3d6000fd5b603154612d849030906001600160a01b031684611ec7565b6031546001600160a01b031663f305d719823085600080612dad6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e1057600080fd5b505af1158015612e24573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e4991906134d2565b5050505050565b600080600080600080612e6287612734565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e9490886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612ec390876127b1565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612ef29086611e68565b6001600160a01b038916600090815260046020526040902055612f148161310e565b612f1e8483613196565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f6391815260200190565b60405180910390a3505050505050505050565b600080600080600080612f8887612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fba90876127b1565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612ff09084611e68565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612ef29086611e68565b60008060008060008061303187612734565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061306390886127b1565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612fba90876127b1565b6000806000806000806130a487612734565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ec390876127b1565b6000610bb660646123da602e5485611de990919063ffffffff16565b6000610bb660646123da60305485611de990919063ffffffff16565b6000613118612711565b905060006131268383611de9565b306000908152600460205260409020549091506131439082611e68565b30600090815260046020908152604080832093909355600d9052205460ff161561156857306000908152600560205260409020546131819084611e68565b30600090815260056020526040902055505050565b6011546131a390836127b1565b6011556012546131b39082611e68565b6012555050565b60008083601f8401126131cb578182fd5b50813567ffffffffffffffff8111156131e2578182fd5b6020830191508360208260051b85010111156131fd57600080fd5b9250929050565b600060208284031215613215578081fd5b8135610ddb81613785565b600060208284031215613231578081fd5b8151610ddb81613785565b6000806040838503121561324e578081fd5b823561325981613785565b9150602083013561326981613785565b809150509250929050565b600080600060608486031215613288578081fd5b833561329381613785565b925060208401356132a381613785565b929592945050506040919091013590565b600080604083850312156132c6578182fd5b82356132d181613785565b946020939093013593505050565b600080602083850312156132f1578182fd5b823567ffffffffffffffff811115613307578283fd5b613313858286016131ba565b90969095509350505050565b600080600060408486031215613333578283fd5b833567ffffffffffffffff811115613349578384fd5b613355868287016131ba565b90945092505060208401356133698161379d565b809150509250925092565b60006020808385031215613386578182fd5b825167ffffffffffffffff8082111561339d578384fd5b818501915085601f8301126133b0578384fd5b8151818111156133c2576133c261376f565b8060051b604051601f19603f830116810181811085821117156133e7576133e761376f565b604052828152858101935084860182860187018a1015613405578788fd5b8795505b83861015613427578051855260019590950194938601938601613409565b5098975050505050505050565b600060208284031215613445578081fd5b8135610ddb8161379d565b600060208284031215613461578081fd5b8151610ddb8161379d565b6000806040838503121561324e578182fd5b60006020828403121561348f578081fd5b5035919050565b6000602082840312156134a7578081fd5b5051919050565b600080604083850312156134c0578182fd5b8235915060208301356132698161379d565b6000806000606084860312156134e6578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613514578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613547578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815480845260208085019450838352808320835b838110156135a55781546001600160a01b031687529582019560019182019101613580565b509495945050505050565b6000602080835283518082850152825b818110156135dc578581018301518582016040015282016135c0565b818111156135ed5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613651604083018461356a565b949350505050565b85815284602082015260a06040820152600061367860a083018661356a565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136a8576136a8613759565b500190565b6000826136c857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136e7576136e7613759565b500290565b6000828210156136fe576136fe613759565b500390565b600181811c9082168061371757607f821691505b6020821081141561373857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561375257613752613759565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461379a57600080fd5b50565b801515811461379a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208707c22a952c21e3b91b386426c41568c2c065780ec9d298ac8280a5b6103b5a64736f6c63430008040033
Deployed Bytecode Sourcemap
14320:24776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19709:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20621:161;;;;;;;;;;-1:-1:-1;20621:161:0;;;;;:::i;:::-;;:::i;:::-;;;9554:14:1;;9547:22;9529:41;;9517:2;9502:18;20621:161:0;9484:92:1;35706:106:0;;;;;;;;;;-1:-1:-1;35706:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35786:18:0;35762:4;35786:18;;;:9;:18;;;;;;;;;35706:106;21742:87;;;;;;;;;;-1:-1:-1;21811:10:0;;21742:87;;;16313:25:1;;;16301:2;16286:18;21742:87:0;16268:76:1;17238:41:0;;;;;;;;;;-1:-1:-1;17238:41:0;;;;-1:-1:-1;;;;;17238:41:0;;;;;;-1:-1:-1;;;;;8145:32:1;;;8127:51;;8115:2;8100:18;17238:41:0;8082:102:1;19986:95:0;;;;;;;;;;-1:-1:-1;20066:7:0;;19986:95;;20790:313;;;;;;;;;;-1:-1:-1;20790:313:0;;;;;:::i;:::-;;:::i;16470:35::-;;;;;;;;;;;;;;;;36190:177;;;;;;;;;;-1:-1:-1;36190:177:0;;;;;:::i;:::-;;:::i;:::-;;17412:34;;;;;;;;;;-1:-1:-1;17412:34:0;;;;;;;;;;;22285:253;;;;;;;;;;-1:-1:-1;22285:253:0;;;;;:::i;:::-;;:::i;36522:113::-;;;;;;;;;;-1:-1:-1;36522:113:0;;;;;:::i;:::-;;:::i;19895:83::-;;;;;;;;;;-1:-1:-1;19961:9:0;;-1:-1:-1;;;19961:9:0;;;;19895:83;;17923:4:1;17911:17;;;17893:36;;17881:2;17866:18;19895:83:0;17848:87:1;22817:479:0;;;;;;;;;;-1:-1:-1;22817:479:0;;;;;:::i;:::-;;:::i;21111:218::-;;;;;;;;;;-1:-1:-1;21111:218:0;;;;;:::i;:::-;;:::i;16186:36::-;;;;;;;;;;;;;;;;21841:436;;;;;;;;;;-1:-1:-1;21841:436:0;;;;;:::i;:::-;;:::i;17286:28::-;;;;;;;;;;-1:-1:-1;17286:28:0;;;;-1:-1:-1;;;;;17286:28:0;;;19062:104;;;;;;;;;;-1:-1:-1;19062:104:0;;;;;:::i;:::-;;:::i;22546:263::-;;;;;;;;;;-1:-1:-1;22546:263:0;;;;;:::i;:::-;;:::i;16610:206::-;;;;;;;;;;-1:-1:-1;16610:206:0;;;;;;;;;;;;;;;;;;;;;;17542:25:1;;;17598:2;17583:18;;17576:34;;;;17626:18;;;17619:34;;;;17684:2;17669:18;;17662:34;17727:3;17712:19;;17705:35;17529:3;17514:19;16610:206:0;17496:250:1;37987:776:0;;;;;;;;;;-1:-1:-1;37987:776:0;;;;;:::i;:::-;;:::i;35824:208::-;;;;;;;;;;-1:-1:-1;35824:208:0;;;;;:::i;:::-;;:::i;36375:139::-;;;;;;;;;;-1:-1:-1;36375:139:0;;;;;:::i;:::-;;:::i;38932:120::-;;;;;;;;;;-1:-1:-1;38932:120:0;;;;;:::i;:::-;;:::i;20089:198::-;;;;;;;;;;-1:-1:-1;20089:198:0;;;;;:::i;:::-;;:::i;6081:148::-;;;;;;;;;;;;;:::i;35116:198::-;;;;;;;;;;-1:-1:-1;35116:198:0;;;;;:::i;:::-;;:::i;36049:133::-;;;;;;;;;;-1:-1:-1;36049:133:0;;;;;:::i;:::-;;:::i;15852:45::-;;;;;;;;;;;;;;;;16421:37;;;;;;;;;;;;;;;;15708:58;;;;;;;;;;;;;;;;16373:36;;;;;;;;;;;;;;;;21614:120;;;;;;;;;;-1:-1:-1;21614:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21706:20:0;21682:4;21706:20;;;:11;:20;;;;;;;;;21614:120;5856:79;;;;;;;;;;-1:-1:-1;5894:7:0;5921:6;-1:-1:-1;;;;;5921:6:0;5856:79;;14830:34;;;;;;;;;;;;;;;;19800:87;;;;;;;;;;;;;:::i;15938:38::-;;;;;;;;;;;;;;;;14871:33;;;;;;;;;;;;;;;;36940:1039;;;;;;;;;;-1:-1:-1;36940:1039:0;;;;;:::i;:::-;;:::i;21337:269::-;;;;;;;;;;-1:-1:-1;21337:269:0;;;;;:::i;:::-;;:::i;20295:167::-;;;;;;;;;;-1:-1:-1;20295:167:0;;;;;:::i;:::-;;:::i;15807:38::-;;;;;;;;;;-1:-1:-1;15807:38:0;;;;;;;;16327:30;;;;;;;;;;;;;;;;16280:35;;;;;;;;;;;;;;;;16517:36;;;;;;;;;;;;;;;;18699:354;;;;;;;;;;;;;:::i;16565:31::-;;;;;;;;;;;;;;;;16234:34;;;;;;;;;;;;;;;;16134:35;;;;;;;;;;;;;;;;20470:143;;;;;;;;;;-1:-1:-1;20470:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20578:18:0;;;20551:7;20578:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20470:143;35327:110;;;;;;;;;;-1:-1:-1;35327:110:0;;;;;:::i;:::-;;:::i;19178:523::-;;;;;;;;;;-1:-1:-1;19178:523:0;;;;;:::i;:::-;;:::i;35449:111::-;;;;;;;;;;-1:-1:-1;35449:111:0;;;;;:::i;:::-;;:::i;34996:112::-;;;;;;;;;;-1:-1:-1;34996:112:0;;;;;:::i;:::-;;:::i;6237:244::-;;;;;;;;;;-1:-1:-1;6237:244:0;;;;;:::i;:::-;;:::i;14790:29::-;;;;;;;;;;;;;;;;36643:289;;;;;;;;;;-1:-1:-1;36643:289:0;;;;;:::i;:::-;;:::i;38771:153::-;;;;;;;;;;-1:-1:-1;38771:153:0;;;;;:::i;:::-;;:::i;17374:31::-;;;;;;;;;;-1:-1:-1;17374:31:0;;;;;;;;19709:83;19746:13;19779:5;19772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19709:83;:::o;20621:161::-;20696:4;20713:39;632:10;20736:7;20745:6;20713:8;:39::i;:::-;-1:-1:-1;20770:4:0;20621:161;;;;;:::o;20790:313::-;20888:4;20905:36;20915:6;20923:9;20934:6;20905:9;:36::i;:::-;20952:121;20961:6;632:10;20983:89;21021:6;20983:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20983:19:0;;;;;;:11;:19;;;;;;;;632:10;20983:33;;;;;;;;;;:37;:89::i;:::-;20952:8;:121::i;:::-;-1:-1:-1;21091:4:0;20790:313;;;;;:::o;36190:177::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;;;;;;;;;36291:30:::1;::::0;-1:-1:-1;;;36291:30:0;;36315:4:::1;36291:30;::::0;::::1;8127:51:1::0;36273:15:0::1;::::0;-1:-1:-1;;;;;36291:15:0;::::1;::::0;::::1;::::0;8100:18:1;;36291:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36332:27;::::0;-1:-1:-1;;;36332:27:0;;-1:-1:-1;;;;;8690:32:1;;;36332:27:0::1;::::0;::::1;8672:51:1::0;8739:18;;;8732:34;;;36273:48:0;;-1:-1:-1;36332:14:0;;::::1;::::0;::::1;::::0;8645:18:1;;36332:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6060:1;36190:177:::0;;:::o;22285:253::-;22351:7;22390;;22379;:18;;22371:73;;;;-1:-1:-1;;;22371:73:0;;11030:2:1;22371:73:0;;;11012:21:1;11069:2;11049:18;;;11042:30;11108:34;11088:18;;;11081:62;-1:-1:-1;;;11159:18:1;;;11152:40;11209:19;;22371:73:0;11002:232:1;22371:73:0;22455:19;22478:10;:8;:10::i;:::-;22455:33;-1:-1:-1;22506:24:0;:7;22455:33;22506:11;:24::i;:::-;22499:31;22285:253;-1:-1:-1;;;22285:253:0:o;36522:113::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36595:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36595:32:0::1;36623:4;36595:32;::::0;;36522:113::o;22817:479::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22899:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22891:60;;;::::0;-1:-1:-1;;;22891:60:0;;12607:2:1;22891:60:0::1;::::0;::::1;12589:21:1::0;12646:2;12626:18;;;12619:30;12685:29;12665:18;;;12658:57;12732:18;;22891:60:0::1;12579:177:1::0;22891:60:0::1;22967:9;22962:327;22986:9;:16:::0;22982:20;::::1;22962:327;;;23044:7;-1:-1:-1::0;;;;;23028:23:0::1;:9;23038:1;23028:12;;;;;;-1:-1:-1::0;;;23028:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23028:12:0::1;:23;23024:254;;;23087:9;23097:16:::0;;:20:::1;::::0;23116:1:::1;::::0;23097:20:::1;:::i;:::-;23087:31;;;;;;-1:-1:-1::0;;;23087:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23072:9:::1;:12:::0;;-1:-1:-1;;;;;23087:31:0;;::::1;::::0;23082:1;;23072:12;::::1;;;-1:-1:-1::0;;;23072:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23072:46:0::1;-1:-1:-1::0;;;;;23072:46:0;;::::1;;::::0;;23137:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23176:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23176:28:0::1;::::0;;23223:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23223:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23223:15:0;;;;;-1:-1:-1;;;;;;23223:15:0::1;::::0;;;;;22962:327:::1;22817:479:::0;:::o;23024:254::-:1;23004:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22962:327;;;;22817:479:::0;:::o;21111:218::-;632:10;21199:4;21248:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21248:34:0;;;;;;;;;;21199:4;;21216:83;;21239:7;;21248:50;;21287:10;21248:38;:50::i;21841:436::-;21931:7;21970;;21959;:18;;21951:62;;;;-1:-1:-1;;;21951:62:0;;13319:2:1;21951:62:0;;;13301:21:1;13358:2;13338:18;;;13331:30;13397:33;13377:18;;;13370:61;13448:18;;21951:62:0;13291:181:1;21951:62:0;22029:17;22024:246;;22064:15;22088:19;22099:7;22088:10;:19::i;:::-;-1:-1:-1;22063:44:0;;-1:-1:-1;22122:14:0;;-1:-1:-1;;;;;22122:14:0;22024:246;22171:23;22202:19;22213:7;22202:10;:19::i;:::-;-1:-1:-1;22169:52:0;;-1:-1:-1;22236:22:0;;-1:-1:-1;;;;;22236:22:0;19062:104;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;19134:14:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;19134:24:0;;::::1;::::0;;;::::1;::::0;;19062:104::o;22546:263::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22625:16:0;::::1;22644:1;22625:16:::0;;;:7:::1;:16;::::0;;;;;:20;22622:108:::1;;-1:-1:-1::0;;;;;22701:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22681:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22662:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22622:108:::1;-1:-1:-1::0;;;;;22740:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22740:27:0::1;22763:4;22740:27:::0;;::::1;::::0;;;22778:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22778:23:0::1;::::0;;::::1;::::0;;22546:263::o;37987:776::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;38174:23;;38156:41;::::1;::::0;::::1;::::0;:94:::1;;-1:-1:-1::0;38228:9:0::1;:22:::0;38211:39;::::1;;38156:94;:147;;;;-1:-1:-1::0;38281:22:0;;38264:39;::::1;;38156:147;:192;;;;-1:-1:-1::0;38328:20:0;;38316:32;::::1;;38156:192;38148:201;;;::::0;::::1;;38370:22;38395:84;38470:8:::0;38395:70:::1;38451:13:::0;38395:70;38433:12;38395:70;:14;38414:13;38395:18:::1;:33::i;:::-;:37:::0;::::1;:51::i;:84::-;38370:109;;38516:2;38498:14;:20;;38490:29;;;::::0;::::1;;-1:-1:-1::0;38551:17:0::1;:33:::0;;;;38595:18:::1;:34:::0;;;;38640:16:::1;:31:::0;38682:17:::1;:33:::0;;;;38726:12:::1;:23:::0;37987:776::o;35824:208::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;35924:9:::1;35919:106;35935:20:::0;;::::1;35919:106;;;36007:6;35981:9;:23;35991:9;;36001:1;35991:12;;;;;-1:-1:-1::0;;;35991:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35981:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35981:23:0;:32;;-1:-1:-1;;35981:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35957:3:::1;::::0;::::1;:::i;:::-;;;35919:106;;36375:139:::0;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;36474:32:::1;36496:9;36474:17;36486:4;36474:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:32::i;:::-;36456:15;:50:::0;-1:-1:-1;36375:139:0:o;38932:120::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;39010:19:::1;:34:::0;;-1:-1:-1;;39010:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38932:120::o;20089:198::-;-1:-1:-1;;;;;20179:20:0;;20155:7;20179:20;;;:11;:20;;;;;;;;20175:49;;;-1:-1:-1;;;;;;20208:16:0;;;;;:7;:16;;;;;;;20089:198::o;20175:49::-;-1:-1:-1;;;;;20262:16:0;;;;;;:7;:16;;;;;;20242:37;;:19;:37::i;6081:148::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;6188:1:::1;6172:6:::0;;6151:40:::1;::::0;-1:-1:-1;;;;;6172:6:0;;::::1;::::0;6151:40:::1;::::0;6188:1;;6151:40:::1;6219:1;6202:19:::0;;-1:-1:-1;;;;;;6202:19:0::1;::::0;;6081:148::o;35116:198::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;35203:9:::1;35198:109;35214:20:::0;;::::1;35198:109;;;35291:4;35256:18;:32;35275:9;;35285:1;35275:12;;;;;-1:-1:-1::0;;;35275:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35256:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35256:32:0;:39;;-1:-1:-1;;35256:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35236:3:::1;::::0;::::1;:::i;:::-;;;35198:109;;;;35116:198:::0;;:::o;36049:133::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;36133:41:::1;::::0;-1:-1:-1;;;;;36133:18:0;::::1;::::0;36152:21:::1;36133:41:::0;::::1;;;::::0;::::1;::::0;;;36152:21;36133:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;19800:87:::0;19839:13;19872:7;19865:14;;;;;:::i;36940:1039::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;37127:23;;37109:41;::::1;::::0;::::1;::::0;:94:::1;;-1:-1:-1::0;37181:9:0::1;:22:::0;37164:39;::::1;;37109:94;:147;;;;-1:-1:-1::0;37234:22:0;;37217:39;::::1;;37109:147;:192;;;;-1:-1:-1::0;37281:20:0;;37269:32;::::1;;37109:192;37101:201;;;::::0;::::1;;37323:21;37347:84;37422:8:::0;37347:70:::1;37403:13:::0;37347:70;37385:12;37347:70;:14;37366:13;37347:18:::1;:33::i;:84::-;37323:108;;37467:2;37450:13;:19;;37442:28;;;::::0;::::1;;37501:16;:32:::0;;;37544:17:::1;:34:::0;;;37589:15:::1;:30:::0;;;37630:16:::1;:32:::0;;;37673:11:::1;:22:::0;;;37715:13:::1;:30:::0;;;37756:12:::1;:28:::0;;;37795:11:::1;:26:::0;;;37832:12:::1;:28:::0;;;37871:7:::1;:18:::0;;;37911:60:::1;37687:8:::0;37911:47:::1;37649:13:::0;37911:47;37520:13;37607:12;37911:16:::1;:29::i;:60::-;37900:8;:71:::0;-1:-1:-1;;;;;;36940:1039:0:o;21337:269::-;21430:4;21447:129;632:10;21470:7;21479:96;21518:15;21479:96;;;;;;;;;;;;;;;;;632:10;21479:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21479:34:0;;;;;;;;;;;;:38;:96::i;20295:167::-;20373:4;20390:42;632:10;20414:9;20425:6;20390:9;:42::i;18699:354::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;18763:11:::1;::::0;::::1;;18762:12;18754:21;;;::::0;::::1;;18786:11;:18:::0;;-1:-1:-1;;18786:18:0::1;18800:4;18786:18;::::0;;18815:32:::1;18841:4;18815:17;:32::i;:::-;18876:13;::::0;18858:32:::1;::::0;-1:-1:-1;;;;;18876:13:0::1;18858:17;:32::i;:::-;18906:11;::::0;::::1;;:35:::0;::::1;;;-1:-1:-1::0;18921:15:0::1;::::0;:20;18906:35:::1;18903:143;;;18975:12;18957:15;:30:::0;19019:15:::1;19002:14;:32:::0;18903:143:::1;18699:354::o:0;35327:110::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35394:27:0::1;35424:5;35394:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35394:35:0::1;::::0;;35327:110::o;19178:523::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;19251:29:::1;19302:9;19251:61;;19323:16;19360:10;-1:-1:-1::0;;;;;19360:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19342:47:0::1;;19398:4;19405:10;-1:-1:-1::0;;;;;19405:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19342:81;::::0;-1:-1:-1;;;;;;19342:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8419:15:1;;;19342:81:0::1;::::0;::::1;8401:34:1::0;8471:15;;8451:18;;;8444:43;8336:18;;19342:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19323:100:::0;-1:-1:-1;;;;;;19438:22:0;::::1;19434:221;;19511:10;-1:-1:-1::0;;;;;19511:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19493:50:0::1;;19552:4;19559:10;-1:-1:-1::0;;;;;19559:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19493:84;::::0;-1:-1:-1;;;;;;19493:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8419:15:1;;;19493:84:0::1;::::0;::::1;8401:34:1::0;8471:15;;8451:18;;;8444:43;8336:18;;19493:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19477:13;:100:::0;;-1:-1:-1;;;;;;19477:100:0::1;-1:-1:-1::0;;;;;19477:100:0;;;::::1;::::0;;;::::1;::::0;;19434:221:::1;;;19619:13;:24:::0;;-1:-1:-1;;;;;;19619:24:0::1;-1:-1:-1::0;;;;;19619:24:0;::::1;;::::0;;19434:221:::1;-1:-1:-1::0;19665:15:0::1;:28:::0;;-1:-1:-1;;;;;;19665:28:0::1;-1:-1:-1::0;;;;;19665:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;19178:523:0:o;35449:111::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;35521:9:::1;:31:::0;;-1:-1:-1;;;;;;35521:31:0::1;-1:-1:-1::0;;;;;35521:31:0;;;::::1;::::0;;;::::1;::::0;;35449:111::o;34996:112::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35066:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35066:34:0::1;35096:4;35066:34;::::0;;34996:112::o;6237:244::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6326:22:0;::::1;6318:73;;;::::0;-1:-1:-1;;;6318:73:0;;11441:2:1;6318:73:0::1;::::0;::::1;11423:21:1::0;11480:2;11460:18;;;11453:30;11519:34;11499:18;;;11492:62;-1:-1:-1;;;11570:18:1;;;11563:36;11616:19;;6318:73:0::1;11413:228:1::0;6318:73:0::1;6428:6;::::0;;6407:38:::1;::::0;-1:-1:-1;;;;;6407:38:0;;::::1;::::0;6428:6;::::1;::::0;6407:38:::1;::::0;::::1;6456:6;:17:::0;;-1:-1:-1;;;;;;6456:17:0::1;-1:-1:-1::0;;;;;6456:17:0;;;::::1;::::0;;;::::1;::::0;;6237:244::o;36643:289::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;36843:16:::1;36823;36813:7;;:26;;;;:::i;:::-;36812:47;;;;:::i;:::-;36796:13;:63:::0;36884:7:::1;::::0;36911:13;;36884:23:::1;::::0;36894:13;;36884:23:::1;:::i;:::-;36883:41;;;;:::i;:::-;36870:10;:54:::0;-1:-1:-1;;;;36643:289:0:o;38771:153::-;5990:6;;-1:-1:-1;;;;;5990:6:0;632:10;5990:22;5982:67;;;;-1:-1:-1;;;5982:67:0;;;;;;;:::i;:::-;38859:10:::1;38848:7;:21;;38840:30;;;::::0;::::1;;38894:16;:7:::0;38904:6:::1;38894:16;:::i;:::-;38881:10;:29:::0;-1:-1:-1;38771:153:0:o;2395:132::-;2453:7;2480:39;2484:1;2487;2480:39;;;;;;;;;;;;;;;;;:3;:39::i;2135:250::-;2193:7;2217:6;2213:47;;-1:-1:-1;2247:1:0;2240:8;;2213:47;2272:9;2284:5;2288:1;2284;:5;:::i;:::-;2272:17;-1:-1:-1;2317:1:0;2308:5;2312:1;2272:17;2308:5;:::i;:::-;:10;2300:56;;;;-1:-1:-1;;;2300:56:0;;13679:2:1;2300:56:0;;;13661:21:1;13718:2;13698:18;;;13691:30;13757:34;13737:18;;;13730:62;-1:-1:-1;;;13808:18:1;;;13801:31;13849:19;;2300:56:0;13651:223:1;1602:181:0;1660:7;;1692:5;1696:1;1692;:5;:::i;:::-;1680:17;;1721:1;1716;:6;;1708:46;;;;-1:-1:-1;;;1708:46:0;;12251:2:1;1708:46:0;;;12233:21:1;12290:2;12270:18;;;12263:30;12329:29;12309:18;;;12302:57;12376:18;;1708:46:0;12223:177:1;23304:337:0;-1:-1:-1;;;;;23397:19:0;;23389:68;;;;-1:-1:-1;;;23389:68:0;;15258:2:1;23389:68:0;;;15240:21:1;15297:2;15277:18;;;15270:30;15336:34;15316:18;;;15309:62;-1:-1:-1;;;15387:18:1;;;15380:34;15431:19;;23389:68:0;15230:226:1;23389:68:0;-1:-1:-1;;;;;23476:21:0;;23468:68;;;;-1:-1:-1;;;23468:68:0;;11848:2:1;23468:68:0;;;11830:21:1;11887:2;11867:18;;;11860:30;11926:34;11906:18;;;11899:62;-1:-1:-1;;;11977:18:1;;;11970:32;12019:19;;23468:68:0;11820:224:1;23468:68:0;-1:-1:-1;;;;;23549:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23601:32;;16313:25:1;;;23601:32:0;;16286:18:1;23601:32:0;;;;;;;23304:337;;;:::o;23649:3589::-;-1:-1:-1;;;;;23771:18:0;;23763:68;;;;-1:-1:-1;;;23763:68:0;;14852:2:1;23763:68:0;;;14834:21:1;14891:2;14871:18;;;14864:30;14930:34;14910:18;;;14903:62;-1:-1:-1;;;14981:18:1;;;14974:35;15026:19;;23763:68:0;14824:227:1;23763:68:0;-1:-1:-1;;;;;23850:16:0;;23842:64;;;;-1:-1:-1;;;23842:64:0;;10626:2:1;23842:64:0;;;10608:21:1;10665:2;10645:18;;;10638:30;10704:34;10684:18;;;10677:62;-1:-1:-1;;;10755:18:1;;;10748:33;10798:19;;23842:64:0;10598:225:1;23842:64:0;23934:1;23925:6;:10;23917:64;;;;-1:-1:-1;;;23917:64:0;;14442:2:1;23917:64:0;;;14424:21:1;14481:2;14461:18;;;14454:30;14520:34;14500:18;;;14493:62;-1:-1:-1;;;14571:18:1;;;14564:39;14620:19;;23917:64:0;14414:231:1;23917:64:0;-1:-1:-1;;;;;24001:13:0;;;;;;:9;:13;;;;;;;;24000:14;23992:54;;;;-1:-1:-1;;;23992:54:0;;12963:2:1;23992:54:0;;;12945:21:1;13002:2;12982:18;;;12975:30;13041:29;13021:18;;;13014:57;13088:18;;23992:54:0;12935:177:1;23992:54:0;-1:-1:-1;;;;;24066:15:0;;;;;;:9;:15;;;;;;;;24065:16;24057:56;;;;-1:-1:-1;;;24057:56:0;;12963:2:1;24057:56:0;;;12945:21:1;13002:2;12982:18;;;12975:30;13041:29;13021:18;;;13014:57;13088:18;;24057:56:0;12935:177:1;24057:56:0;5894:7;5921:6;-1:-1:-1;;;;;24128:15:0;;;5921:6;;24128:15;;;;:32;;-1:-1:-1;5894:7:0;5921:6;-1:-1:-1;;;;;24147:13:0;;;5921:6;;24147:13;;24128:32;24124:86;;;24170:11;;;;24162:48;;;;-1:-1:-1;;;24162:48:0;;15663:2:1;24162:48:0;;;15645:21:1;15702:2;15682:18;;;15675:30;15741:26;15721:18;;;15714:54;15785:18;;24162:48:0;15635:174:1;24162:48:0;-1:-1:-1;;;;;24293:24:0;;24254:12;24293:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24321:22:0;;;;;;:18;:22;;;;;;;;24293:50;24287:100;;-1:-1:-1;24371:4:0;24287:100;24415:8;;24399:15;:24;24448:17;;24434:13;:31;-1:-1:-1;;;;;24512:22:0;;-1:-1:-1;24512:22:0;;;:18;:22;;;;;;;;24511:23;:42;;;;-1:-1:-1;5894:7:0;5921:6;-1:-1:-1;;;;;24538:15:0;;;5921:6;;24538:15;;24511:42;:67;;;;-1:-1:-1;24565:13:0;;-1:-1:-1;;;;;24557:21:0;;;24565:13;;24557:21;24511:67;24508:739;;;24597:14;;;;;;;24594:642;;;24726:15;;24709:13;24719:2;24709:9;:13::i;:::-;24700:22;;:6;:22;:::i;:::-;:41;;24692:79;;;;-1:-1:-1;;;24692:79:0;;16016:2:1;24692:79:0;;;15998:21:1;16055:2;16035:18;;;16028:30;-1:-1:-1;;;16074:18:1;;;16067:54;16138:18;;24692:79:0;15988:174:1;24692:79:0;24594:642;;;24864:21;24888:99;24975:11;;24888:82;24953:16;;24888:60;24932:15;;24888:39;24910:16;;24888:17;;:21;;:39;;;;:::i;:99::-;24864:123;-1:-1:-1;25027:3:0;25065:29;25027:3;24864:123;25065:14;:29::i;:::-;25049:45;;25175:15;;25158:13;25168:2;25158:9;:13::i;:::-;25121:34;25151:3;25121:25;:6;25132:13;25121:10;:25::i;:::-;:29;;:34::i;:::-;:50;;;;:::i;:::-;:69;;25113:107;;;;-1:-1:-1;;;25113:107:0;;16016:2:1;25113:107:0;;;15998:21:1;16055:2;16035:18;;;16028:30;-1:-1:-1;;;16074:18:1;;;16067:54;16138:18;;25113:107:0;15988:174:1;25113:107:0;24594:642;;;25270:11;;;;:34;;;;-1:-1:-1;25291:13:0;;-1:-1:-1;;;;;25285:19:0;;;25291:13;;25285:19;25270:34;25267:1119;;;25344:18;;25328:13;:34;25383:19;;;;25379:424;;;25445:15;;:43;;-1:-1:-1;;;25445:43:0;;25423:19;;-1:-1:-1;;;;;25445:15:0;;:29;;:43;;25475:6;;25483:4;;25445:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25445:43:0;;;;;;;;;;;;:::i;:::-;25489:1;25445:46;;;;;;-1:-1:-1;;;25445:46:0;;;;;;;;;;;;;;;25423:68;;25532:14;;25549:8;25532:25;;;;:::i;:::-;25513:15;:44;25510:278;;25605:17;;25590:11;:32;;25582:41;;;;;;25510:278;;;25724:10;;25709:11;:25;;25701:34;;;;;;25379:424;;25900:14;;:24;;25917:7;25900:24;:::i;:::-;25881:15;:43;25878:497;;25963:2;25945:15;:20;25878:497;;;26015:14;;:25;;26032:8;26015:25;:::i;:::-;25996:15;:44;25992:383;;26079:2;26061:15;:20;25992:383;;;26131:14;;:25;;26148:8;26131:25;:::i;:::-;26112:15;:44;26108:267;;26195:2;26177:15;:20;26108:267;;;26260:80;26327:12;;26260:62;26304:17;;26260:39;26282:16;;26260:17;;:21;;:39;;;;:::i;:80::-;26242:15;:98;26108:267;26458:1;26440:15;;:19;:71;;;;;26498:12;26483:10;;26465:15;;:28;;;;:::i;:::-;26464:46;;26440:71;26437:124;;;-1:-1:-1;;;;;26531:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;26531:18:0;26545:4;26531:18;;;26437:124;26601:14;;;;;;;26598:143;;;26635:11;;;;:36;;;;-1:-1:-1;26658:13:0;;-1:-1:-1;;;;;26650:21:0;;;26658:13;;26650:21;26635:36;26632:98;;;26712:1;26696:15;:17;26632:98;26774:6;;-1:-1:-1;;;26774:6:0;;;;26773:7;:22;;;;-1:-1:-1;26784:11:0;;;;26773:22;:45;;;;-1:-1:-1;26805:13:0;;-1:-1:-1;;;;;26799:19:0;;;26805:13;;26799:19;26773:45;26769:413;;;26839:28;26870:24;26888:4;26870:9;:24::i;:::-;26839:55;;26948:13;;26924:20;:37;26920:245;;27009:10;;26985:20;:34;26982:117;;-1:-1:-1;27068:10:0;;26982:117;27117:32;27128:20;27117:10;:32::i;:::-;26769:413;;27192:38;27207:4;27212:2;27215:6;27222:7;27192:14;:38::i;1935:192::-;2021:7;2057:12;2049:6;;;;2041:29;;;;-1:-1:-1;;;2041:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2081:9:0;2093:5;2097:1;2093;:5;:::i;:::-;2081:17;1935:192;-1:-1:-1;;;;;1935:192:0:o;33581:163::-;33622:7;33643:15;33660;33679:19;:17;:19::i;:::-;33642:56;;-1:-1:-1;33642:56:0;-1:-1:-1;33716:20:0;33642:56;;33716:11;:20::i;:::-;33709:27;;;;33581:163;:::o;32379:419::-;32438:7;32447;32456;32465;32474;32483;32504:23;32529:12;32543:18;32565:20;32577:7;32565:11;:20::i;:::-;32503:82;;;;;;32597:15;32614:23;32639:12;32655:50;32667:7;32676:4;32682:10;32694;:8;:10::i;:::-;32655:11;:50::i;:::-;32596:109;;;;-1:-1:-1;32596:109:0;;-1:-1:-1;32756:15:0;;-1:-1:-1;32773:4:0;;-1:-1:-1;32779:10:0;;-1:-1:-1;32379:419:0;;-1:-1:-1;;;;;32379:419:0:o;2535:278::-;2621:7;2656:12;2649:5;2641:28;;;;-1:-1:-1;;;2641:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2680:9:0;2692:5;2696:1;2692;:5;:::i;1791:136::-;1849:7;1876:43;1880:1;1883;1876:43;;;;;;;;;;;;;;;;;:3;:43::i;27246:945::-;17679:6;:13;;-1:-1:-1;;;;17679:13:0;-1:-1:-1;;;17679:13:0;;;27403:8:::1;::::0;27385:12:::1;::::0;17679:13;;27360:59:::1;::::0;27417:1:::1;::::0;27360:52:::1;::::0;;;:20;;:24:::1;:38::i;:59::-;27334:85:::0;-1:-1:-1;27430:20:0::1;27453:41;:20:::0;27334:85;27453:24:::1;:41::i;:::-;27430:64;;27512:30;27529:12;27512:16;:30::i;:::-;27640:12;::::0;27573:21:::1;::::0;27553:17:::1;::::0;27627:33:::1;::::0;27640:19:::1;::::0;27657:1:::1;27640:16;:19::i;:::-;27627:8;::::0;;:12:::1;:33::i;:::-;27605:55;;27671:26;27700:51;27749:1;27700:44;27732:11;27700:27;27714:12;;27700:9;:13;;:27;;;;:::i;:51::-;27671:80;;27766:19;27788:42;27822:7;;27788:29;27804:12;;27788:11;;:15;;:29;;;;:::i;:42::-;27766:64:::0;-1:-1:-1;27842:20:0::1;27865:43;27896:11:::0;27865:26:::1;:9:::0;27766:64;27865:13:::1;:26::i;:43::-;27842:66:::0;-1:-1:-1;27948:21:0::1;27983:22:::0;;27980:90:::1;;28048:9;::::0;28022:36:::1;::::0;28035:12;;-1:-1:-1;;;;;28048:9:0::1;28022:12;:36::i;:::-;28084:19:::0;;28080:104:::1;;28124:48;28137:15;28153:18;28124:12;:48::i;:::-;-1:-1:-1::0;;17715:6:0;:14;;-1:-1:-1;;;;17715:14:0;;;-1:-1:-1;;;;;;;27246:945:0:o;28941:947::-;29081:13;;29131:15;;29161:7;29157:90;;29200:1;29184:13;:17;;;29216:15;:19;29157:90;-1:-1:-1;;;;;29271:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;29295:22:0;;;;;;:11;:22;;;;;;;;29294:23;29271:46;29267:467;;;29334:48;29356:6;29364:9;29375:6;29334:21;:48::i;:::-;29267:467;;;-1:-1:-1;;;;;29405:19:0;;;;;;:11;:19;;;;;;;;29404:20;:46;;;;-1:-1:-1;;;;;;29428:22:0;;;;;;:11;:22;;;;;;;;29404:46;29400:334;;;29467:46;29487:6;29495:9;29506:6;29467:19;:46::i;29400:334::-;-1:-1:-1;;;;;29535:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29558:22:0;;;;;;:11;:22;;;;;;;;29535:45;29531:203;;;29597:48;29619:6;29627:9;29638:6;29597:21;:48::i;29531:203::-;29678:44;29696:6;29704:9;29715:6;29678:17;:44::i;:::-;29758:7;29754:127;;29781:13;:38;;;29834:15;:35;;;29754:127;28941:947;;;;;;:::o;33752:561::-;33849:7;;33885;;33802;;;;;33909:289;33933:9;:16;33929:20;;33909:289;;;33999:7;33975;:21;33983:9;33993:1;33983:12;;;;;;-1:-1:-1;;;33983:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33983:12:0;33975:21;;;;;;;;;;;;;:31;;:66;;;34034:7;34010;:21;34018:9;34028:1;34018:12;;;;;;-1:-1:-1;;;34018:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34018:12:0;34010:21;;;;;;;;;;;;;:31;33975:66;33971:97;;;34051:7;;34060;;34043:25;;;;;;;33752:561;;:::o;33971:97::-;34093:34;34105:7;:21;34113:9;34123:1;34113:12;;;;;;-1:-1:-1;;;34113:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34113:12:0;34105:21;;;;;;;;;;;;;34093:7;;:11;:34::i;:::-;34083:44;;34152:34;34164:7;:21;34172:9;34182:1;34172:12;;;;;;-1:-1:-1;;;34172:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34172:12:0;34164:21;;;;;;;;;;;;;34152:7;;:11;:34::i;:::-;34142:44;-1:-1:-1;33951:3:0;;;;:::i;:::-;;;;33909:289;;;-1:-1:-1;34234:7:0;;34222;;:20;;:11;:20::i;:::-;34212:7;:30;34208:61;;;34252:7;;34261;;34244:25;;;;;;33752:561;;:::o;34208:61::-;34288:7;;34297;;-1:-1:-1;33752:561:0;-1:-1:-1;33752:561:0:o;32806:330::-;32866:7;32875;32884;32904:12;32919:24;32935:7;32919:15;:24::i;:::-;32904:39;;32954:18;32975:30;32997:7;32975:21;:30::i;:::-;32954:51;-1:-1:-1;33016:23:0;33042:33;32954:51;33042:17;:7;33054:4;33042:11;:17::i;:::-;:21;;:33::i;:::-;33016:59;33111:4;;-1:-1:-1;33117:10:0;;-1:-1:-1;32806:330:0;;-1:-1:-1;;;32806:330:0:o;33144:429::-;33259:7;;;;33315:24;:7;33327:11;33315;:24::i;:::-;33297:42;-1:-1:-1;33350:12:0;33365:21;:4;33374:11;33365:8;:21::i;:::-;33350:36;-1:-1:-1;33397:18:0;33418:27;:10;33433:11;33418:14;:27::i;:::-;33397:48;-1:-1:-1;33456:23:0;33482:33;33397:48;33482:17;:7;33494:4;33482:11;:17::i;:33::-;33534:7;;;;-1:-1:-1;33560:4:0;;-1:-1:-1;33144:429:0;;-1:-1:-1;;;;;;;33144:429:0:o;28326:324::-;28424:15;;28392:62;;28409:4;;-1:-1:-1;;;;;28424:15:0;28442:11;28392:8;:62::i;:::-;28465:15;;:120;;-1:-1:-1;;;28465:120:0;;-1:-1:-1;;;;;28465:15:0;;;;:66;;:120;;28532:11;;28465:15;;28548:4;;28562;;28569:15;;28465:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28607:35;28624:11;28637:4;28607:35;;;;;;;:::i;:::-;;;;;;;;28326:324;:::o;28203:111::-;28283:23;;-1:-1:-1;;;;;28283:15:0;;;:23;;;;;28299:6;;28283:23;;;;28299:6;28283:15;:23;;;;;;;;;;;;;;;;;;;28662:271;28775:15;;28743:62;;28760:4;;-1:-1:-1;;;;;28775:15:0;28793:11;28743:8;:62::i;:::-;28816:15;;-1:-1:-1;;;;;28816:15:0;:31;28855:9;28874:4;28881:11;28816:15;;28900:7;5894;5921:6;-1:-1:-1;;;;;5921:6:0;;5856:79;28900:7;28816:109;;;;;;-1:-1:-1;;;;;;28816:109:0;;;-1:-1:-1;;;;;9136:15:1;;;28816:109:0;;;9118:34:1;9168:18;;;9161:34;;;;9211:18;;;9204:34;;;;9254:18;;;9247:34;9318:15;;;9297:19;;;9290:44;28909:15:0;9350:19:1;;;9343:35;9052:19;;28816:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28662:271;;:::o;31000:566::-;31103:15;31120:23;31145:12;31159:23;31184:12;31198:18;31220:19;31231:7;31220:10;:19::i;:::-;-1:-1:-1;;;;;31268:15:0;;;;;;:7;:15;;;;;;31102:137;;-1:-1:-1;31102:137:0;;-1:-1:-1;31102:137:0;;-1:-1:-1;31102:137:0;-1:-1:-1;31102:137:0;-1:-1:-1;31102:137:0;-1:-1:-1;31268:28:0;;31288:7;31268:19;:28::i;:::-;-1:-1:-1;;;;;31250:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31325:7;:15;;;;:28;;31345:7;31325:19;:28::i;:::-;-1:-1:-1;;;;;31307:15:0;;;;;;;:7;:15;;;;;;:46;;;;31385:18;;;;;;;:39;;31408:15;31385:22;:39::i;:::-;-1:-1:-1;;;;;31364:18:0;;;;;;:7;:18;;;;;:60;31438:26;31453:10;31438:14;:26::i;:::-;31475:23;31487:4;31493;31475:11;:23::i;:::-;31531:9;-1:-1:-1;;;;;31514:44:0;31523:6;-1:-1:-1;;;;;31514:44:0;;31542:15;31514:44;;;;16313:25:1;;16301:2;16286:18;;16268:76;31514:44:0;;;;;;;;31000:566;;;;;;;;;:::o;30406:586::-;30507:15;30524:23;30549:12;30563:23;30588:12;30602:18;30624:19;30635:7;30624:10;:19::i;:::-;-1:-1:-1;;;;;30672:15:0;;;;;;:7;:15;;;;;;30506:137;;-1:-1:-1;30506:137:0;;-1:-1:-1;30506:137:0;;-1:-1:-1;30506:137:0;-1:-1:-1;30506:137:0;-1:-1:-1;30506:137:0;-1:-1:-1;30672:28:0;;30506:137;30672:19;:28::i;:::-;-1:-1:-1;;;;;30654:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30732:18;;;;;:7;:18;;;;;:39;;30755:15;30732:22;:39::i;:::-;-1:-1:-1;;;;;30711:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30803:7;:18;;;;:39;;30826:15;30803:22;:39::i;31574:642::-;31677:15;31694:23;31719:12;31733:23;31758:12;31772:18;31794:19;31805:7;31794:10;:19::i;:::-;-1:-1:-1;;;;;31842:15:0;;;;;;:7;:15;;;;;;31676:137;;-1:-1:-1;31676:137:0;;-1:-1:-1;31676:137:0;;-1:-1:-1;31676:137:0;-1:-1:-1;31676:137:0;-1:-1:-1;31676:137:0;-1:-1:-1;31842:28:0;;31862:7;31842:19;:28::i;:::-;-1:-1:-1;;;;;31824:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31899:7;:15;;;;:28;;31919:7;31899:19;:28::i;29896:502::-;29995:15;30012:23;30037:12;30051:23;30076:12;30090:18;30112:19;30123:7;30112:10;:19::i;:::-;-1:-1:-1;;;;;30160:15:0;;;;;;:7;:15;;;;;;29994:137;;-1:-1:-1;29994:137:0;;-1:-1:-1;29994:137:0;;-1:-1:-1;29994:137:0;-1:-1:-1;29994:137:0;-1:-1:-1;29994:137:0;-1:-1:-1;30160:28:0;;29994:137;30160:19;:28::i;34692:136::-;34756:7;34783:37;34814:5;34783:26;34795:13;;34783:7;:11;;:26;;;;:::i;34840:144::-;34910:7;34937:39;34970:5;34937:28;34949:15;;34937:7;:11;;:28;;;;:::i;34325:355::-;34388:19;34411:10;:8;:10::i;:::-;34388:33;-1:-1:-1;34432:18:0;34453:27;:10;34388:33;34453:14;:27::i;:::-;34532:4;34516:22;;;;:7;:22;;;;;;34432:48;;-1:-1:-1;34516:38:0;;34432:48;34516:26;:38::i;:::-;34507:4;34491:22;;;;:7;:22;;;;;;;;:63;;;;34568:11;:26;;;;;;34565:107;;;34650:4;34634:22;;;;:7;:22;;;;;;:38;;34661:10;34634:26;:38::i;:::-;34625:4;34609:22;;;;:7;:22;;;;;:63;34325:355;;;:::o;32224:147::-;32302:7;;:17;;32314:4;32302:11;:17::i;:::-;32292:7;:27;32343:10;;:20;;32358:4;32343:14;:20::i;:::-;32330:10;:33;-1:-1:-1;;32224:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:325::-;2154:6;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:2;;;2236:6;2228;2221:22;2183:2;2280:9;2267:23;2299:31;2324:5;2299:31;:::i;:::-;2349:5;2401:2;2386:18;;;;2373:32;;-1:-1:-1;;;2173:238:1:o;2416:457::-;2502:6;2510;2563:2;2551:9;2542:7;2538:23;2534:32;2531:2;;;2584:6;2576;2569:22;2531:2;2629:9;2616:23;2662:18;2654:6;2651:30;2648:2;;;2699:6;2691;2684:22;2648:2;2743:70;2805:7;2796:6;2785:9;2781:22;2743:70;:::i;:::-;2832:8;;2717:96;;-1:-1:-1;2521:352:1;-1:-1:-1;;;;2521:352:1:o;2878:586::-;2970:6;2978;2986;3039:2;3027:9;3018:7;3014:23;3010:32;3007:2;;;3060:6;3052;3045:22;3007:2;3105:9;3092:23;3138:18;3130:6;3127:30;3124:2;;;3175:6;3167;3160:22;3124:2;3219:70;3281:7;3272:6;3261:9;3257:22;3219:70;:::i;:::-;3308:8;;-1:-1:-1;3193:96:1;-1:-1:-1;;3393:2:1;3378:18;;3365:32;3406:28;3365:32;3406:28;:::i;:::-;3453:5;3443:15;;;2997:467;;;;;:::o;3469:1161::-;3564:6;3595:2;3638;3626:9;3617:7;3613:23;3609:32;3606:2;;;3659:6;3651;3644:22;3606:2;3697:9;3691:16;3726:18;3767:2;3759:6;3756:14;3753:2;;;3788:6;3780;3773:22;3753:2;3831:6;3820:9;3816:22;3806:32;;3876:7;3869:4;3865:2;3861:13;3857:27;3847:2;;3903:6;3895;3888:22;3847:2;3937;3931:9;3959:2;3955;3952:10;3949:2;;;3965:18;;:::i;:::-;4011:2;4008:1;4004:10;4043:2;4037:9;4106:2;4102:7;4097:2;4093;4089:11;4085:25;4077:6;4073:38;4161:6;4149:10;4146:22;4141:2;4129:10;4126:18;4123:46;4120:2;;;4172:18;;:::i;:::-;4208:2;4201:22;4258:18;;;4292:15;;;;-1:-1:-1;4327:11:1;;;4357;;;4353:20;;4350:33;-1:-1:-1;4347:2:1;;;4401:6;4393;4386:22;4347:2;4428:6;4419:15;;4443:156;4457:2;4454:1;4451:9;4443:156;;;4514:10;;4502:23;;4475:1;4468:9;;;;;4545:12;;;;4577;;4443:156;;;-1:-1:-1;4618:6:1;3575:1055;-1:-1:-1;;;;;;;;3575:1055:1:o;4635:251::-;4691:6;4744:2;4732:9;4723:7;4719:23;4715:32;4712:2;;;4765:6;4757;4750:22;4712:2;4809:9;4796:23;4828:28;4850:5;4828:28;:::i;4891:255::-;4958:6;5011:2;4999:9;4990:7;4986:23;4982:32;4979:2;;;5032:6;5024;5017:22;4979:2;5069:9;5063:16;5088:28;5110:5;5088:28;:::i;5151:411::-;5232:6;5240;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5314:6;5306;5299:22;5567:190;5626:6;5679:2;5667:9;5658:7;5654:23;5650:32;5647:2;;;5700:6;5692;5685:22;5647:2;-1:-1:-1;5728:23:1;;5637:120;-1:-1:-1;5637:120:1:o;5762:194::-;5832:6;5885:2;5873:9;5864:7;5860:23;5856:32;5853:2;;;5906:6;5898;5891:22;5853:2;-1:-1:-1;5934:16:1;;5843:113;-1:-1:-1;5843:113:1:o;5961:319::-;6026:6;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:2;;;6108:6;6100;6093:22;6055:2;6149:9;6136:23;6126:33;;6209:2;6198:9;6194:18;6181:32;6222:28;6244:5;6222:28;:::i;6285:316::-;6373:6;6381;6389;6442:2;6430:9;6421:7;6417:23;6413:32;6410:2;;;6463:6;6455;6448:22;6410:2;6497:9;6491:16;6481:26;;6547:2;6536:9;6532:18;6526:25;6516:35;;6591:2;6580:9;6576:18;6570:25;6560:35;;6400:201;;;;;:::o;6606:395::-;6692:6;6700;6708;6716;6769:3;6757:9;6748:7;6744:23;6740:33;6737:2;;;6791:6;6783;6776:22;6737:2;-1:-1:-1;;6819:23:1;;;6889:2;6874:18;;6861:32;;-1:-1:-1;6940:2:1;6925:18;;6912:32;;6991:2;6976:18;6963:32;;-1:-1:-1;6727:274:1;-1:-1:-1;6727:274:1:o;7006:464::-;7101:6;7109;7117;7125;7133;7186:3;7174:9;7165:7;7161:23;7157:33;7154:2;;;7208:6;7200;7193:22;7154:2;-1:-1:-1;;7236:23:1;;;7306:2;7291:18;;7278:32;;-1:-1:-1;7357:2:1;7342:18;;7329:32;;7408:2;7393:18;;7380:32;;-1:-1:-1;7459:3:1;7444:19;7431:33;;-1:-1:-1;7144:326:1;-1:-1:-1;7144:326:1:o;7475:501::-;7536:3;7574:5;7568:12;7601:6;7596:3;7589:19;7627:4;7656:2;7651:3;7647:12;7640:19;;7680:5;7675:3;7668:18;7724:2;7719:3;7709:18;7745:3;7757:194;7771:6;7768:1;7765:13;7757:194;;;7836:13;;-1:-1:-1;;;;;7832:39:1;7820:52;;7892:12;;;;7868:1;7927:14;;;;7786:9;7757:194;;;-1:-1:-1;7967:3:1;;7544:432;-1:-1:-1;;;;;7544:432:1:o;9816:603::-;9928:4;9957:2;9986;9975:9;9968:21;10018:6;10012:13;10061:6;10056:2;10045:9;10041:18;10034:34;10086:4;10099:140;10113:6;10110:1;10107:13;10099:140;;;10208:14;;;10204:23;;10198:30;10174:17;;;10193:2;10170:26;10163:66;10128:10;;10099:140;;;10257:6;10254:1;10251:13;10248:2;;;10327:4;10322:2;10313:6;10302:9;10298:22;10294:31;10287:45;10248:2;-1:-1:-1;10403:2:1;10382:15;-1:-1:-1;;10378:29:1;10363:45;;;;10410:2;10359:54;;9937:482;-1:-1:-1;;;9937:482:1:o;13879:356::-;14081:2;14063:21;;;14100:18;;;14093:30;14159:34;14154:2;14139:18;;14132:62;14226:2;14211:18;;14053:182::o;16349:337::-;16553:6;16542:9;16535:25;16596:2;16591;16580:9;16576:18;16569:30;16516:4;16616:64;16676:2;16665:9;16661:18;16653:6;16616:64;:::i;:::-;16608:72;16525:161;-1:-1:-1;;;;16525:161:1:o;16691:587::-;16987:6;16976:9;16969:25;17030:6;17025:2;17014:9;17010:18;17003:34;17073:3;17068:2;17057:9;17053:18;17046:31;16950:4;17094:65;17154:3;17143:9;17139:19;17131:6;17094:65;:::i;:::-;-1:-1:-1;;;;;17195:32:1;;;;17190:2;17175:18;;17168:60;-1:-1:-1;17259:3:1;17244:19;17237:35;17086:73;16959:319;-1:-1:-1;;;16959:319:1:o;17940:128::-;17980:3;18011:1;18007:6;18004:1;18001:13;17998:2;;;18017:18;;:::i;:::-;-1:-1:-1;18053:9:1;;17988:80::o;18073:217::-;18113:1;18139;18129:2;;-1:-1:-1;;;18164:31:1;;18218:4;18215:1;18208:15;18246:4;18171:1;18236:15;18129:2;-1:-1:-1;18275:9:1;;18119:171::o;18295:168::-;18335:7;18401:1;18397;18393:6;18389:14;18386:1;18383:21;18378:1;18371:9;18364:17;18360:45;18357:2;;;18408:18;;:::i;:::-;-1:-1:-1;18448:9:1;;18347:116::o;18468:125::-;18508:4;18536:1;18533;18530:8;18527:2;;;18541:18;;:::i;:::-;-1:-1:-1;18578:9:1;;18517:76::o;18598:380::-;18677:1;18673:12;;;;18720;;;18741:2;;18795:4;18787:6;18783:17;18773:27;;18741:2;18848;18840:6;18837:14;18817:18;18814:38;18811:2;;;18894:10;18889:3;18885:20;18882:1;18875:31;18929:4;18926:1;18919:15;18957:4;18954:1;18947:15;18811:2;;18653:325;;;:::o;18983:135::-;19022:3;-1:-1:-1;;19043:17:1;;19040:2;;;19063:18;;:::i;:::-;-1:-1:-1;19110:1:1;19099:13;;19030:88::o;19123:127::-;19184:10;19179:3;19175:20;19172:1;19165:31;19215:4;19212:1;19205:15;19239:4;19236:1;19229:15;19255:127;19316:10;19311:3;19307:20;19304:1;19297:31;19347:4;19344:1;19337:15;19371:4;19368:1;19361:15;19387:131;-1:-1:-1;;;;;19462:31:1;;19452:42;;19442:2;;19508:1;19505;19498:12;19442:2;19432:86;:::o;19523:118::-;19609:5;19602:13;19595:21;19588:5;19585:32;19575:2;;19631:1;19628;19621:12
Swarm Source
ipfs://8707c22a952c21e3b91b386426c41568c2c065780ec9d298ac8280a5b6103b5a
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.