ERC-20
Overview
Max Total Supply
1,000,000,000 MANTIS
Holders
96
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
945,769.427662426 MANTISValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MANTIS
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 MANTIS is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; uint256 public deadBlocks = 2; uint256 public launchedAt = 0; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public _maxWalletToken = _tTotal.div(1000).mul(10); //2% for first few mins uint256 public _buyLiquidityFee = 0; uint256 public _buymarketdevFee = 100; uint256 public _buyReflectionFee = 0; uint256 public _sellLiquidityFee = 0; uint256 public _sellmarketdevFee = 350; uint256 public _sellReflectionFee = 0; uint256 private liquidityFee = _buyLiquidityFee; uint256 private marketdevFee = _buymarketdevFee; uint256 private reflectionFee=_buyReflectionFee; uint256 private totalFee = liquidityFee.add(marketdevFee); uint256 private currenttotalFee = totalFee; uint256 public swapThreshold = _tTotal.div(10000).mul(20); //0.2% bool inSwap; bool public tradingOpen = false; bool public zeroBuyTaxmode = false; bool private antiBotmode = true; string private _name = "Mantis"; string private _symbol = "MANTIS"; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address payable private marketdevWallet = payable (0xbAaF83979D1B31773680051bA9fC932A162665E7); address DEAD = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isSniper; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isMaxWalletExempt; mapping (address => bool) private _isExcluded; mapping (address => bool) private _isTrusted; address[] private _excluded; 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; _isTrusted[owner()] = true; _isTrusted[uniswapV2Pair] = true; emit Transfer(address(0), _msgSender(), _tTotal); } 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 approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function _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 transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(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], "DEAD"); require(!_isSniper[from], "DEAD"); if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading bool takeFee = false; //take fee on swaps if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) { takeFee = true; } if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && ((launchedAt + deadBlocks) > block.number)){ require(amount+ balanceOf(to)<=_maxWalletToken, "Total Holding is currently limited"); } currenttotalFee=totalFee; reflectionFee=_buyReflectionFee; if(tradingOpen && to == uniswapV2Pair) { //sell currenttotalFee= _sellLiquidityFee.add(_sellmarketdevFee); reflectionFee=_sellReflectionFee; } //antibot if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){ _isSniper[to]=true; } //only bot if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks) && antiBotmode){ currenttotalFee=990; } //buys if(zeroBuyTaxmode){ if(tradingOpen && from == uniswapV2Pair) { currenttotalFee=0; } } //sell if (!inSwap && tradingOpen && to == uniswapV2Pair) { uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance>=swapThreshold){ contractTokenBalance = swapThreshold; swapTokens(contractTokenBalance); } } _tokenTransfer(from,to,amount,takeFee); } 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 _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 _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); } //Swap and send 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 amountETHmarketdev = amountETH.mul(marketdevFee).div(totalETHFee); //Send to marketdev wallet uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(amountETHmarketdev,marketdevWallet); } if (amountToLiquify > 0) { addLiquidity(amountToLiquify,amountETHLiquidity); } } function sendETHToFee(uint256 amount,address payable wallet) private { wallet.transfer(amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //-------------------Private View------------------- 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 _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 calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(reflectionFee).div( 10**3 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(currenttotalFee).div( 10**3 ); } //-------------------Public View------------------- 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 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 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 isSniper(address account) public view returns (bool) { return _isSniper[account]; } 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; } } //-------------------only Owner------------------- 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 openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() { tradingOpen = _status; excludeFromReward(address(this)); excludeFromReward(uniswapV2Pair); if(tradingOpen && launchedAt == 0){ launchedAt = block.number; deadBlocks = _deadBlocks; } } function removeTaxation(bool _status) external onlyOwner() { zeroBuyTaxmode=_status; } function initializeAntiBot(bool _status) external onlyOwner() { antiBotmode=_status; } function setRouter(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 excludeMultiple(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function excludeFromFees(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isExcludedFromFee[addresses[i]] = true; } } function includeInFees(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address _marketdevWallet) external onlyOwner() { marketdevWallet = payable(_marketdevWallet); } function blacklist(address[] calldata addresses, bool status) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isSniper[addresses[i]] = status; } } function manageTrustedAccounts(address[] calldata addresses) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isTrusted[addresses[i]]=true; } } function withdrawSurplusETH(address payable receipient) public onlyOwner { receipient.transfer(address(this).balance); } function withdrawStuck(IERC20 token, address to) public onlyOwner { uint256 balance = token.balanceOf(address(this)); token.transfer(to, balance); } function setMaxWallet(uint256 maxWallPercent_base1000) external onlyOwner() { _maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000); } function setExemptFromLimits(address _addr) external onlyOwner { _isMaxWalletExempt[_addr] = true; } function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; } function multiTransfer( address[] calldata addresses, uint256[] calldata tokens) external onlyOwner { require(addresses.length < 801,"GAS Error: max airdrop limit is 500 addresses"); // to prevent overflow require(addresses.length == tokens.length,"Mismatch between Address and token count"); uint256 SCCC = 0; for(uint i=0; i < addresses.length; i++){ SCCC = SCCC + (tokens[i] * 10**_decimals); } require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _transfer(msg.sender,addresses[i],(tokens[i] * 10**_decimals)); } } function multiTransferAndExclude( address[] calldata addresses, uint256 tokens) external onlyOwner { require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow uint256 SCCC = tokens* 10**_decimals * addresses.length; require(balanceOf(msg.sender) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _transfer(msg.sender,addresses[i],(tokens* 10**_decimals)); } } function setBuyFees(uint256 _bReflectionFee, uint256 _bLiquidityFee, uint256 _bMarketdevFee) external onlyOwner { _buyLiquidityFee = _bLiquidityFee; _buymarketdevFee = _bMarketdevFee; _buyReflectionFee= _bReflectionFee; reflectionFee= _bReflectionFee; liquidityFee = _bLiquidityFee; marketdevFee = _bMarketdevFee; totalFee = liquidityFee.add(marketdevFee); } function setSellFees(uint256 _sReflectionFee,uint256 _sLiquidityFee, uint256 _sMarketdevFee) external onlyOwner { _sellLiquidityFee = _sLiquidityFee; _sellmarketdevFee = _sMarketdevFee; _sellReflectionFee= _sReflectionFee; } //to recieve ETH uniswapV2Router 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":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buymarketdevFee","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":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellmarketdevFee","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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFees","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":"includeInFees","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":"bool","name":"_status","type":"bool"}],"name":"initializeAntiBot","outputs":[],"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":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manageTrustedAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransferAndExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"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":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"removeTaxation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_bLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bMarketdevFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketdevWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sMarketdevFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","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":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withdrawSurplusETH","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
60806040526003805460ff19166009908117909155600260045560006005556200002b90600a620007b3565b6200003b90633b9aca00620007c4565b60068190556200004e90600019620007f4565b6200005c906000196200080b565b6007556006546200007f90600a9062000078906103e862000520565b9062000573565b6009556000600a556064600b556000600c556000600d5561015e600e556000600f55600a54601055600b54601155600c54601255620000cc6011546010546200060160201b90919060201c565b60138190556014908155600654620000ed9190620000789061271062000520565b6015556016805463ffffff00191663010000001790556040805180820190915260068152654d616e74697360d01b60208201526017906200012f9082620008c6565b506040805180820190915260068152654d414e54495360d01b60208201526018906200015c9082620008c6565b50601b80546001600160a01b031990811673baaf83979d1b31773680051ba9fc932a162665e717909155601c805490911661dead179055348015620001a057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600754336000908152601d602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000992565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e3919062000992565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000992565b601a80546001600160a01b03199081166001600160a01b0393841617909155601980549091169183169190911790556001602160006200039f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526021909252812080549092166001908117909255602290620003f86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526022909352818320805485166001908117909155601a54821684528284208054861682179055601c549091168352908220805490931681179092556024906200047a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a5490911681526024909252902080549091166001179055620004c93390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200051191815260200190565b60405180910390a35062000a3a565b60006200056a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066460201b60201c565b90505b92915050565b60008260000362000587575060006200056d565b6000620005958385620007c4565b905082620005a48583620009bd565b146200056a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006108385620009d4565b9050838110156200056a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005f8565b60008183620006885760405162461bcd60e51b8152600401620005f89190620009ea565b506000620006978486620009bd565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f7578160001904821115620006db57620006db620006a0565b80851615620006e957918102915b93841c9390800290620006bb565b509250929050565b60008262000710575060016200056d565b816200071f575060006200056d565b8160018114620007385760028114620007435762000763565b60019150506200056d565b60ff841115620007575762000757620006a0565b50506001821b6200056d565b5060208310610133831016604e8410600b841016171562000788575081810a6200056d565b620007948383620006b6565b8060001904821115620007ab57620007ab620006a0565b029392505050565b60006200056a60ff841683620006ff565b80820281158282048414176200056d576200056d620006a0565b634e487b7160e01b600052601260045260246000fd5b600082620008065762000806620007de565b500690565b818103818111156200056d576200056d620006a0565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084c57607f821691505b6020821081036200086d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c157600081815260208120601f850160051c810160208610156200089c5750805b601f850160051c820191505b81811015620008bd57828155600101620008a8565b5050505b505050565b81516001600160401b03811115620008e257620008e262000821565b620008fa81620008f3845462000837565b8462000873565b602080601f831160018114620009325760008415620009195750858301515b600019600386901b1c1916600185901b178555620008bd565b600085815260208120601f198616915b82811015620009635788860151825594840194600190910190840162000942565b5085821015620009825787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a557600080fd5b81516001600160a01b03811681146200056a57600080fd5b600082620009cf57620009cf620007de565b500490565b808201808211156200056d576200056d620006a0565b600060208083528351808285015260005b8181101562000a1957858101830151858201604001528201620009fb565b506000604082860101526040601f19601f8301168501019250505092915050565b613a128062000a4a6000396000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063ae522e61116100f7578063f259c57b11610095578063fabb0b4f1161006f578063fabb0b4f146109d0578063fcc91bff146109e6578063feda4bed14610a06578063ffb54a9914610a2657600080fd5b8063f259c57b1461097a578063f2fde38b1461099a578063f3b1e83b146109ba57600080fd5b8063c997eb8d116100d1578063c997eb8d146108de578063dc44b6a0146108fe578063dd62ed3e14610914578063e0c5fb0c1461095a57600080fd5b8063ae522e6114610888578063bf56b371146108a8578063c0d78655146108be57600080fd5b806388f820201161016457806392f428701161013e57806392f428701461081357806395d89b4114610833578063a457c2d714610848578063a9059cbb1461086857600080fd5b806388f820201461079c5780638da5cb5b146107d55780638f4590d2146107f357600080fd5b80637598f8bc116101a05780637598f8bc1461073a57806378109e541461075057806380dfb2461461076657806388790a681461078657600080fd5b806370a08231146106ef578063715018a61461070f57806372fdf6ee1461072457600080fd5b80632691bc80116102a05780633bd5d1731161023e57806349bd5a5e1161021857806349bd5a5e1461066f57806352390c021461068f5780635d0044ca146106af5780635d098b38146106cf57600080fd5b80633bd5d17314610619578063401aa5c0146106395780634549b0391461064f57600080fd5b80632d8381191161027a5780632d83811914610597578063313ce567146105b75780633685d419146105d957806339509351146105f957600080fd5b80632691bc801461053757806328a23cd1146105575780632d4103d61461057757600080fd5b806313114a9d1161030d57806316a2f82a116102e757806316a2f82a146104c257806318160ddd146104e25780631e89d545146104f757806323b872dd1461051757600080fd5b806313114a9d14610455578063135d39431461046a5780631694505e1461048a57600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630d075d9c146103db5780630f3a325f146103fd5780630f683e901461043557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b60405161038091906132b6565b3480156103b757600080fd5b506103cb6103c636600461331c565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103fb6103f6366004613348565b610aee565b005b34801561040957600080fd5b506103cb610418366004613374565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561044157600080fd5b506103fb610450366004613348565b610b51565b34801561046157600080fd5b50600854610376565b34801561047657600080fd5b506103fb6104853660046133dd565b610b89565b34801561049657600080fd5b506019546104aa906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156104ce57600080fd5b506103fb6104dd366004613374565b610c28565b3480156104ee57600080fd5b50600654610376565b34801561050357600080fd5b506103fb61051236600461341f565b610c73565b34801561052357600080fd5b506103cb61053236600461348b565b610ea4565b34801561054357600080fd5b506016546103cb9062010000900460ff1681565b34801561056357600080fd5b506103fb6105723660046134cc565b610f0d565b34801561058357600080fd5b506103fb610592366004613513565b61101f565b3480156105a357600080fd5b506103766105b2366004613531565b6110a4565b3480156105c357600080fd5b5060035460405160ff9091168152602001610380565b3480156105e557600080fd5b506103fb6105f4366004613374565b611128565b34801561060557600080fd5b506103cb61061436600461331c565b6112da565b34801561062557600080fd5b506103fb610634366004613531565b611310565b34801561064557600080fd5b50610376600c5481565b34801561065b57600080fd5b5061037661066a36600461354a565b6113fa565b34801561067b57600080fd5b50601a546104aa906001600160a01b031681565b34801561069b57600080fd5b506103fb6106aa366004613374565b611487565b3480156106bb57600080fd5b506103fb6106ca366004613531565b611571565b3480156106db57600080fd5b506103fb6106ea366004613374565b6115c2565b3480156106fb57600080fd5b5061037661070a366004613374565b61160e565b34801561071b57600080fd5b506103fb61166d565b34801561073057600080fd5b50610376600b5481565b34801561074657600080fd5b50610376600f5481565b34801561075c57600080fd5b5061037660095481565b34801561077257600080fd5b506103fb610781366004613374565b6116e1565b34801561079257600080fd5b50610376600d5481565b3480156107a857600080fd5b506103cb6107b7366004613374565b6001600160a01b031660009081526023602052604090205460ff1690565b3480156107e157600080fd5b506000546001600160a01b03166104aa565b3480156107ff57600080fd5b506103fb61080e36600461356f565b611740565b34801561081f57600080fd5b506103fb61082e3660046133dd565b61178a565b34801561083f57600080fd5b5061039e611824565b34801561085457600080fd5b506103cb61086336600461331c565b611833565b34801561087457600080fd5b506103cb61088336600461331c565b611882565b34801561089457600080fd5b506103fb6108a3366004613591565b61188f565b3480156108b457600080fd5b5061037660055481565b3480156108ca57600080fd5b506103fb6108d9366004613374565b6118d7565b3480156108ea57600080fd5b506103fb6108f93660046135ae565b611c03565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f3660046134cc565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506103fb610975366004613591565b611c9c565b34801561098657600080fd5b506103fb610995366004613374565b611ce2565b3480156109a657600080fd5b506103fb6109b5366004613374565b611d30565b3480156109c657600080fd5b50610376600e5481565b3480156109dc57600080fd5b5061037660045481565b3480156109f257600080fd5b506103fb610a01366004613605565b611e1a565b348015610a1257600080fd5b506103fb610a21366004613374565b611f9a565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a5490613651565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090613651565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484611fe8565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061368b565b60405180910390fd5b600a829055600b819055600c839055601283905560108290556011819055610b49828261210c565b601355505050565b6000546001600160a01b03163314610b7b5760405162461bcd60e51b8152600401610b189061368b565b600d91909155600e55600f55565b6000546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610b189061368b565b60005b81811015610c2357600160246000858585818110610bd657610bd66136c0565b9050602002016020810190610beb9190613374565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610c1c816136ec565b9050610bb6565b505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314610c9d5760405162461bcd60e51b8152600401610b189061368b565b6103218310610d045760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610d645760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610dc257600354610d819060ff16600a6137e9565b848483818110610d9357610d936136c0565b90506020020135610da491906137f8565b610dae908361380f565b915080610dba816136ec565b915050610d68565b5080610dcd3361160e565b1015610e1b5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610e9c57610e8a33878784818110610e3c57610e3c6136c0565b9050602002016020810190610e519190613374565b600354610e629060ff16600a6137e9565b878786818110610e7457610e746136c0565b90506020020135610e8591906137f8565b61216b565b80610e94816136ec565b915050610e1e565b505050505050565b6000610eb184848461216b565b610f038433610efe85604051806060016040528060288152602001613990602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906126a7565b611fe8565b5060019392505050565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610b189061368b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190613822565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061383b565b50505050565b6000546001600160a01b031633146110495760405162461bcd60e51b8152600401610b189061368b565b6016805461ff0019166101008415150217905561106530611487565b601a5461107a906001600160a01b0316611487565b601654610100900460ff1680156110915750600554155b156110a0574360055560048190555b5050565b600060075482111561110b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b60006111156126e1565b90506111218382612704565b9392505050565b6000546001600160a01b031633146111525760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03811660009081526023602052604090205460ff166111ba5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b6025548110156110a057816001600160a01b0316602582815481106111e4576111e46136c0565b6000918252602090912001546001600160a01b0316036112c8576025805461120e90600190613858565b8154811061121e5761121e6136c0565b600091825260209091200154602580546001600160a01b03909216918390811061124a5761124a6136c0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806112a2576112a261386b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112d2816136ec565b9150506111bd565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610efe908661210c565b3360008181526023602052604090205460ff16156113855760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b600061139083612746565b505050506001600160a01b0384166000908152601d60205260409020549192506113bc91905082612795565b6001600160a01b0383166000908152601d60205260409020556007546113e29082612795565b6007556008546113f2908461210c565b600855505050565b600060065483111561144e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b8161146d57600061145e84612746565b50939550610ae8945050505050565b600061147884612746565b50929550610ae8945050505050565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b0381166000908152601d60205260409020541561150b576001600160a01b0381166000908152601d60205260409020546114f1906110a4565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b189061368b565b6115bc816115b66103e860065461270490919063ffffffff16565b906127d7565b60095550565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610b189061368b565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526023602052604081205460ff161561164b57506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae8906110a4565b6000546001600160a01b031633146116975760405162461bcd60e51b8152600401610b189061368b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b189061368b565b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156110a0573d6000803e3d6000fd5b6000546001600160a01b0316331461176a5760405162461bcd60e51b8152600401610b189061368b565b808260065461177991906137f8565b6117839190613881565b6015555050565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610b189061368b565b60005b81811015610c23576001602160008585858181106117d7576117d76136c0565b90506020020160208101906117ec9190613374565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561181d816136ec565b90506117b7565b606060188054610a5490613651565b6000610ae43384610efe856040518060600160405280602581526020016139b860259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906126a7565b6000610ae433848461216b565b6000546001600160a01b031633146118b95760405162461bcd60e51b8152600401610b189061368b565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610b189061368b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a91906138a3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119db91906138a3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a91906138a3565b90506001600160a01b038116611bc357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906138a3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906138a3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e91906138a3565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611bdf565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610b189061368b565b60005b82811015611019578160206000868685818110611c4f57611c4f6136c0565b9050602002016020810190611c649190613374565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611c95816136ec565b9050611c30565b6000546001600160a01b03163314611cc65760405162461bcd60e51b8152600401610b189061368b565b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611d0c5760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611d5a5760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b038116611dbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e445760405162461bcd60e51b8152600401610b189061368b565b6107d18210611eac5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b6003546000908390611ec29060ff16600a6137e9565b611ecc90846137f8565b611ed691906137f8565b905080611ee23361160e565b1015611f305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b83811015611f9357611f8133868684818110611f5157611f516136c0565b9050602002016020810190611f669190613374565b600354611f779060ff16600a6137e9565b610e8590876137f8565b80611f8b816136ec565b915050611f33565b5050505050565b6000546001600160a01b03163314611fc45760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6001600160a01b03831661204a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166120ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080612119838561380f565b9050838110156111215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b0382166122315760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116122935760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156122e45760405162461bcd60e51b8152600401610b18906020808252600490820152631111505160e21b604082015260600190565b6001600160a01b038316600090815260208052604090205460ff16156123355760405162461bcd60e51b8152600401610b18906020808252600490820152631111505160e21b604082015260600190565b6000546001600160a01b0384811691161480159061236157506000546001600160a01b03838116911614155b156123bd57601654610100900460ff166123bd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b03858116911614806123e95750601a546001600160a01b038481169116145b801561243157506001600160a01b03841660009081526021602052604090205460ff168061242f57506001600160a01b03831660009081526021602052604090205460ff165b155b1561243a575060015b600060055411801561247e57506001600160a01b03831660009081526022602052604090205460ff1615801561247e57506000546001600160a01b03858116911614155b8015612498575043600454600554612496919061380f565b115b1561250c576009546124a98461160e565b6124b3908461380f565b111561250c5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561253c5750601a546001600160a01b038481169116145b1561255a57600e54600d546125509161210c565b601455600f546012555b600060055411801561257a575043600454600554612578919061380f565b115b156125a2576001600160a01b03831660009081526020805260409020805460ff191660011790555b60006005541180156125c257506000546001600160a01b03858116911614155b80156125dd57506004546005546125d9919061380f565b4311155b80156125f257506016546301000000900460ff165b156125fe576103de6014555b60165462010000900460ff161561263e57601654610100900460ff1680156126335750601a546001600160a01b038581169116145b1561263e5760006014555b60165460ff161580156126585750601654610100900460ff165b80156126715750601a546001600160a01b038481169116145b1561269b5760006126813061160e565b90506015548110612699575060155461269981612859565b505b61101984848484612945565b600081848411156126cb5760405162461bcd60e51b8152600401610b1891906132b6565b5060006126d88486613858565b95945050505050565b60008060006126ee612a71565b90925090506126fd8282612704565b9250505090565b600061112183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf3565b600080600080600080600080600061275d8a612c21565b925092509250600080600061277b8d86866127766126e1565b612c63565b919f909e50909c50959a5093985091965092945050505050565b600061112183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126a7565b6000826000036127e957506000610ae8565b60006127f583856137f8565b9050826128028583613881565b146111215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6016805460ff191660011790556013546010546000916128899160029161288391829087906127d7565b90612704565b905060006128978383612795565b90506128a281612cb3565b60105447906000906128c2906128b9906002612704565b60135490612795565b905060006128e4600261288384612883601054886127d790919063ffffffff16565b9050600061290183612883601154876127d790919063ffffffff16565b905047801561292157601b546129219083906001600160a01b0316612e46565b8615612931576129318784612e7c565b50506016805460ff19169055505050505050565b6012546014548261295b57600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff16801561299c57506001600160a01b03851660009081526023602052604090205460ff16155b156129b1576129ac868686612f4a565b612a5d565b6001600160a01b03861660009081526023602052604090205460ff161580156129f257506001600160a01b03851660009081526023602052604090205460ff165b15612a02576129ac868686613070565b6001600160a01b03861660009081526023602052604090205460ff168015612a4257506001600160a01b03851660009081526023602052604090205460ff165b15612a52576129ac868686613119565b612a5d86868661318c565b82610e9c5760129190915560145550505050565b6007546006546000918291825b602554811015612bc35782601d600060258481548110612aa057612aa06136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b0b575081601e600060258481548110612ae457612ae46136c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2157600754600654945094505050509091565b612b67601d600060258481548110612b3b57612b3b6136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612795565b9250612baf601e600060258481548110612b8357612b836136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612795565b915080612bbb816136ec565b915050612a7e565b50600654600754612bd391612704565b821015612bea576007546006549350935050509091565b90939092509050565b60008183612c145760405162461bcd60e51b8152600401610b1891906132b6565b5060006126d88486613881565b600080600080612c30856131d0565b90506000612c3d866131ed565b90506000612c5582612c4f8986612795565b90612795565b979296509094509092505050565b6000808080612c7288866127d7565b90506000612c8088876127d7565b90506000612c8e88886127d7565b90506000612ca082612c4f8686612795565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ce857612ce86136c0565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6591906138a3565b81600181518110612d7857612d786136c0565b6001600160a01b039283166020918202929092010152601954612d9e9130911684611fe8565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dd7908590600090869030904290600401613904565b600060405180830381600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e3a929190613940565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610c23573d6000803e3d6000fd5b601954612e949030906001600160a01b031684611fe8565b6019546001600160a01b031663f305d719823085600080612ebd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f939190613961565b600080600080600080612f5c87612746565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150612f8e9088612795565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054612fbd9087612795565b6001600160a01b03808b166000908152601d602052604080822093909355908a1681522054612fec908661210c565b6001600160a01b0389166000908152601d602052604090205561300e8161320a565b6130188483613292565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161305d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061308287612746565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130b49087612795565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546130ea908461210c565b6001600160a01b0389166000908152601e6020908152604080832093909355601d90522054612fec908661210c565b60008060008060008061312b87612746565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061315d9088612795565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130b49087612795565b60008060008060008061319e87612746565b6001600160a01b038f166000908152601d6020526040902054959b50939950919750955093509150612fbd9087612795565b6000610ae86103e8612883601254856127d790919063ffffffff16565b6000610ae86103e8612883601454856127d790919063ffffffff16565b60006132146126e1565b9050600061322283836127d7565b306000908152601d602052604090205490915061323f908261210c565b306000908152601d602090815260408083209390935560239052205460ff1615610c2357306000908152601e602052604090205461327d908461210c565b306000908152601e6020526040902055505050565b60075461329f9083612795565b6007556008546132af908261210c565b6008555050565b600060208083528351808285015260005b818110156132e3578581018301518582016040015282016132c7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461331957600080fd5b50565b6000806040838503121561332f57600080fd5b823561333a81613304565b946020939093013593505050565b60008060006060848603121561335d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561338657600080fd5b813561112181613304565b60008083601f8401126133a357600080fd5b50813567ffffffffffffffff8111156133bb57600080fd5b6020830191508360208260051b85010111156133d657600080fd5b9250929050565b600080602083850312156133f057600080fd5b823567ffffffffffffffff81111561340757600080fd5b61341385828601613391565b90969095509350505050565b6000806000806040858703121561343557600080fd5b843567ffffffffffffffff8082111561344d57600080fd5b61345988838901613391565b9096509450602087013591508082111561347257600080fd5b5061347f87828801613391565b95989497509550505050565b6000806000606084860312156134a057600080fd5b83356134ab81613304565b925060208401356134bb81613304565b929592945050506040919091013590565b600080604083850312156134df57600080fd5b82356134ea81613304565b915060208301356134fa81613304565b809150509250929050565b801515811461331957600080fd5b6000806040838503121561352657600080fd5b823561333a81613505565b60006020828403121561354357600080fd5b5035919050565b6000806040838503121561355d57600080fd5b8235915060208301356134fa81613505565b6000806040838503121561358257600080fd5b50508035926020909101359150565b6000602082840312156135a357600080fd5b813561112181613505565b6000806000604084860312156135c357600080fd5b833567ffffffffffffffff8111156135da57600080fd5b6135e686828701613391565b90945092505060208401356135fa81613505565b809150509250925092565b60008060006040848603121561361a57600080fd5b833567ffffffffffffffff81111561363157600080fd5b61363d86828701613391565b909790965060209590950135949350505050565b600181811c9082168061366557607f821691505b60208210810361368557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016136fe576136fe6136d6565b5060010190565b600181815b80851115613740578160001904821115613726576137266136d6565b8085161561373357918102915b93841c939080029061370a565b509250929050565b60008261375757506001610ae8565b8161376457506000610ae8565b816001811461377a5760028114613784576137a0565b6001915050610ae8565b60ff841115613795576137956136d6565b50506001821b610ae8565b5060208310610133831016604e8410600b84101617156137c3575081810a610ae8565b6137cd8383613705565b80600019048211156137e1576137e16136d6565b029392505050565b600061112160ff841683613748565b8082028115828204841417610ae857610ae86136d6565b80820180821115610ae857610ae86136d6565b60006020828403121561383457600080fd5b5051919050565b60006020828403121561384d57600080fd5b815161112181613505565b81810381811115610ae857610ae86136d6565b634e487b7160e01b600052603160045260246000fd5b60008261389e57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138b557600080fd5b815161112181613304565b600081518084526020808501945080840160005b838110156138f95781516001600160a01b0316875295820195908201906001016138d4565b509495945050505050565b85815284602082015260a06040820152600061392360a08301866138c0565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061395960408301846138c0565b949350505050565b60008060006060848603121561397657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa5df0c9b09a8bdb5ca8fce4ac75beecbbf2c6307f6a27b43c39b75edfd0520864736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103545760003560e01c806370a08231116101c6578063ae522e61116100f7578063f259c57b11610095578063fabb0b4f1161006f578063fabb0b4f146109d0578063fcc91bff146109e6578063feda4bed14610a06578063ffb54a9914610a2657600080fd5b8063f259c57b1461097a578063f2fde38b1461099a578063f3b1e83b146109ba57600080fd5b8063c997eb8d116100d1578063c997eb8d146108de578063dc44b6a0146108fe578063dd62ed3e14610914578063e0c5fb0c1461095a57600080fd5b8063ae522e6114610888578063bf56b371146108a8578063c0d78655146108be57600080fd5b806388f820201161016457806392f428701161013e57806392f428701461081357806395d89b4114610833578063a457c2d714610848578063a9059cbb1461086857600080fd5b806388f820201461079c5780638da5cb5b146107d55780638f4590d2146107f357600080fd5b80637598f8bc116101a05780637598f8bc1461073a57806378109e541461075057806380dfb2461461076657806388790a681461078657600080fd5b806370a08231146106ef578063715018a61461070f57806372fdf6ee1461072457600080fd5b80632691bc80116102a05780633bd5d1731161023e57806349bd5a5e1161021857806349bd5a5e1461066f57806352390c021461068f5780635d0044ca146106af5780635d098b38146106cf57600080fd5b80633bd5d17314610619578063401aa5c0146106395780634549b0391461064f57600080fd5b80632d8381191161027a5780632d83811914610597578063313ce567146105b75780633685d419146105d957806339509351146105f957600080fd5b80632691bc801461053757806328a23cd1146105575780632d4103d61461057757600080fd5b806313114a9d1161030d57806316a2f82a116102e757806316a2f82a146104c257806318160ddd146104e25780631e89d545146104f757806323b872dd1461051757600080fd5b806313114a9d14610455578063135d39431461046a5780631694505e1461048a57600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103ab5780630d075d9c146103db5780630f3a325f146103fd5780630f683e901461043557600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660155481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b5061039e610a45565b60405161038091906132b6565b3480156103b757600080fd5b506103cb6103c636600461331c565b610ad7565b6040519015158152602001610380565b3480156103e757600080fd5b506103fb6103f6366004613348565b610aee565b005b34801561040957600080fd5b506103cb610418366004613374565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561044157600080fd5b506103fb610450366004613348565b610b51565b34801561046157600080fd5b50600854610376565b34801561047657600080fd5b506103fb6104853660046133dd565b610b89565b34801561049657600080fd5b506019546104aa906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156104ce57600080fd5b506103fb6104dd366004613374565b610c28565b3480156104ee57600080fd5b50600654610376565b34801561050357600080fd5b506103fb61051236600461341f565b610c73565b34801561052357600080fd5b506103cb61053236600461348b565b610ea4565b34801561054357600080fd5b506016546103cb9062010000900460ff1681565b34801561056357600080fd5b506103fb6105723660046134cc565b610f0d565b34801561058357600080fd5b506103fb610592366004613513565b61101f565b3480156105a357600080fd5b506103766105b2366004613531565b6110a4565b3480156105c357600080fd5b5060035460405160ff9091168152602001610380565b3480156105e557600080fd5b506103fb6105f4366004613374565b611128565b34801561060557600080fd5b506103cb61061436600461331c565b6112da565b34801561062557600080fd5b506103fb610634366004613531565b611310565b34801561064557600080fd5b50610376600c5481565b34801561065b57600080fd5b5061037661066a36600461354a565b6113fa565b34801561067b57600080fd5b50601a546104aa906001600160a01b031681565b34801561069b57600080fd5b506103fb6106aa366004613374565b611487565b3480156106bb57600080fd5b506103fb6106ca366004613531565b611571565b3480156106db57600080fd5b506103fb6106ea366004613374565b6115c2565b3480156106fb57600080fd5b5061037661070a366004613374565b61160e565b34801561071b57600080fd5b506103fb61166d565b34801561073057600080fd5b50610376600b5481565b34801561074657600080fd5b50610376600f5481565b34801561075c57600080fd5b5061037660095481565b34801561077257600080fd5b506103fb610781366004613374565b6116e1565b34801561079257600080fd5b50610376600d5481565b3480156107a857600080fd5b506103cb6107b7366004613374565b6001600160a01b031660009081526023602052604090205460ff1690565b3480156107e157600080fd5b506000546001600160a01b03166104aa565b3480156107ff57600080fd5b506103fb61080e36600461356f565b611740565b34801561081f57600080fd5b506103fb61082e3660046133dd565b61178a565b34801561083f57600080fd5b5061039e611824565b34801561085457600080fd5b506103cb61086336600461331c565b611833565b34801561087457600080fd5b506103cb61088336600461331c565b611882565b34801561089457600080fd5b506103fb6108a3366004613591565b61188f565b3480156108b457600080fd5b5061037660055481565b3480156108ca57600080fd5b506103fb6108d9366004613374565b6118d7565b3480156108ea57600080fd5b506103fb6108f93660046135ae565b611c03565b34801561090a57600080fd5b50610376600a5481565b34801561092057600080fd5b5061037661092f3660046134cc565b6001600160a01b039182166000908152601f6020908152604080832093909416825291909152205490565b34801561096657600080fd5b506103fb610975366004613591565b611c9c565b34801561098657600080fd5b506103fb610995366004613374565b611ce2565b3480156109a657600080fd5b506103fb6109b5366004613374565b611d30565b3480156109c657600080fd5b50610376600e5481565b3480156109dc57600080fd5b5061037660045481565b3480156109f257600080fd5b506103fb610a01366004613605565b611e1a565b348015610a1257600080fd5b506103fb610a21366004613374565b611f9a565b348015610a3257600080fd5b506016546103cb90610100900460ff1681565b606060178054610a5490613651565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8090613651565b8015610acd5780601f10610aa257610100808354040283529160200191610acd565b820191906000526020600020905b815481529060010190602001808311610ab057829003601f168201915b5050505050905090565b6000610ae4338484611fe8565b5060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061368b565b60405180910390fd5b600a829055600b819055600c839055601283905560108290556011819055610b49828261210c565b601355505050565b6000546001600160a01b03163314610b7b5760405162461bcd60e51b8152600401610b189061368b565b600d91909155600e55600f55565b6000546001600160a01b03163314610bb35760405162461bcd60e51b8152600401610b189061368b565b60005b81811015610c2357600160246000858585818110610bd657610bd66136c0565b9050602002016020810190610beb9190613374565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610c1c816136ec565b9050610bb6565b505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602160205260409020805460ff19169055565b6000546001600160a01b03163314610c9d5760405162461bcd60e51b8152600401610b189061368b565b6103218310610d045760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b18565b828114610d645760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b18565b6000805b84811015610dc257600354610d819060ff16600a6137e9565b848483818110610d9357610d936136c0565b90506020020135610da491906137f8565b610dae908361380f565b915080610dba816136ec565b915050610d68565b5080610dcd3361160e565b1015610e1b5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b84811015610e9c57610e8a33878784818110610e3c57610e3c6136c0565b9050602002016020810190610e519190613374565b600354610e629060ff16600a6137e9565b878786818110610e7457610e746136c0565b90506020020135610e8591906137f8565b61216b565b80610e94816136ec565b915050610e1e565b505050505050565b6000610eb184848461216b565b610f038433610efe85604051806060016040528060288152602001613990602891396001600160a01b038a166000908152601f6020908152604080832033845290915290205491906126a7565b611fe8565b5060019392505050565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610b189061368b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190613822565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061383b565b50505050565b6000546001600160a01b031633146110495760405162461bcd60e51b8152600401610b189061368b565b6016805461ff0019166101008415150217905561106530611487565b601a5461107a906001600160a01b0316611487565b601654610100900460ff1680156110915750600554155b156110a0574360055560048190555b5050565b600060075482111561110b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b18565b60006111156126e1565b90506111218382612704565b9392505050565b6000546001600160a01b031633146111525760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03811660009081526023602052604090205460ff166111ba5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b18565b60005b6025548110156110a057816001600160a01b0316602582815481106111e4576111e46136c0565b6000918252602090912001546001600160a01b0316036112c8576025805461120e90600190613858565b8154811061121e5761121e6136c0565b600091825260209091200154602580546001600160a01b03909216918390811061124a5761124a6136c0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601e82526040808220829055602390925220805460ff1916905560258054806112a2576112a261386b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112d2816136ec565b9150506111bd565b336000818152601f602090815260408083206001600160a01b03871684529091528120549091610ae4918590610efe908661210c565b3360008181526023602052604090205460ff16156113855760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b18565b600061139083612746565b505050506001600160a01b0384166000908152601d60205260409020549192506113bc91905082612795565b6001600160a01b0383166000908152601d60205260409020556007546113e29082612795565b6007556008546113f2908461210c565b600855505050565b600060065483111561144e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b18565b8161146d57600061145e84612746565b50939550610ae8945050505050565b600061147884612746565b50929550610ae8945050505050565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b0381166000908152601d60205260409020541561150b576001600160a01b0381166000908152601d60205260409020546114f1906110a4565b6001600160a01b0382166000908152601e60205260409020555b6001600160a01b03166000818152602360205260408120805460ff191660019081179091556025805491820181559091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b189061368b565b6115bc816115b66103e860065461270490919063ffffffff16565b906127d7565b60095550565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610b189061368b565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526023602052604081205460ff161561164b57506001600160a01b03166000908152601e602052604090205490565b6001600160a01b0382166000908152601d6020526040902054610ae8906110a4565b6000546001600160a01b031633146116975760405162461bcd60e51b8152600401610b189061368b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b189061368b565b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156110a0573d6000803e3d6000fd5b6000546001600160a01b0316331461176a5760405162461bcd60e51b8152600401610b189061368b565b808260065461177991906137f8565b6117839190613881565b6015555050565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610b189061368b565b60005b81811015610c23576001602160008585858181106117d7576117d76136c0565b90506020020160208101906117ec9190613374565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561181d816136ec565b90506117b7565b606060188054610a5490613651565b6000610ae43384610efe856040518060600160405280602581526020016139b860259139336000908152601f602090815260408083206001600160a01b038d16845290915290205491906126a7565b6000610ae433848461216b565b6000546001600160a01b031633146118b95760405162461bcd60e51b8152600401610b189061368b565b6016805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610b189061368b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196a91906138a3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119db91906138a3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a91906138a3565b90506001600160a01b038116611bc357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906138a3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906138a3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e91906138a3565b601a80546001600160a01b0319166001600160a01b0392909216919091179055611bdf565b601a80546001600160a01b0319166001600160a01b0383161790555b50601980546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611c2d5760405162461bcd60e51b8152600401610b189061368b565b60005b82811015611019578160206000868685818110611c4f57611c4f6136c0565b9050602002016020810190611c649190613374565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611c95816136ec565b9050611c30565b6000546001600160a01b03163314611cc65760405162461bcd60e51b8152600401610b189061368b565b60168054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611d0c5760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602160205260409020805460ff19166001179055565b6000546001600160a01b03163314611d5a5760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b038116611dbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b18565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e445760405162461bcd60e51b8152600401610b189061368b565b6107d18210611eac5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b18565b6003546000908390611ec29060ff16600a6137e9565b611ecc90846137f8565b611ed691906137f8565b905080611ee23361160e565b1015611f305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b18565b60005b83811015611f9357611f8133868684818110611f5157611f516136c0565b9050602002016020810190611f669190613374565b600354611f779060ff16600a6137e9565b610e8590876137f8565b80611f8b816136ec565b915050611f33565b5050505050565b6000546001600160a01b03163314611fc45760405162461bcd60e51b8152600401610b189061368b565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6001600160a01b03831661204a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b18565b6001600160a01b0382166120ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b18565b6001600160a01b038381166000818152601f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080612119838561380f565b9050838110156111215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b6001600160a01b0383166121cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b18565b6001600160a01b0382166122315760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b18565b600081116122935760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b18565b6001600160a01b038216600090815260208052604090205460ff16156122e45760405162461bcd60e51b8152600401610b18906020808252600490820152631111505160e21b604082015260600190565b6001600160a01b038316600090815260208052604090205460ff16156123355760405162461bcd60e51b8152600401610b18906020808252600490820152631111505160e21b604082015260600190565b6000546001600160a01b0384811691161480159061236157506000546001600160a01b03838116911614155b156123bd57601654610100900460ff166123bd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b18565b601a546000906001600160a01b03858116911614806123e95750601a546001600160a01b038481169116145b801561243157506001600160a01b03841660009081526021602052604090205460ff168061242f57506001600160a01b03831660009081526021602052604090205460ff165b155b1561243a575060015b600060055411801561247e57506001600160a01b03831660009081526022602052604090205460ff1615801561247e57506000546001600160a01b03858116911614155b8015612498575043600454600554612496919061380f565b115b1561250c576009546124a98461160e565b6124b3908461380f565b111561250c5760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b18565b601354601455600c54601255601654610100900460ff16801561253c5750601a546001600160a01b038481169116145b1561255a57600e54600d546125509161210c565b601455600f546012555b600060055411801561257a575043600454600554612578919061380f565b115b156125a2576001600160a01b03831660009081526020805260409020805460ff191660011790555b60006005541180156125c257506000546001600160a01b03858116911614155b80156125dd57506004546005546125d9919061380f565b4311155b80156125f257506016546301000000900460ff165b156125fe576103de6014555b60165462010000900460ff161561263e57601654610100900460ff1680156126335750601a546001600160a01b038581169116145b1561263e5760006014555b60165460ff161580156126585750601654610100900460ff165b80156126715750601a546001600160a01b038481169116145b1561269b5760006126813061160e565b90506015548110612699575060155461269981612859565b505b61101984848484612945565b600081848411156126cb5760405162461bcd60e51b8152600401610b1891906132b6565b5060006126d88486613858565b95945050505050565b60008060006126ee612a71565b90925090506126fd8282612704565b9250505090565b600061112183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf3565b600080600080600080600080600061275d8a612c21565b925092509250600080600061277b8d86866127766126e1565b612c63565b919f909e50909c50959a5093985091965092945050505050565b600061112183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126a7565b6000826000036127e957506000610ae8565b60006127f583856137f8565b9050826128028583613881565b146111215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6016805460ff191660011790556013546010546000916128899160029161288391829087906127d7565b90612704565b905060006128978383612795565b90506128a281612cb3565b60105447906000906128c2906128b9906002612704565b60135490612795565b905060006128e4600261288384612883601054886127d790919063ffffffff16565b9050600061290183612883601154876127d790919063ffffffff16565b905047801561292157601b546129219083906001600160a01b0316612e46565b8615612931576129318784612e7c565b50506016805460ff19169055505050505050565b6012546014548261295b57600060128190556014555b6001600160a01b03861660009081526023602052604090205460ff16801561299c57506001600160a01b03851660009081526023602052604090205460ff16155b156129b1576129ac868686612f4a565b612a5d565b6001600160a01b03861660009081526023602052604090205460ff161580156129f257506001600160a01b03851660009081526023602052604090205460ff165b15612a02576129ac868686613070565b6001600160a01b03861660009081526023602052604090205460ff168015612a4257506001600160a01b03851660009081526023602052604090205460ff165b15612a52576129ac868686613119565b612a5d86868661318c565b82610e9c5760129190915560145550505050565b6007546006546000918291825b602554811015612bc35782601d600060258481548110612aa057612aa06136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b0b575081601e600060258481548110612ae457612ae46136c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2157600754600654945094505050509091565b612b67601d600060258481548110612b3b57612b3b6136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612795565b9250612baf601e600060258481548110612b8357612b836136c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612795565b915080612bbb816136ec565b915050612a7e565b50600654600754612bd391612704565b821015612bea576007546006549350935050509091565b90939092509050565b60008183612c145760405162461bcd60e51b8152600401610b1891906132b6565b5060006126d88486613881565b600080600080612c30856131d0565b90506000612c3d866131ed565b90506000612c5582612c4f8986612795565b90612795565b979296509094509092505050565b6000808080612c7288866127d7565b90506000612c8088876127d7565b90506000612c8e88886127d7565b90506000612ca082612c4f8686612795565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ce857612ce86136c0565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6591906138a3565b81600181518110612d7857612d786136c0565b6001600160a01b039283166020918202929092010152601954612d9e9130911684611fe8565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790612dd7908590600090869030904290600401613904565b600060405180830381600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e3a929190613940565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610c23573d6000803e3d6000fd5b601954612e949030906001600160a01b031684611fe8565b6019546001600160a01b031663f305d719823085600080612ebd6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612f25573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f939190613961565b600080600080600080612f5c87612746565b6001600160a01b038f166000908152601e6020526040902054959b50939950919750955093509150612f8e9088612795565b6001600160a01b038a166000908152601e6020908152604080832093909355601d90522054612fbd9087612795565b6001600160a01b03808b166000908152601d602052604080822093909355908a1681522054612fec908661210c565b6001600160a01b0389166000908152601d602052604090205561300e8161320a565b6130188483613292565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161305d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061308287612746565b6001600160a01b038f166000908152601d6020526040902054959b509399509197509550935091506130b49087612795565b6001600160a01b03808b166000908152601d6020908152604080832094909455918b168152601e90915220546130ea908461210c565b6001600160a01b0389166000908152601e6020908152604080832093909355601d90522054612fec908661210c565b60008060008060008061312b87612746565b6001600160a01b038f166000908152601e6020526040902054959b5093995091975095509350915061315d9088612795565b6001600160a01b038a166000908152601e6020908152604080832093909355601d905220546130b49087612795565b60008060008060008061319e87612746565b6001600160a01b038f166000908152601d6020526040902054959b50939950919750955093509150612fbd9087612795565b6000610ae86103e8612883601254856127d790919063ffffffff16565b6000610ae86103e8612883601454856127d790919063ffffffff16565b60006132146126e1565b9050600061322283836127d7565b306000908152601d602052604090205490915061323f908261210c565b306000908152601d602090815260408083209390935560239052205460ff1615610c2357306000908152601e602052604090205461327d908461210c565b306000908152601e6020526040902055505050565b60075461329f9083612795565b6007556008546132af908261210c565b6008555050565b600060208083528351808285015260005b818110156132e3578581018301518582016040015282016132c7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461331957600080fd5b50565b6000806040838503121561332f57600080fd5b823561333a81613304565b946020939093013593505050565b60008060006060848603121561335d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561338657600080fd5b813561112181613304565b60008083601f8401126133a357600080fd5b50813567ffffffffffffffff8111156133bb57600080fd5b6020830191508360208260051b85010111156133d657600080fd5b9250929050565b600080602083850312156133f057600080fd5b823567ffffffffffffffff81111561340757600080fd5b61341385828601613391565b90969095509350505050565b6000806000806040858703121561343557600080fd5b843567ffffffffffffffff8082111561344d57600080fd5b61345988838901613391565b9096509450602087013591508082111561347257600080fd5b5061347f87828801613391565b95989497509550505050565b6000806000606084860312156134a057600080fd5b83356134ab81613304565b925060208401356134bb81613304565b929592945050506040919091013590565b600080604083850312156134df57600080fd5b82356134ea81613304565b915060208301356134fa81613304565b809150509250929050565b801515811461331957600080fd5b6000806040838503121561352657600080fd5b823561333a81613505565b60006020828403121561354357600080fd5b5035919050565b6000806040838503121561355d57600080fd5b8235915060208301356134fa81613505565b6000806040838503121561358257600080fd5b50508035926020909101359150565b6000602082840312156135a357600080fd5b813561112181613505565b6000806000604084860312156135c357600080fd5b833567ffffffffffffffff8111156135da57600080fd5b6135e686828701613391565b90945092505060208401356135fa81613505565b809150509250925092565b60008060006040848603121561361a57600080fd5b833567ffffffffffffffff81111561363157600080fd5b61363d86828701613391565b909790965060209590950135949350505050565b600181811c9082168061366557607f821691505b60208210810361368557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016136fe576136fe6136d6565b5060010190565b600181815b80851115613740578160001904821115613726576137266136d6565b8085161561373357918102915b93841c939080029061370a565b509250929050565b60008261375757506001610ae8565b8161376457506000610ae8565b816001811461377a5760028114613784576137a0565b6001915050610ae8565b60ff841115613795576137956136d6565b50506001821b610ae8565b5060208310610133831016604e8410600b84101617156137c3575081810a610ae8565b6137cd8383613705565b80600019048211156137e1576137e16136d6565b029392505050565b600061112160ff841683613748565b8082028115828204841417610ae857610ae86136d6565b80820180821115610ae857610ae86136d6565b60006020828403121561383457600080fd5b5051919050565b60006020828403121561384d57600080fd5b815161112181613505565b81810381811115610ae857610ae86136d6565b634e487b7160e01b600052603160045260246000fd5b60008261389e57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138b557600080fd5b815161112181613304565b600081518084526020808501945080840160005b838110156138f95781516001600160a01b0316875295820195908201906001016138d4565b509495945050505050565b85815284602082015260a06040820152600061392360a08301866138c0565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061395960408301846138c0565b949350505050565b60008060006060848603121561397657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa5df0c9b09a8bdb5ca8fce4ac75beecbbf2c6307f6a27b43c39b75edfd0520864736f6c63430008130033
Deployed Bytecode Sourcemap
14266:23609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15348:57;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15348:57:0;;;;;;;;30171:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18284:161::-;;;;;;;;;;-1:-1:-1;18284:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;18284:161:0;1205:187:1;37097:437:0;;;;;;;;;;-1:-1:-1;37097:437:0;;;;;:::i;:::-;;:::i;:::-;;31354:106;;;;;;;;;;-1:-1:-1;31354:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;31434:18:0;31410:4;31434:18;;;:9;:18;;;;;;;;;31354:106;37542:256;;;;;;;;;;-1:-1:-1;37542:256:0;;;;;:::i;:::-;;:::i;31596:87::-;;;;;;;;;;-1:-1:-1;31665:10:0;;31596:87;;34865:195;;;;;;;;;;-1:-1:-1;34865:195:0;;;;;:::i;:::-;;:::i;15642:41::-;;;;;;;;;;-1:-1:-1;15642:41:0;;;;-1:-1:-1;;;;;15642:41:0;;;;;;-1:-1:-1;;;;;2975:32:1;;;2957:51;;2945:2;2930:18;15642:41:0;2784:230:1;34377:111:0;;;;;;;;;;-1:-1:-1;34377:111:0;;;;;:::i;:::-;;:::i;30448:95::-;;;;;;;;;;-1:-1:-1;30528:7:0;;30448:95;;35867:701;;;;;;;;;;-1:-1:-1;35867:701:0;;;;;:::i;:::-;;:::i;17456:313::-;;;;;;;;;;-1:-1:-1;17456:313:0;;;;;:::i;:::-;;:::i;15478:34::-;;;;;;;;;;-1:-1:-1;15478:34:0;;;;;;;;;;;35213:171;;;;;;;;;;-1:-1:-1;35213:171:0;;;;;:::i;:::-;;:::i;32947:337::-;;;;;;;;;;-1:-1:-1;32947:337:0;;;;;:::i;:::-;;:::i;30767:253::-;;;;;;;;;;-1:-1:-1;30767:253:0;;;;;:::i;:::-;;:::i;30357:83::-;;;;;;;;;;-1:-1:-1;30423:9:0;;30357:83;;30423:9;;;;5428:36:1;;5416:2;5401:18;30357:83:0;5286:184:1;32460:479:0;;;;;;;;;;-1:-1:-1;32460:479:0;;;;;:::i;:::-;;:::i;17777:218::-;;;;;;;;;;-1:-1:-1;17777:218:0;;;;;:::i;:::-;;:::i;18457:377::-;;;;;;;;;;-1:-1:-1;18457:377:0;;;;;:::i;:::-;;:::i;14877:36::-;;;;;;;;;;;;;;;;31691:436;;;;;;;;;;-1:-1:-1;31691:436:0;;;;;:::i;:::-;;:::i;15690:28::-;;;;;;;;;;-1:-1:-1;15690:28:0;;;;-1:-1:-1;;;;;15690:28:0;;;32191:261;;;;;;;;;;-1:-1:-1;32191:261:0;;;;;:::i;:::-;;:::i;35392:159::-;;;;;;;;;;-1:-1:-1;35392:159:0;;;;;:::i;:::-;;:::i;34500:137::-;;;;;;;;;;-1:-1:-1;34500:137:0;;;;;:::i;:::-;;:::i;30551:208::-;;;;;;;;;;-1:-1:-1;30551:208:0;;;;;:::i;:::-;;:::i;6027:148::-;;;;;;;;;;;;;:::i;14830:37::-;;;;;;;;;;;;;;;;15013;;;;;;;;;;;;;;;;14693:58;;;;;;;;;;;;;;;;35071:134;;;;;;;;;;-1:-1:-1;35071:134:0;;;;;:::i;:::-;;:::i;14922:36::-;;;;;;;;;;;;;;;;31468:120;;;;;;;;;;-1:-1:-1;31468:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;31560:20:0;31536:4;31560:20;;;:11;:20;;;;;;;;;31468:120;5802:79;;;;;;;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;5867:6:0;5802:79;;35681:178;;;;;;;;;;-1:-1:-1;35681:178:0;;;;;:::i;:::-;;:::i;34166:199::-;;;;;;;;;;-1:-1:-1;34166:199:0;;;;;:::i;:::-;;:::i;30262:87::-;;;;;;;;;;;;;:::i;18003:269::-;;;;;;;;;;-1:-1:-1;18003:269:0;;;;;:::i;:::-;;:::i;31028:167::-;;;;;;;;;;-1:-1:-1;31028:167:0;;;;;:::i;:::-;;:::i;33403:99::-;;;;;;;;;;-1:-1:-1;33403:99:0;;;;;:::i;:::-;;:::i;14454:29::-;;;;;;;;;;;;;;;;33514:520;;;;;;;;;;-1:-1:-1;33514:520:0;;;;;:::i;:::-;;:::i;34649:204::-;;;;;;;;;;-1:-1:-1;34649:204:0;;;;;:::i;:::-;;:::i;14784:35::-;;;;;;;;;;;;;;;;31203:143;;;;;;;;;;-1:-1:-1;31203:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31311:18:0;;;31284:7;31311:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31203:143;33296:99;;;;;;;;;;-1:-1:-1;33296:99:0;;;;;:::i;:::-;;:::i;34046:112::-;;;;;;;;;;-1:-1:-1;34046:112:0;;;;;:::i;:::-;;:::i;6183:244::-;;;;;;;;;;-1:-1:-1;6183:244:0;;;;;:::i;:::-;;:::i;14966:38::-;;;;;;;;;;;;;;;;14418:29;;;;;;;;;;;;;;;;36576:513;;;;;;;;;;-1:-1:-1;36576:513:0;;;;;:::i;:::-;;:::i;35559:114::-;;;;;;;;;;-1:-1:-1;35559:114:0;;;;;:::i;:::-;;:::i;15440:31::-;;;;;;;;;;-1:-1:-1;15440:31:0;;;;;;;;;;;30171:83;30208:13;30241:5;30234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30171:83;:::o;18284:161::-;18359:4;18376:39;190:10;18399:7;18408:6;18376:8;:39::i;:::-;-1:-1:-1;18433:4:0;18284:161;;;;;:::o;37097:437::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;;;;;;;;;37229:16:::1;:33:::0;;;37273:16:::1;:33:::0;;;37317:17:::1;:34:::0;;;37364:13:::1;:30:::0;;;37405:12:::1;:29:::0;;;37445:12:::1;:29:::0;;;37496:30:::1;37248:14:::0;37292;37496:16:::1;:30::i;:::-;37485:8;:41:::0;-1:-1:-1;;;37097:437:0:o;37542:256::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;37665:17:::1;:34:::0;;;;37710:17:::1;:34:::0;37755:18:::1;:35:::0;37542:256::o;34865:195::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34959:9:::1;34954:99;34970:20:::0;;::::1;34954:99;;;35037:4;35012:10;:24;35023:9;;35033:1;35023:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35012:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35012:24:0;:29;;-1:-1:-1;;35012:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34992:3:::1;::::0;::::1;:::i;:::-;;;34954:99;;;;34865:195:::0;;:::o;34377:111::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34445:27:0::1;34475:5;34445:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34445:35:0::1;::::0;;34377:111::o;35867:701::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;36007:3:::1;35988:22:::0;::::1;35980:79;;;::::0;-1:-1:-1;;;35980:79:0;;9582:2:1;35980:79:0::1;::::0;::::1;9564:21:1::0;9621:2;9601:18;;;9594:30;9660:34;9640:18;;;9633:62;-1:-1:-1;;;9711:18:1;;;9704:43;9764:19;;35980:79:0::1;9380:409:1::0;35980:79:0::1;36101:33:::0;;::::1;36093:85;;;::::0;-1:-1:-1;;;36093:85:0;;9996:2:1;36093:85:0::1;::::0;::::1;9978:21:1::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;-1:-1:-1;;;10125:18:1;;;10118:38;10173:19;;36093:85:0::1;9794:404:1::0;36093:85:0::1;36191:12;36224:6:::0;36220:108:::1;36234:20:::0;;::::1;36220:108;;;36306:9;::::0;36302:13:::1;::::0;36306:9:::1;;36302:2;:13;:::i;:::-;36290:6;;36297:1;36290:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36282:34;::::0;:4;:34:::1;:::i;:::-;36275:41:::0;-1:-1:-1;36256:3:0;::::1;::::0;::::1;:::i;:::-;;;;36220:108;;;;36373:4;36348:21;36358:10;36348:9;:21::i;:::-;:29;;36340:69;;;::::0;-1:-1:-1;;;36340:69:0;;12091:2:1;36340:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36340:69:0::1;11889:351:1::0;36340:69:0::1;36426:6;36422:139;36436:20:::0;;::::1;36422:139;;;36477:62;36487:10;36498:9;;36508:1;36498:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;36528:9;::::0;36524:13:::1;::::0;36528:9:::1;;36524:2;:13;:::i;:::-;36512:6;;36519:1;36512:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;36477:9;:62::i;:::-;36458:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36422:139;;;;35967:601;35867:701:::0;;;;:::o;17456:313::-;17554:4;17571:36;17581:6;17589:9;17600:6;17571:9;:36::i;:::-;17618:121;17627:6;190:10;17649:89;17687:6;17649:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17649:19:0;;;;;;:11;:19;;;;;;;;190:10;17649:33;;;;;;;;;;:37;:89::i;:::-;17618:8;:121::i;:::-;-1:-1:-1;17757:4:0;17456:313;;;;;:::o;35213:171::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35308:30:::1;::::0;-1:-1:-1;;;35308:30:0;;35332:4:::1;35308:30;::::0;::::1;2957:51:1::0;35290:15:0::1;::::0;-1:-1:-1;;;;;35308:15:0;::::1;::::0;::::1;::::0;2930:18:1;;35308:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35349:27;::::0;-1:-1:-1;;;35349:27:0;;-1:-1:-1;;;;;12626:32:1;;;35349:27:0::1;::::0;::::1;12608:51:1::0;12675:18;;;12668:34;;;35290:48:0;;-1:-1:-1;35349:14:0;;::::1;::::0;::::1;::::0;12581:18:1;;35349:27:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35279:105;35213:171:::0;;:::o;32947:337::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33034:11:::1;:21:::0;;-1:-1:-1;;33034:21:0::1;;::::0;::::1;;;;::::0;;33066:32:::1;33092:4;33066:17;:32::i;:::-;33127:13;::::0;33109:32:::1;::::0;-1:-1:-1;;;;;33127:13:0::1;33109:17;:32::i;:::-;33155:11;::::0;::::1;::::0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;33170:10:0::1;::::0;:15;33155:30:::1;33152:125;;;33214:12;33201:10;:25:::0;33241:10:::1;:24:::0;;;33152:125:::1;32947:337:::0;;:::o;30767:253::-;30833:7;30872;;30861;:18;;30853:73;;;;-1:-1:-1;;;30853:73:0;;13165:2:1;30853:73:0;;;13147:21:1;13204:2;13184:18;;;13177:30;13243:34;13223:18;;;13216:62;-1:-1:-1;;;13294:18:1;;;13287:40;13344:19;;30853:73:0;12963:406:1;30853:73:0;30937:19;30960:10;:8;:10::i;:::-;30937:33;-1:-1:-1;30988:24:0;:7;30937:33;30988:11;:24::i;:::-;30981:31;30767:253;-1:-1:-1;;;30767:253:0:o;32460:479::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32542:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32534:60;;;::::0;-1:-1:-1;;;32534:60:0;;13576:2:1;32534:60:0::1;::::0;::::1;13558:21:1::0;13615:2;13595:18;;;13588:30;13654:29;13634:18;;;13627:57;13701:18;;32534:60:0::1;13374:351:1::0;32534:60:0::1;32610:9;32605:327;32629:9;:16:::0;32625:20;::::1;32605:327;;;32687:7;-1:-1:-1::0;;;;;32671:23:0::1;:9;32681:1;32671:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32671:12:0::1;:23:::0;32667:254:::1;;32730:9;32740:16:::0;;:20:::1;::::0;32759:1:::1;::::0;32740:20:::1;:::i;:::-;32730:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32715:9:::1;:12:::0;;-1:-1:-1;;;;;32730:31:0;;::::1;::::0;32725:1;;32715:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32715:46:0::1;-1:-1:-1::0;;;;;32715:46:0;;::::1;;::::0;;32780:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32819:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32819:28:0::1;::::0;;32866:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32866:15:0;;;;;-1:-1:-1;;;;;;32866:15:0::1;::::0;;;;;32947:337;;:::o;32667:254::-:1;32647:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32605:327;;17777:218:::0;190:10;17865:4;17914:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17914:34:0;;;;;;;;;;17865:4;;17882:83;;17905:7;;17914:50;;17953:10;17914:38;:50::i;18457:377::-;190:10;18509:14;18558:19;;;:11;:19;;;;;;;;18557:20;18549:77;;;;-1:-1:-1;;;18549:77:0;;14197:2:1;18549:77:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:34;14255:18;;;14248:62;-1:-1:-1;;;14326:18:1;;;14319:42;14378:19;;18549:77:0;13995:408:1;18549:77:0;18638:15;18662:19;18673:7;18662:10;:19::i;:::-;-1:-1:-1;;;;;;;;;18710:15:0;;;;;;:7;:15;;;;;;18637:44;;-1:-1:-1;18710:28:0;;:15;-1:-1:-1;18637:44:0;18710:19;:28::i;:::-;-1:-1:-1;;;;;18692:15:0;;;;;;:7;:15;;;;;:46;18759:7;;:20;;18771:7;18759:11;:20::i;:::-;18749:7;:30;18803:10;;:23;;18818:7;18803:14;:23::i;:::-;18790:10;:36;-1:-1:-1;;;18457:377:0:o;31691:436::-;31781:7;31820;;31809;:18;;31801:62;;;;-1:-1:-1;;;31801:62:0;;14610:2:1;31801:62:0;;;14592:21:1;14649:2;14629:18;;;14622:30;14688:33;14668:18;;;14661:61;14739:18;;31801:62:0;14408:355:1;31801:62:0;31879:17;31874:246;;31914:15;31938:19;31949:7;31938:10;:19::i;:::-;-1:-1:-1;31913:44:0;;-1:-1:-1;31972:14:0;;-1:-1:-1;;;;;31972:14:0;31874:246;32021:23;32052:19;32063:7;32052:10;:19::i;:::-;-1:-1:-1;32019:52:0;;-1:-1:-1;32086:22:0;;-1:-1:-1;;;;;32086:22:0;32191:261;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32268:16:0;::::1;32287:1;32268:16:::0;;;:7:::1;:16;::::0;;;;;:20;32265:108:::1;;-1:-1:-1::0;;;;;32344:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32324:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32305:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32265:108:::1;-1:-1:-1::0;;;;;32383:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32383:27:0::1;32406:4;32383:27:::0;;::::1;::::0;;;32421:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32421:23:0::1;::::0;;::::1;::::0;;32191:261::o;35392:159::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35497:46:::1;35519:23;35497:17;35509:4;35497:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;35479:15;:64:::0;-1:-1:-1;35392:159:0:o;34500:137::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34586:15:::1;:43:::0;;-1:-1:-1;;;;;;34586:43:0::1;-1:-1:-1::0;;;;;34586:43:0;;;::::1;::::0;;;::::1;::::0;;34500:137::o;30551:208::-;-1:-1:-1;;;;;30641:20:0;;30617:7;30641:20;;;:11;:20;;;;;;;;30637:59;;;-1:-1:-1;;;;;;30680:16:0;;;;;:7;:16;;;;;;;30551:208::o;30637:59::-;-1:-1:-1;;;;;30734:16:0;;;;;;:7;:16;;;;;;30714:37;;:19;:37::i;6027:148::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;6134:1:::1;6118:6:::0;;6097:40:::1;::::0;-1:-1:-1;;;;;6118:6:0;;::::1;::::0;6097:40:::1;::::0;6134:1;;6097:40:::1;6165:1;6148:19:::0;;-1:-1:-1;;;;;;6148:19:0::1;::::0;;6027:148::o;35071:134::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35155:42:::1;::::0;-1:-1:-1;;;;;35155:19:0;::::1;::::0;35175:21:::1;35155:42:::0;::::1;;;::::0;::::1;::::0;;;35175:21;35155:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35681:178:::0;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;35835:16:::1;35815;35805:7;;:26;;;;:::i;:::-;35804:47;;;;:::i;:::-;35788:13;:63:::0;-1:-1:-1;;35681:178:0:o;34166:199::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34254:9:::1;34249:109;34265:20:::0;;::::1;34249:109;;;34342:4;34307:18;:32;34326:9;;34336:1;34326:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34307:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34307:32:0;:39;;-1:-1:-1;;34307:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34287:3:::1;::::0;::::1;:::i;:::-;;;34249:109;;30262:87:::0;30301:13;30334:7;30327:14;;;;;:::i;18003:269::-;18096:4;18113:129;190:10;18136:7;18145:96;18184:15;18145:96;;;;;;;;;;;;;;;;;190:10;18145:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18145:34:0;;;;;;;;;;;;:38;:96::i;31028:167::-;31106:4;31123:42;190:10;31147:9;31158:6;31123:9;:42::i;33403:99::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33475:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33475:19:0;;::::1;::::0;;;::::1;::::0;;33403:99::o;33514:520::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33584:29:::1;33635:9;33584:61;;33656:16;33693:10;-1:-1:-1::0;;;;;33693:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33675:47:0::1;;33731:4;33738:10;-1:-1:-1::0;;;;;33738:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33675:81;::::0;-1:-1:-1;;;;;;33675:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15476:15:1;;;33675:81:0::1;::::0;::::1;15458:34:1::0;15528:15;;15508:18;;;15501:43;15393:18;;33675:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33656:100:::0;-1:-1:-1;;;;;;33771:22:0;::::1;33767:221;;33844:10;-1:-1:-1::0;;;;;33844:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33826:50:0::1;;33885:4;33892:10;-1:-1:-1::0;;;;;33892:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33826:84;::::0;-1:-1:-1;;;;;;33826:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15476:15:1;;;33826:84:0::1;::::0;::::1;15458:34:1::0;15528:15;;15508:18;;;15501:43;15393:18;;33826:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33810:13;:100:::0;;-1:-1:-1;;;;;;33810:100:0::1;-1:-1:-1::0;;;;;33810:100:0;;;::::1;::::0;;;::::1;::::0;;33767:221:::1;;;33952:13;:24:::0;;-1:-1:-1;;;;;;33952:24:0::1;-1:-1:-1::0;;;;;33952:24:0;::::1;;::::0;;33767:221:::1;-1:-1:-1::0;33998:15:0::1;:28:::0;;-1:-1:-1;;;;;;33998:28:0::1;-1:-1:-1::0;;;;;33998:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33514:520:0:o;34649:204::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;34744:9:::1;34739:107;34755:20:::0;;::::1;34739:107;;;34827:6;34801:9;:23;34811:9;;34821:1;34811:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34801:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34801:23:0;:32;;-1:-1:-1;;34801:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34777:3:::1;::::0;::::1;:::i;:::-;;;34739:107;;33296:99:::0;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;33365:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33365:22:0;;::::1;::::0;;;::::1;::::0;;33296:99::o;34046:112::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34116:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34116:34:0::1;34146:4;34116:34;::::0;;34046:112::o;6183:244::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6272:22:0;::::1;6264:73;;;::::0;-1:-1:-1;;;6264:73:0;;15757:2:1;6264:73:0::1;::::0;::::1;15739:21:1::0;15796:2;15776:18;;;15769:30;15835:34;15815:18;;;15808:62;-1:-1:-1;;;15886:18:1;;;15879:36;15932:19;;6264:73:0::1;15555:402:1::0;6264:73:0::1;6374:6;::::0;;6353:38:::1;::::0;-1:-1:-1;;;;;6353:38:0;;::::1;::::0;6374:6;::::1;::::0;6353:38:::1;::::0;::::1;6402:6;:17:::0;;-1:-1:-1;;;;;;6402:17:0::1;-1:-1:-1::0;;;;;6402:17:0;;;::::1;::::0;;;::::1;::::0;;6183:244::o;36576:513::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;36715:4:::1;36696:23:::0;::::1;36688:81;;;::::0;-1:-1:-1;;;36688:81:0;;16164:2:1;36688:81:0::1;::::0;::::1;16146:21:1::0;16203:2;16183:18;;;16176:30;16242:34;16222:18;;;16215:62;-1:-1:-1;;;16293:18:1;;;16286:44;16347:19;;36688:81:0::1;15962:410:1::0;36688:81:0::1;36832:9;::::0;36805:12:::1;::::0;36844:9;;36828:13:::1;::::0;36832:9:::1;;36828:2;:13;:::i;:::-;36820:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;36805:55;;36906:4;36881:21;36891:10;36881:9;:21::i;:::-;:29;;36873:69;;;::::0;-1:-1:-1;;;36873:69:0;;12091:2:1;36873:69:0::1;::::0;::::1;12073:21:1::0;12130:2;12110:18;;;12103:30;12169:29;12149:18;;;12142:57;12216:18;;36873:69:0::1;11889:351:1::0;36873:69:0::1;36959:6;36955:127;36969:20:::0;;::::1;36955:127;;;37010:58;37020:10;37031:9;;37041:1;37031:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37057:9;::::0;37053:13:::1;::::0;37057:9:::1;;37053:2;:13;:::i;:::-;37045:21;::::0;:6;:21:::1;:::i;37010:58::-;36991:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36955:127;;;;36675:414;36576:513:::0;;;:::o;35559:114::-;5936:6;;-1:-1:-1;;;;;5936:6:0;190:10;5936:22;5928:67;;;;-1:-1:-1;;;5928:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35633:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;35633:32:0::1;35661:4;35633:32;::::0;;35559:114::o;18842:337::-;-1:-1:-1;;;;;18935:19:0;;18927:68;;;;-1:-1:-1;;;18927:68:0;;16579:2:1;18927:68:0;;;16561:21:1;16618:2;16598:18;;;16591:30;16657:34;16637:18;;;16630:62;-1:-1:-1;;;16708:18:1;;;16701:34;16752:19;;18927:68:0;16377:400:1;18927:68:0;-1:-1:-1;;;;;19014:21:0;;19006:68;;;;-1:-1:-1;;;19006:68:0;;16984:2:1;19006:68:0;;;16966:21:1;17023:2;17003:18;;;16996:30;17062:34;17042:18;;;17035:62;-1:-1:-1;;;17113:18:1;;;17106:32;17155:19;;19006:68:0;16782:398:1;19006:68:0;-1:-1:-1;;;;;19087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19139:32;;160:25:1;;;19139:32:0;;133:18:1;19139:32:0;;;;;;;18842:337;;;:::o;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;17387:2:1;1276:46:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:29;17445:18;;;17438:57;17512:18;;1276:46:0;17185:351:1;19321:2253:0;-1:-1:-1;;;;;19443:18:0;;19435:68;;;;-1:-1:-1;;;19435:68:0;;17743:2:1;19435:68:0;;;17725:21:1;17782:2;17762:18;;;17755:30;17821:34;17801:18;;;17794:62;-1:-1:-1;;;17872:18:1;;;17865:35;17917:19;;19435:68:0;17541:401:1;19435:68:0;-1:-1:-1;;;;;19522:16:0;;19514:64;;;;-1:-1:-1;;;19514:64:0;;18149:2:1;19514:64:0;;;18131:21:1;18188:2;18168:18;;;18161:30;18227:34;18207:18;;;18200:62;-1:-1:-1;;;18278:18:1;;;18271:33;18321:19;;19514:64:0;17947:399:1;19514:64:0;19606:1;19597:6;:10;19589:64;;;;-1:-1:-1;;;19589:64:0;;18553:2:1;19589:64:0;;;18535:21:1;18592:2;18572:18;;;18565:30;18631:34;18611:18;;;18604:62;-1:-1:-1;;;18682:18:1;;;18675:39;18731:19;;19589:64:0;18351:405:1;19589:64:0;-1:-1:-1;;;;;19673:13:0;;;;;;:9;:13;;;;;;;;19672:14;19664:31;;;;-1:-1:-1;;;19664:31:0;;;;;;18963:2:1;18945:21;;;19002:1;18982:18;;;18975:29;-1:-1:-1;;;19035:2:1;19020:18;;19013:34;19079:2;19064:18;;18761:327;19664:31:0;-1:-1:-1;;;;;19715:15:0;;;;;;:9;:15;;;;;;;;19714:16;19706:33;;;;-1:-1:-1;;;19706:33:0;;;;;;18963:2:1;18945:21;;;19002:1;18982:18;;;18975:29;-1:-1:-1;;;19035:2:1;19020:18;;19013:34;19079:2;19064:18;;18761:327;19706:33:0;5840:7;5867:6;-1:-1:-1;;;;;19754:14:0;;;5867:6;;19754:14;;;;:30;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;19772:12:0;;;5867:6;;19772:12;;19754:30;19750:84;;;19794:11;;;;;;;19786:48;;;;-1:-1:-1;;;19786:48:0;;19295:2:1;19786:48:0;;;19277:21:1;19334:2;19314:18;;;19307:30;19373:26;19353:18;;;19346:54;19417:18;;19786:48:0;19093:348:1;19786:48:0;19967:13;;19895:12;;-1:-1:-1;;;;;19961:19:0;;;19967:13;;19961:19;;:40;;-1:-1:-1;19988:13:0;;-1:-1:-1;;;;;19984:17:0;;;19988:13;;19984:17;19961:40;19960:99;;;;-1:-1:-1;;;;;;20008:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20036:22:0;;;;;;:18;:22;;;;;;;;20008:50;20006:53;19960:99;19955:148;;;-1:-1:-1;20087:4:0;19955:148;20129:1;20118:10;;:12;:59;;;;-1:-1:-1;;;;;;20136:22:0;;;;;;:18;:22;;;;;;;;20135:23;:41;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;20162:14:0;;;5867:6;;20162:14;;20135:41;20118:105;;;;;20210:12;20196:10;;20183;;:23;;;;:::i;:::-;20182:40;20118:105;20115:246;;;20274:15;;20259:13;20269:2;20259:9;:13::i;:::-;20251:21;;:6;:21;:::i;:::-;:38;;20243:106;;;;-1:-1:-1;;;20243:106:0;;19648:2:1;20243:106:0;;;19630:21:1;19687:2;19667:18;;;19660:30;19726:34;19706:18;;;19699:62;-1:-1:-1;;;19777:18:1;;;19770:32;19819:19;;20243:106:0;19446:398:1;20243:106:0;20390:8;;20374:15;:24;20423:17;;20409:13;:31;20456:11;;;;;;;:34;;;;-1:-1:-1;20477:13:0;;-1:-1:-1;;;;;20471:19:0;;;20477:13;;20471:19;20456:34;20453:177;;;20553:17;;20531;;:40;;:21;:40::i;:::-;20514:15;:57;20600:18;;20586:13;:32;20453:177;20683:1;20672:10;;:12;:56;;;;;20716:12;20702:10;;20689;;:23;;;;:::i;:::-;20688:40;20672:56;20669:109;;;-1:-1:-1;;;;;20748:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;20748:18:0;20762:4;20748:18;;;20669:109;20833:1;20822:10;;:12;:30;;;;-1:-1:-1;5840:7:0;5867:6;-1:-1:-1;;;;;20838:14:0;;;5867:6;;20838:14;;20822:30;:75;;;;;20886:10;;20873;;:23;;;;:::i;:::-;20856:12;:41;;20822:75;:91;;;;-1:-1:-1;20902:11:0;;;;;;;20822:91;20819:149;;;20949:3;20933:15;:19;20819:149;20999:14;;;;;;;20996:144;;;21033:11;;;;;;;:36;;;;-1:-1:-1;21056:13:0;;-1:-1:-1;;;;;21048:21:0;;;21056:13;;21048:21;21033:36;21030:99;;;21111:1;21095:15;:17;21030:99;21173:6;;;;21172:7;:22;;;;-1:-1:-1;21183:11:0;;;;;;;21172:22;:45;;;;-1:-1:-1;21204:13:0;;-1:-1:-1;;;;;21198:19:0;;;21204:13;;21198:19;21172:45;21168:350;;;21242:28;21273:24;21291:4;21273:9;:24::i;:::-;21242:55;;21351:13;;21329:20;:35;21326:169;;-1:-1:-1;21411:13:0;;21447:32;21411:13;21447:10;:32::i;:::-;21219:299;21168:350;21528:38;21543:4;21548:2;21551:6;21558:7;21528:14;:38::i;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;29022:163::-;29063:7;29084:15;29101;29120:19;:17;:19::i;:::-;29083:56;;-1:-1:-1;29083:56:0;-1:-1:-1;29157:20:0;29083:56;;29157:11;:20::i;:::-;29150:27;;;;29022:163;:::o;1961:132::-;2019:7;2046:39;2050:1;2053;2046:39;;;;;;;;;;;;;;;;;:3;:39::i;28257:419::-;28316:7;28325;28334;28343;28352;28361;28382:23;28407:12;28421:18;28443:20;28455:7;28443:11;:20::i;:::-;28381:82;;;;;;28475:15;28492:23;28517:12;28533:50;28545:7;28554:4;28560:10;28572;:8;:10::i;:::-;28533:11;:50::i;:::-;28474:109;;;;-1:-1:-1;28474:109:0;;-1:-1:-1;28634:15:0;;-1:-1:-1;28651:4:0;;-1:-1:-1;28657:10:0;;-1:-1:-1;28257:419:0;;-1:-1:-1;;;;;28257:419:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;1703:250::-;1761:7;1785:1;1790;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;20051:2:1;1868:56:0;;;20033:21:1;20090:2;20070:18;;;20063:30;20129:34;20109:18;;;20102:62;-1:-1:-1;;;20180:18:1;;;20173:31;20221:19;;1868:56:0;19849:397:1;25842:1028:0;16596:6;:13;;-1:-1:-1;;16596:13:0;16605:4;16596:13;;;26030:8:::1;::::0;25998:12:::1;::::0;16596:6;;25959:101:::1;::::0;26058:1:::1;::::0;25959:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25933:127:::0;-1:-1:-1;26073:20:0::1;26096:41;:20:::0;25933:127;26096:24:::1;:41::i;:::-;26073:64;;26158:30;26175:12;26158:16;:30::i;:::-;26290:12;::::0;26221:21:::1;::::0;26201:17:::1;::::0;26277:33:::1;::::0;26290:19:::1;::::0;26307:1:::1;26290:16;:19::i;:::-;26277:8;::::0;;:12:::1;:33::i;:::-;26255:55;;26323:26;26352:93;26443:1;26352:72;26412:11;26352:41;26380:12;;26352:9;:27;;:41;;;;:::i;:93::-;26323:122;;26466:26;26495:44;26527:11;26495:27;26509:12;;26495:9;:13;;:27;;;;:::i;:44::-;26466:73:::0;-1:-1:-1;26615:21:0::1;26650:22:::0;;26647:102:::1;;26721:15;::::0;26689:48:::1;::::0;26702:18;;-1:-1:-1;;;;;26721:15:0::1;26689:12;:48::i;:::-;26763:19:::0;;26759:104:::1;;26803:48;26816:15;26832:18;26803:12;:48::i;:::-;-1:-1:-1::0;;16632:6:0;:14;;-1:-1:-1;;16632:14:0;;;-1:-1:-1;;;;;;25842:1028:0:o;21582:943::-;21722:13;;21772:15;;21802:7;21798:88;;21841:1;21825:13;:17;;;21857:15;:17;21798:88;-1:-1:-1;;;;;21910:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21934:22:0;;;;;;:11;:22;;;;;;;;21933:23;21910:46;21906:467;;;21973:48;21995:6;22003:9;22014:6;21973:21;:48::i;:::-;21906:467;;;-1:-1:-1;;;;;22044:19:0;;;;;;:11;:19;;;;;;;;22043:20;:46;;;;-1:-1:-1;;;;;;22067:22:0;;;;;;:11;:22;;;;;;;;22043:46;22039:334;;;22106:46;22126:6;22134:9;22145:6;22106:19;:46::i;22039:334::-;-1:-1:-1;;;;;22174:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;22197:22:0;;;;;;:11;:22;;;;;;;;22174:45;22170:203;;;22236:48;22258:6;22266:9;22277:6;22236:21;:48::i;22170:203::-;22317:44;22335:6;22343:9;22354:6;22317:17;:44::i;:::-;22397:7;22393:125;;22420:13;:38;;;;22473:15;:33;-1:-1:-1;;;;21582:943:0:o;29193:561::-;29290:7;;29326;;29243;;;;;29350:289;29374:9;:16;29370:20;;29350:289;;;29440:7;29416;:21;29424:9;29434:1;29424:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29424:12:0;29416:21;;;;;;;;;;;;;:31;;:66;;;29475:7;29451;:21;29459:9;29469:1;29459:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29459:12:0;29451:21;;;;;;;;;;;;;:31;29416:66;29412:97;;;29492:7;;29501;;29484:25;;;;;;;29193:561;;:::o;29412:97::-;29534:34;29546:7;:21;29554:9;29564:1;29554:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29554:12:0;29546:21;;;;;;;;;;;;;29534:7;;:11;:34::i;:::-;29524:44;;29593:34;29605:7;:21;29613:9;29623:1;29613:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29613:12:0;29605:21;;;;;;;;;;;;;29593:7;;:11;:34::i;:::-;29583:44;-1:-1:-1;29392:3:0;;;;:::i;:::-;;;;29350:289;;;-1:-1:-1;29675:7:0;;29663;;:20;;:11;:20::i;:::-;29653:7;:30;29649:61;;;29693:7;;29702;;29685:25;;;;;;29193:561;;:::o;29649:61::-;29729:7;;29738;;-1:-1:-1;29193:561:0;-1:-1:-1;29193:561:0:o;2101:278::-;2187:7;2222:12;2215:5;2207:28;;;;-1:-1:-1;;;2207:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2246:9:0;2258:5;2262:1;2258;:5;:::i;28684:330::-;28744:7;28753;28762;28782:12;28797:24;28813:7;28797:15;:24::i;:::-;28782:39;;28832:18;28853:30;28875:7;28853:21;:30::i;:::-;28832:51;-1:-1:-1;28894:23:0;28920:33;28832:51;28920:17;:7;28932:4;28920:11;:17::i;:::-;:21;;:33::i;:::-;28894:59;28989:4;;-1:-1:-1;28995:10:0;;-1:-1:-1;28684:330:0;;-1:-1:-1;;;28684:330:0:o;25016:429::-;25131:7;;;;25187:24;:7;25199:11;25187;:24::i;:::-;25169:42;-1:-1:-1;25222:12:0;25237:21;:4;25246:11;25237:8;:21::i;:::-;25222:36;-1:-1:-1;25269:18:0;25290:27;:10;25305:11;25290:14;:27::i;:::-;25269:48;-1:-1:-1;25328:23:0;25354:33;25269:48;25354:17;:7;25366:4;25354:11;:17::i;:33::-;25406:7;;;;-1:-1:-1;25432:4:0;;-1:-1:-1;25016:429:0;;-1:-1:-1;;;;;;;25016:429:0:o;27004:666::-;27154:16;;;27168:1;27154:16;;;;;;;;27130:21;;27154:16;;;;;;;;;;-1:-1:-1;27154:16:0;27130:40;;27199:4;27181;27186:1;27181:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27181:23:0;;;:7;;;;;;;;;;:23;;;;27225:15;;:22;;;-1:-1:-1;;;27225:22:0;;;;:15;;;;;:20;;:22;;;;;27181:7;;27225:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27215:4;27220:1;27215:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27215:32:0;;;:7;;;;;;;;;:32;27292:15;;27260:62;;27277:4;;27292:15;27310:11;27260:8;:62::i;:::-;27361:15;;:240;;-1:-1:-1;;;27361:240:0;;-1:-1:-1;;;;;27361:15:0;;;;:66;;:240;;27442:11;;27361:15;;27512:4;;27539;;27575:15;;27361:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27627:35;27644:11;27657:4;27627:35;;;;;;;:::i;:::-;;;;;;;;27059:611;27004:666;:::o;26882:111::-;26962:23;;-1:-1:-1;;;;;26962:15:0;;;:23;;;;;26978:6;;26962:23;;;;26978:6;26962:15;:23;;;;;;;;;;;;;;;;;;;27678:513;27858:15;;27826:62;;27843:4;;-1:-1:-1;;;;;27858:15:0;27876:11;27826:8;:62::i;:::-;27931:15;;-1:-1:-1;;;;;27931:15:0;:31;27970:9;28003:4;28023:11;27931:15;;28135:7;5840;5867:6;-1:-1:-1;;;;;5867:6:0;;5802:79;28135:7;27931:252;;;;;;-1:-1:-1;;;;;;27931:252:0;;;-1:-1:-1;;;;;22132:15:1;;;27931:252:0;;;22114:34:1;22164:18;;;22157:34;;;;22207:18;;;22200:34;;;;22250:18;;;22243:34;22314:15;;;22293:19;;;22286:44;28157:15:0;22346:19:1;;;22339:35;22048:19;;27931:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23637:566::-;23740:15;23757:23;23782:12;23796:23;23821:12;23835:18;23857:19;23868:7;23857:10;:19::i;:::-;-1:-1:-1;;;;;23905:15:0;;;;;;:7;:15;;;;;;23739:137;;-1:-1:-1;23739:137:0;;-1:-1:-1;23739:137:0;;-1:-1:-1;23739:137:0;-1:-1:-1;23739:137:0;-1:-1:-1;23739:137:0;-1:-1:-1;23905:28:0;;23925:7;23905:19;:28::i;:::-;-1:-1:-1;;;;;23887:15:0;;;;;;:7;:15;;;;;;;;:46;;;;23962:7;:15;;;;:28;;23982:7;23962:19;:28::i;:::-;-1:-1:-1;;;;;23944:15:0;;;;;;;:7;:15;;;;;;:46;;;;24022:18;;;;;;;:39;;24045:15;24022:22;:39::i;:::-;-1:-1:-1;;;;;24001:18:0;;;;;;:7;:18;;;;;:60;24075:26;24090:10;24075:14;:26::i;:::-;24112:23;24124:4;24130;24112:11;:23::i;:::-;24168:9;-1:-1:-1;;;;;24151:44:0;24160:6;-1:-1:-1;;;;;24151:44:0;;24179:15;24151:44;;;;160:25:1;;148:2;133:18;;14:177;24151:44:0;;;;;;;;23728:475;;;;;;23637:566;;;:::o;23043:586::-;23144:15;23161:23;23186:12;23200:23;23225:12;23239:18;23261:19;23272:7;23261:10;:19::i;:::-;-1:-1:-1;;;;;23309:15:0;;;;;;:7;:15;;;;;;23143:137;;-1:-1:-1;23143:137:0;;-1:-1:-1;23143:137:0;;-1:-1:-1;23143:137:0;-1:-1:-1;23143:137:0;-1:-1:-1;23143:137:0;-1:-1:-1;23309:28:0;;23143:137;23309:19;:28::i;:::-;-1:-1:-1;;;;;23291:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;23369:18;;;;;:7;:18;;;;;:39;;23392:15;23369:22;:39::i;:::-;-1:-1:-1;;;;;23348:18:0;;;;;;:7;:18;;;;;;;;:60;;;;23440:7;:18;;;;:39;;23463:15;23440:22;:39::i;24211:642::-;24314:15;24331:23;24356:12;24370:23;24395:12;24409:18;24431:19;24442:7;24431:10;:19::i;:::-;-1:-1:-1;;;;;24479:15:0;;;;;;:7;:15;;;;;;24313:137;;-1:-1:-1;24313:137:0;;-1:-1:-1;24313:137:0;;-1:-1:-1;24313:137:0;-1:-1:-1;24313:137:0;-1:-1:-1;24313:137:0;-1:-1:-1;24479:28:0;;24499:7;24479:19;:28::i;:::-;-1:-1:-1;;;;;24461:15:0;;;;;;:7;:15;;;;;;;;:46;;;;24536:7;:15;;;;:28;;24556:7;24536:19;:28::i;22533:502::-;22632:15;22649:23;22674:12;22688:23;22713:12;22727:18;22749:19;22760:7;22749:10;:19::i;:::-;-1:-1:-1;;;;;22797:15:0;;;;;;:7;:15;;;;;;22631:137;;-1:-1:-1;22631:137:0;;-1:-1:-1;22631:137:0;;-1:-1:-1;22631:137:0;-1:-1:-1;22631:137:0;-1:-1:-1;22631:137:0;-1:-1:-1;22797:28:0;;22631:137;22797:19;:28::i;29766:160::-;29830:7;29857:61;29902:5;29857:26;29869:13;;29857:7;:11;;:26;;;;:::i;29938:168::-;30008:7;30035:63;30082:5;30035:28;30047:15;;30035:7;:11;;:28;;;;:::i;25457:355::-;25520:19;25543:10;:8;:10::i;:::-;25520:33;-1:-1:-1;25564:18:0;25585:27;:10;25520:33;25585:14;:27::i;:::-;25664:4;25648:22;;;;:7;:22;;;;;;25564:48;;-1:-1:-1;25648:38:0;;25564:48;25648:26;:38::i;:::-;25639:4;25623:22;;;;:7;:22;;;;;;;;:63;;;;25700:11;:26;;;;;;25697:107;;;25782:4;25766:22;;;;:7;:22;;;;;;:38;;25793:10;25766:26;:38::i;:::-;25757:4;25741:22;;;;:7;:22;;;;;:63;25509:303;;25457:355;:::o;24861:147::-;24939:7;;:17;;24951:4;24939:11;:17::i;:::-;24929:7;:27;24980:10;;:20;;24995:4;24980:14;:20::i;:::-;24967:10;:33;-1:-1:-1;;24861:147:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:316::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;-1:-1:-1;;1582:23:1;;;1652:2;1637:18;;1624:32;;-1:-1:-1;1703:2:1;1688:18;;;1675:32;;1397:316;-1:-1:-1;1397:316:1:o;1718:247::-;1777:6;1830:2;1818:9;1809:7;1805:23;1801:32;1798:52;;;1846:1;1843;1836:12;1798:52;1885:9;1872:23;1904:31;1929:5;1904:31;:::i;1970:367::-;2033:8;2043:6;2097:3;2090:4;2082:6;2078:17;2074:27;2064:55;;2115:1;2112;2105:12;2064:55;-1:-1:-1;2138:20:1;;2181:18;2170:30;;2167:50;;;2213:1;2210;2203:12;2167:50;2250:4;2242:6;2238:17;2226:29;;2310:3;2303:4;2293:6;2290:1;2286:14;2278:6;2274:27;2270:38;2267:47;2264:67;;;2327:1;2324;2317:12;2264:67;1970:367;;;;;:::o;2342:437::-;2428:6;2436;2489:2;2477:9;2468:7;2464:23;2460:32;2457:52;;;2505:1;2502;2495:12;2457:52;2545:9;2532:23;2578:18;2570:6;2567:30;2564:50;;;2610:1;2607;2600:12;2564:50;2649:70;2711:7;2702:6;2691:9;2687:22;2649:70;:::i;:::-;2738:8;;2623:96;;-1:-1:-1;2342:437:1;-1:-1:-1;;;;2342:437:1:o;3019:773::-;3141:6;3149;3157;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3274:9;3261:23;3303:18;3344:2;3336:6;3333:14;3330:34;;;3360:1;3357;3350:12;3330:34;3399:70;3461:7;3452:6;3441:9;3437:22;3399:70;:::i;:::-;3488:8;;-1:-1:-1;3373:96:1;-1:-1:-1;3576:2:1;3561:18;;3548:32;;-1:-1:-1;3592:16:1;;;3589:36;;;3621:1;3618;3611:12;3589:36;;3660:72;3724:7;3713:8;3702:9;3698:24;3660:72;:::i;:::-;3019:773;;;;-1:-1:-1;3751:8:1;-1:-1:-1;;;;3019:773:1:o;3797:456::-;3874:6;3882;3890;3943:2;3931:9;3922:7;3918:23;3914:32;3911:52;;;3959:1;3956;3949:12;3911:52;3998:9;3985:23;4017:31;4042:5;4017:31;:::i;:::-;4067:5;-1:-1:-1;4124:2:1;4109:18;;4096:32;4137:33;4096:32;4137:33;:::i;:::-;3797:456;;4189:7;;-1:-1:-1;;;4243:2:1;4228:18;;;;4215:32;;3797:456::o;4258:401::-;4339:6;4347;4400:2;4388:9;4379:7;4375:23;4371:32;4368:52;;;4416:1;4413;4406:12;4368:52;4455:9;4442:23;4474:31;4499:5;4474:31;:::i;:::-;4524:5;-1:-1:-1;4581:2:1;4566:18;;4553:32;4594:33;4553:32;4594:33;:::i;:::-;4646:7;4636:17;;;4258:401;;;;;:::o;4664:118::-;4750:5;4743:13;4736:21;4729:5;4726:32;4716:60;;4772:1;4769;4762:12;4787:309;4852:6;4860;4913:2;4901:9;4892:7;4888:23;4884:32;4881:52;;;4929:1;4926;4919:12;4881:52;4968:9;4955:23;4987:28;5009:5;4987:28;:::i;5101:180::-;5160:6;5213:2;5201:9;5192:7;5188:23;5184:32;5181:52;;;5229:1;5226;5219:12;5181:52;-1:-1:-1;5252:23:1;;5101:180;-1:-1:-1;5101:180:1:o;5475:309::-;5540:6;5548;5601:2;5589:9;5580:7;5576:23;5572:32;5569:52;;;5617:1;5614;5607:12;5569:52;5653:9;5640:23;5630:33;;5713:2;5702:9;5698:18;5685:32;5726:28;5748:5;5726:28;:::i;6257:248::-;6325:6;6333;6386:2;6374:9;6365:7;6361:23;6357:32;6354:52;;;6402:1;6399;6392:12;6354:52;-1:-1:-1;;6425:23:1;;;6495:2;6480:18;;;6467:32;;-1:-1:-1;6257:248:1:o;6510:241::-;6566:6;6619:2;6607:9;6598:7;6594:23;6590:32;6587:52;;;6635:1;6632;6625:12;6587:52;6674:9;6661:23;6693:28;6715:5;6693:28;:::i;6756:566::-;6848:6;6856;6864;6917:2;6905:9;6896:7;6892:23;6888:32;6885:52;;;6933:1;6930;6923:12;6885:52;6973:9;6960:23;7006:18;6998:6;6995:30;6992:50;;;7038:1;7035;7028:12;6992:50;7077:70;7139:7;7130:6;7119:9;7115:22;7077:70;:::i;:::-;7166:8;;-1:-1:-1;7051:96:1;-1:-1:-1;;7251:2:1;7236:18;;7223:32;7264:28;7223:32;7264:28;:::i;:::-;7311:5;7301:15;;;6756:566;;;;;:::o;7720:505::-;7815:6;7823;7831;7884:2;7872:9;7863:7;7859:23;7855:32;7852:52;;;7900:1;7897;7890:12;7852:52;7940:9;7927:23;7973:18;7965:6;7962:30;7959:50;;;8005:1;8002;7995:12;7959:50;8044:70;8106:7;8097:6;8086:9;8082:22;8044:70;:::i;:::-;8133:8;;8018:96;;-1:-1:-1;8215:2:1;8200:18;;;;8187:32;;7720:505;-1:-1:-1;;;;7720:505:1:o;8230:380::-;8309:1;8305:12;;;;8352;;;8373:61;;8427:4;8419:6;8415:17;8405:27;;8373:61;8480:2;8472:6;8469:14;8449:18;8446:38;8443:161;;8526:10;8521:3;8517:20;8514:1;8507:31;8561:4;8558:1;8551:15;8589:4;8586:1;8579:15;8443:161;;8230:380;;;:::o;8615:356::-;8817:2;8799:21;;;8836:18;;;8829:30;8895:34;8890:2;8875:18;;8868:62;8962:2;8947:18;;8615:356::o;8976:127::-;9037:10;9032:3;9028:20;9025:1;9018:31;9068:4;9065:1;9058:15;9092:4;9089:1;9082:15;9108:127;9169:10;9164:3;9160:20;9157:1;9150:31;9200:4;9197:1;9190:15;9224:4;9221:1;9214:15;9240:135;9279:3;9300:17;;;9297:43;;9320:18;;:::i;:::-;-1:-1:-1;9367:1:1;9356:13;;9240:135::o;10203:422::-;10292:1;10335:5;10292:1;10349:270;10370:7;10360:8;10357:21;10349:270;;;10429:4;10425:1;10421:6;10417:17;10411:4;10408:27;10405:53;;;10438:18;;:::i;:::-;10488:7;10478:8;10474:22;10471:55;;;10508:16;;;;10471:55;10587:22;;;;10547:15;;;;10349:270;;;10353:3;10203:422;;;;;:::o;10630:806::-;10679:5;10709:8;10699:80;;-1:-1:-1;10750:1:1;10764:5;;10699:80;10798:4;10788:76;;-1:-1:-1;10835:1:1;10849:5;;10788:76;10880:4;10898:1;10893:59;;;;10966:1;10961:130;;;;10873:218;;10893:59;10923:1;10914:10;;10937:5;;;10961:130;10998:3;10988:8;10985:17;10982:43;;;11005:18;;:::i;:::-;-1:-1:-1;;11061:1:1;11047:16;;11076:5;;10873:218;;11175:2;11165:8;11162:16;11156:3;11150:4;11147:13;11143:36;11137:2;11127:8;11124:16;11119:2;11113:4;11110:12;11106:35;11103:77;11100:159;;;-1:-1:-1;11212:19:1;;;11244:5;;11100:159;11291:34;11316:8;11310:4;11291:34;:::i;:::-;11361:6;11357:1;11353:6;11349:19;11340:7;11337:32;11334:58;;;11372:18;;:::i;:::-;11410:20;;10630:806;-1:-1:-1;;;10630:806:1:o;11441:140::-;11499:5;11528:47;11569:4;11559:8;11555:19;11549:4;11528:47;:::i;11586:168::-;11659:9;;;11690;;11707:15;;;11701:22;;11687:37;11677:71;;11728:18;;:::i;11759:125::-;11824:9;;;11845:10;;;11842:36;;;11858:18;;:::i;12245:184::-;12315:6;12368:2;12356:9;12347:7;12343:23;12339:32;12336:52;;;12384:1;12381;12374:12;12336:52;-1:-1:-1;12407:16:1;;12245:184;-1:-1:-1;12245:184:1:o;12713:245::-;12780:6;12833:2;12821:9;12812:7;12808:23;12804:32;12801:52;;;12849:1;12846;12839:12;12801:52;12881:9;12875:16;12900:28;12922:5;12900:28;:::i;13730:128::-;13797:9;;;13818:11;;;13815:37;;;13832:18;;:::i;13863:127::-;13924:10;13919:3;13915:20;13912:1;13905:31;13955:4;13952:1;13945:15;13979:4;13976:1;13969:15;14768:217;14808:1;14834;14824:132;;14878:10;14873:3;14869:20;14866:1;14859:31;14913:4;14910:1;14903:15;14941:4;14938:1;14931:15;14824:132;-1:-1:-1;14970:9:1;;14768:217::o;14990:251::-;15060:6;15113:2;15101:9;15092:7;15088:23;15084:32;15081:52;;;15129:1;15126;15119:12;15081:52;15161:9;15155:16;15180:31;15205:5;15180:31;:::i;20383:461::-;20436:3;20474:5;20468:12;20501:6;20496:3;20489:19;20527:4;20556:2;20551:3;20547:12;20540:19;;20593:2;20586:5;20582:14;20614:1;20624:195;20638:6;20635:1;20632:13;20624:195;;;20703:13;;-1:-1:-1;;;;;20699:39:1;20687:52;;20759:12;;;;20794:15;;;;20735:1;20653:9;20624:195;;;-1:-1:-1;20835:3:1;;20383:461;-1:-1:-1;;;;;20383:461:1:o;20849:582::-;21148:6;21137:9;21130:25;21191:6;21186:2;21175:9;21171:18;21164:34;21234:3;21229:2;21218:9;21214:18;21207:31;21111:4;21255:57;21307:3;21296:9;21292:19;21284:6;21255:57;:::i;:::-;-1:-1:-1;;;;;21348:32:1;;;;21343:2;21328:18;;21321:60;-1:-1:-1;21412:3:1;21397:19;21390:35;21247:65;20849:582;-1:-1:-1;;;20849:582:1:o;21436:332::-;21643:6;21632:9;21625:25;21686:2;21681;21670:9;21666:18;21659:30;21606:4;21706:56;21758:2;21747:9;21743:18;21735:6;21706:56;:::i;:::-;21698:64;21436:332;-1:-1:-1;;;;21436:332:1:o;22385:306::-;22473:6;22481;22489;22542:2;22530:9;22521:7;22517:23;22513:32;22510:52;;;22558:1;22555;22548:12;22510:52;22587:9;22581:16;22571:26;;22637:2;22626:9;22622:18;22616:25;22606:35;;22681:2;22670:9;22666:18;22660:25;22650:35;;22385:306;;;;;:::o
Swarm Source
ipfs://fa5df0c9b09a8bdb5ca8fce4ac75beecbbf2c6307f6a27b43c39b75edfd05208
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.