ERC-20
Overview
Max Total Supply
100,000,000 USACOIN
Holders
777
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
938.0952380592 USACOINValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
USACOIN
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-23 */ // SPDX-License-Identifier: MIT /** * @title USACOIN * @author DevAmerican */ pragma solidity ^0.8.0; 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); } pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // benefit is lost if 'b' is also tested. if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { // construction, since the code is only stored at the end of the uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; interface IUniswapV2Router01 { function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts); function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function factory() external pure returns (address); function WETH() external pure returns (address); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn); } pragma solidity ^0.8.0; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external; } pragma solidity ^0.8.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to); event Sync(uint112 reserve0, uint112 reserve1); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,bytes32 s) external; function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); function nonces(address owner) external view returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function PERMIT_TYPEHASH() external pure returns (bytes32); function MINIMUM_LIQUIDITY() external pure returns (uint256); } pragma solidity ^0.8.4; contract USACOIN is IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; uint256 public earlyBuyLimit = 20010000000000000000000; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeBurnt; string private _name; string private _symbol; uint8 private _decimals; uint256 public _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _marketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _burnFee; uint256 private _previousBurnFee = _burnFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public _marketingAddress; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled; bool private isEnabled = false; uint256 public numTokensSellToAddToLiquidity; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor(string memory name_, string memory symbol_, uint256 totalSupply_, address router_, address marketingAddress_, uint16 liquidityFeeBps_, uint16 marketingFeeBps_, uint16 burnBps_) { require(liquidityFeeBps_ >= 0 && liquidityFeeBps_ <= 10**4, "Invalid liquidity fee"); require(marketingFeeBps_ >= 0 && marketingFeeBps_ <= 10**4, "Invalid marketing fee"); require(burnBps_ >= 0 && burnBps_ <= 10**4, "Invalid marketing fee"); if (marketingAddress_ == address(0)) { require(marketingFeeBps_ == 0, "Cant set both marketing address to address 0 and marketing percent more than 0"); } require(liquidityFeeBps_ + marketingFeeBps_ + burnBps_ <= 10**4, "Total fee is over 100% of transfer amount"); _name = name_; _symbol = symbol_; _decimals = 18; _tTotal = totalSupply_; _rTotal = (MAX - (MAX % _tTotal)); _liquidityFee = liquidityFeeBps_; _previousLiquidityFee = _liquidityFee; _marketingAddress = marketingAddress_; _marketingFee = marketingFeeBps_; _burnFee = burnBps_; _previousMarketingFee = _marketingFee; numTokensSellToAddToLiquidity = totalSupply_.mul(5).div(10**4); // 0.05% swapAndLiquifyEnabled = true; _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool){ _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _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); _takeMarketingFee(tMarketing); _takeBurn(tBurn); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setLiquidityFeePercent(uint256 liquidityFeeBps) external onlyOwner { require(liquidityFeeBps >= 0 && liquidityFeeBps <= 10**4, "Invalid bps"); _liquidityFee = liquidityFeeBps; } function setMarketFeePercent(uint256 marketFeeBps) external onlyOwner { require(marketFeeBps >= 0 && marketFeeBps <= 10**4, "Invalid bps"); _marketingFee = marketFeeBps; } function setBurnPercent(uint256 burnBps) external onlyOwner { require(burnBps >= 0 && burnBps <= 10**4, "Invalid bps"); _burnFee = burnBps; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount) = _getRValues(tAmount, tLiquidity, tMarketing, tBurn, _getRate()); return (rAmount, rTransferAmount, tTransferAmount, tLiquidity, tMarketing, tBurn); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketingFee = calculateMarketingFee(tAmount); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount.sub(tLiquidity).sub(tMarketingFee).sub(tBurn); return (tTransferAmount, tLiquidity, tMarketingFee, tBurn); } function _getRValues(uint256 tAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256){ uint256 rAmount = tAmount.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rLiquidity).sub(rMarketing).sub(rBurn); return (rAmount, rTransferAmount); } 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 _takeBurn(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _tFeeBurnt = _tFeeBurnt.add(rBurn); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeMarketingFee(uint256 tMarketing) private { if (tMarketing > 0) { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[_marketingAddress] = _rOwned[_marketingAddress].add(rMarketing); if (_isExcluded[_marketingAddress]) _tOwned[_marketingAddress] = _tOwned[_marketingAddress].add(tMarketing); emit Transfer(_msgSender(), _marketingAddress, tMarketing); } } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div(10**4); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256){ return _amount.mul(_liquidityFee).div(10**4); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { if (_marketingAddress == address(0)) return 0; return _amount.mul(_marketingFee).div(10**4); } function removeAllFee() private { if (_burnFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return; _previousBurnFee = _burnFee; _previousLiquidityFee = _liquidityFee; _previousMarketingFee = _marketingFee; _burnFee = 0; _liquidityFee = 0; _marketingFee = 0; } function restoreAllFee() private { _burnFee = _previousBurnFee; _liquidityFee = _previousLiquidityFee; _marketingFee = _previousMarketingFee; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); address pair = uniswapV2Pair; bool isBuy = from == pair; if(isBuy){ require(isEnabled == true, "ERC20: transfer Not Enabled"); require(balanceOf(to) + amount <= earlyBuyLimit, "CANNOT_BUY_THAT_SUPPLY"); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takeBurn(tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takeBurn(tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takeBurn(tBurn); emit Transfer(sender, recipient, tTransferAmount); } function sendEthViaCall(address payable to, uint256 amount) private { (bool sent, ) = to.call{value: amount}(""); if (!sent) revert("FAILED_ETH_SEND"); } function earlyBuy() public view returns (uint256) { return earlyBuyLimit; } //ONLY OWNER function setEarlyBuyLimit(uint256 _newLimitWEI) public onlyOwner { earlyBuyLimit = _newLimitWEI; } function startTrade() public onlyOwner { isEnabled = !isEnabled; } function changeMarketingAddress(address _newMarketingAddress) public onlyOwner { _marketingAddress = _newMarketingAddress; } function transferBalance(uint256 amount) external onlyOwner { sendEthViaCall(payable(_msgSender()), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"marketingAddress_","type":"address"},{"internalType":"uint16","name":"liquidityFeeBps_","type":"uint16"},{"internalType":"uint16","name":"marketingFeeBps_","type":"uint16"},{"internalType":"uint16","name":"burnBps_","type":"uint16"}],"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","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":"_newMarketingAddress","type":"address"}],"name":"changeMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnBps","type":"uint256"}],"name":"setBurnPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimitWEI","type":"uint256"}],"name":"setEarlyBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketFeeBps","type":"uint256"}],"name":"setMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBalance","outputs":[],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269043cbe88b679ee680000600755600e54600f5560105460115560125460135560006016806101000a81548160ff0219169083151502179055503480156200004b57600080fd5b506040516200660e3803806200660e833981810160405281019062000071919062000a48565b62000091620000856200079060201b60201c565b6200079860201b60201c565b60008361ffff1610158015620000ad57506127108361ffff1611155b620000ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e69062000c4a565b60405180910390fd5b60008261ffff16101580156200010b57506127108261ffff1611155b6200014d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001449062000c8e565b60405180910390fd5b60008161ffff16101580156200016957506127108161ffff1611155b620001ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a29062000c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200022c5760008261ffff16146200022b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002229062000c28565b60405180910390fd5b5b6127108183856200023e919062000d3d565b6200024a919062000d3d565b61ffff16111562000292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002899062000c6c565b60405180910390fd5b87600b9080519060200190620002aa929190620008b5565b5086600c9080519060200190620002c3929190620008b5565b506012600d60006101000a81548160ff021916908360ff16021790555085600881905550600854600019620002f9919062000f3e565b60001962000308919062000e15565b6009819055508261ffff16600e81905550600e54600f8190555083601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161ffff166010819055508061ffff16601281905550601054601181905550620003b8612710620003a46005896200085c60201b620020b31790919060201c565b6200087460201b620020c91790919060201c565b6017819055506001601660156101000a81548160ff02191690831515021790555060095460016000620003f06200088c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008590508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047a57600080fd5b505afa1580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b5919062000a1c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200051857600080fd5b505afa1580156200052d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000553919062000a1c565b6040518363ffffffff1660e01b81526004016200057292919062000bfb565b602060405180830381600087803b1580156200058d57600080fd5b505af1158015620005a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c8919062000a1c565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006200065f6200088c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007186200088c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000779919062000cb0565b60405180910390a3505050505050505050620011a7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836200086c919062000db4565b905092915050565b6000818362000884919062000d7c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620008c39062000ed2565b90600052602060002090601f016020900481019282620008e7576000855562000933565b82601f106200090257805160ff191683800117855562000933565b8280016001018555821562000933579182015b828111156200093257825182559160200191906001019062000915565b5b50905062000942919062000946565b5090565b5b808211156200096157600081600090555060010162000947565b5090565b60006200097c620009768462000cf6565b62000ccd565b9050828152602081018484840111156200099557600080fd5b620009a284828562000e9c565b509392505050565b600081519050620009bb8162001159565b92915050565b600082601f830112620009d357600080fd5b8151620009e584826020860162000965565b91505092915050565b600081519050620009ff8162001173565b92915050565b60008151905062000a16816200118d565b92915050565b60006020828403121562000a2f57600080fd5b600062000a3f84828501620009aa565b91505092915050565b600080600080600080600080610100898b03121562000a6657600080fd5b600089015167ffffffffffffffff81111562000a8157600080fd5b62000a8f8b828c01620009c1565b985050602089015167ffffffffffffffff81111562000aad57600080fd5b62000abb8b828c01620009c1565b975050604062000ace8b828c0162000a05565b965050606062000ae18b828c01620009aa565b955050608062000af48b828c01620009aa565b94505060a062000b078b828c01620009ee565b93505060c062000b1a8b828c01620009ee565b92505060e062000b2d8b828c01620009ee565b9150509295985092959890939650565b62000b488162000e50565b82525050565b600062000b5d604e8362000d2c565b915062000b6a8262001043565b606082019050919050565b600062000b8460158362000d2c565b915062000b9182620010b8565b602082019050919050565b600062000bab60298362000d2c565b915062000bb882620010e1565b604082019050919050565b600062000bd260158362000d2c565b915062000bdf8262001130565b602082019050919050565b62000bf58162000e92565b82525050565b600060408201905062000c12600083018562000b3d565b62000c21602083018462000b3d565b9392505050565b6000602082019050818103600083015262000c438162000b4e565b9050919050565b6000602082019050818103600083015262000c658162000b75565b9050919050565b6000602082019050818103600083015262000c878162000b9c565b9050919050565b6000602082019050818103600083015262000ca98162000bc3565b9050919050565b600060208201905062000cc7600083018462000bea565b92915050565b600062000cd962000cec565b905062000ce7828262000f08565b919050565b6000604051905090565b600067ffffffffffffffff82111562000d145762000d1362001003565b5b62000d1f8262001032565b9050602081019050919050565b600082825260208201905092915050565b600062000d4a8262000e64565b915062000d578362000e64565b92508261ffff0382111562000d715762000d7062000f76565b5b828201905092915050565b600062000d898262000e92565b915062000d968362000e92565b92508262000da95762000da862000fa5565b5b828204905092915050565b600062000dc18262000e92565b915062000dce8362000e92565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e0a5762000e0962000f76565b5b828202905092915050565b600062000e228262000e92565b915062000e2f8362000e92565b92508282101562000e455762000e4462000f76565b5b828203905092915050565b600062000e5d8262000e72565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ebc57808201518184015260208101905062000e9f565b8381111562000ecc576000848401525b50505050565b6000600282049050600182168062000eeb57607f821691505b6020821081141562000f025762000f0162000fd4565b5b50919050565b62000f138262001032565b810181811067ffffffffffffffff8211171562000f355762000f3462001003565b5b80604052505050565b600062000f4b8262000e92565b915062000f588362000e92565b92508262000f6b5762000f6a62000fa5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616e742073657420626f7468206d61726b6574696e6720616464726573732060008201527f746f2061646472657373203020616e64206d61726b6574696e6720706572636560208201527f6e74206d6f7265207468616e2030000000000000000000000000000000000000604082015250565b7f496e76616c6964206c6971756964697479206665650000000000000000000000600082015250565b7f546f74616c20666565206973206f7665722031303025206f66207472616e736660008201527f657220616d6f756e740000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d61726b6574696e67206665650000000000000000000000600082015250565b620011648162000e50565b81146200117057600080fd5b50565b6200117e8162000e64565b81146200118a57600080fd5b50565b620011988162000e92565b8114620011a457600080fd5b50565b61545780620011b76000396000f3fe60806040526004361061023f5760003560e01c80636c5808011161012e578063a6c5fcad116100ab578063caac79341161006f578063caac7934146108a4578063d12a7688146108cf578063dd62ed3e146108fa578063ea2f0b3714610937578063f2fde38b1461096057610246565b8063a6c5fcad146107c1578063a9059cbb146107ea578063bb1570da14610827578063c0b0fda214610850578063c49b9a801461087b57610246565b80638da5cb5b116100f25780638da5cb5b146106da5780638ee88c531461070557806393fe51441461072e57806395d89b4114610759578063a457c2d71461078457610246565b80636c5808011461060957806370a0823114610620578063715018a61461065d57806388f82020146106745780638a60c4c1146106b157610246565b806339265989116101bc5780634a74bb02116101805780634a74bb021461052257806351877b431461054d57806352390c02146105785780635342acb4146105a15780636bc87c3a146105de57610246565b8063392659891461042b5780633950935114610454578063437823ec146104915780634549b039146104ba57806349bd5a5e146104f757610246565b806322976e0d1161020357806322976e0d1461033257806323b872dd1461035d5780632d8381191461039a578063313ce567146103d75780633685d4191461040257610246565b8063048dec381461024b57806306fdde0314610274578063095ea7b31461029f5780631694505e146102dc57806318160ddd1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906144ff565b610989565b005b34801561028057600080fd5b50610289610a49565b6040516102969190614abe565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906145dc565b610adb565b6040516102d39190614a88565b60405180910390f35b3480156102e857600080fd5b506102f1610af9565b6040516102fe9190614aa3565b60405180910390f35b34801561031357600080fd5b5061031c610b1f565b6040516103299190614c80565b60405180910390f35b34801561033e57600080fd5b50610347610b29565b6040516103549190614c80565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061458d565b610b2f565b6040516103919190614a88565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190614641565b610c08565b6040516103ce9190614c80565b60405180910390f35b3480156103e357600080fd5b506103ec610c76565b6040516103f99190614d2c565b60405180910390f35b34801561040e57600080fd5b50610429600480360381019061042491906144ff565b610c8d565b005b34801561043757600080fd5b50610452600480360381019061044d9190614641565b61105b565b005b34801561046057600080fd5b5061047b600480360381019061047691906145dc565b611133565b6040516104889190614a88565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b391906144ff565b6111e6565b005b3480156104c657600080fd5b506104e160048036038101906104dc919061466a565b6112bd565b6040516104ee9190614c80565b60405180910390f35b34801561050357600080fd5b5061050c611341565b6040516105199190614a0c565b60405180910390f35b34801561052e57600080fd5b50610537611367565b6040516105449190614a88565b60405180910390f35b34801561055957600080fd5b5061056261137a565b60405161056f9190614c80565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a91906144ff565b611384565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906144ff565b61161f565b6040516105d59190614a88565b60405180910390f35b3480156105ea57600080fd5b506105f3611675565b6040516106009190614c80565b60405180910390f35b34801561061557600080fd5b5061061e61167b565b005b34801561062c57600080fd5b50610647600480360381019061064291906144ff565b611720565b6040516106549190614c80565b60405180910390f35b34801561066957600080fd5b5061067261180b565b005b34801561068057600080fd5b5061069b600480360381019061069691906144ff565b611893565b6040516106a89190614a88565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190614641565b6118e9565b005b3480156106e657600080fd5b506106ef611979565b6040516106fc9190614a0c565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614641565b6119a2565b005b34801561073a57600080fd5b50610743611a7a565b6040516107509190614c80565b60405180910390f35b34801561076557600080fd5b5061076e611a80565b60405161077b9190614abe565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906145dc565b611b12565b6040516107b89190614a88565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190614641565b611bdf565b005b3480156107f657600080fd5b50610811600480360381019061080c91906145dc565b611c65565b60405161081e9190614a88565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190614641565b611c83565b005b34801561085c57600080fd5b50610865611d5b565b6040516108729190614c80565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d9190614618565b611d61565b005b3480156108b057600080fd5b506108b9611e31565b6040516108c69190614a0c565b60405180910390f35b3480156108db57600080fd5b506108e4611e57565b6040516108f19190614c80565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614551565b611e5d565b60405161092e9190614c80565b60405180910390f35b34801561094357600080fd5b5061095e600480360381019061095991906144ff565b611ee4565b005b34801561096c57600080fd5b50610987600480360381019061098291906144ff565b611fbb565b005b6109916120df565b73ffffffffffffffffffffffffffffffffffffffff166109af611979565b73ffffffffffffffffffffffffffffffffffffffff1614610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc90614be0565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600b8054610a5890614f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490614f7a565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610aef610ae86120df565b84846120e7565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b60105481565b6000610b3c8484846122b2565b610bfd84610b486120df565b610bf8856040518060600160405280602881526020016153d560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bae6120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261d9092919063ffffffff16565b6120e7565b600190509392505050565b6000600954821115610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614b40565b60405180910390fd5b6000610c59612672565b9050610c6e81846120c990919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610c956120df565b73ffffffffffffffffffffffffffffffffffffffff16610cb3611979565b73ffffffffffffffffffffffffffffffffffffffff1614610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090614be0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614ba0565b60405180910390fd5b60005b600680549050811015611057578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110445760066001600680549050610e519190614e88565b81548110610e88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061100a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611057565b808061104f90614fac565b915050610d98565b5050565b6110636120df565b73ffffffffffffffffffffffffffffffffffffffff16611081611979565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90614be0565b60405180910390fd5b600081101580156110ea57506127108111155b611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090614c00565b60405180910390fd5b8060108190555050565b60006111dc6111406120df565b846111d785600360006111516120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b6120e7565b6001905092915050565b6111ee6120df565b73ffffffffffffffffffffffffffffffffffffffff1661120c611979565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990614be0565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90614bc0565b60405180910390fd5b81611324576000611314846126b3565b505050505090508091505061133b565b600061132f846126b3565b50505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660159054906101000a900460ff1681565b6000600754905090565b61138c6120df565b73ffffffffffffffffffffffffffffffffffffffff166113aa611979565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790614be0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614ba0565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115615761151d600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c08565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b6116836120df565b73ffffffffffffffffffffffffffffffffffffffff166116a1611979565b73ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee90614be0565b60405180910390fd5b60168054906101000a900460ff16156016806101000a81548160ff021916908315150217905550565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117bb57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611806565b611803600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c08565b90505b919050565b6118136120df565b73ffffffffffffffffffffffffffffffffffffffff16611831611979565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614be0565b60405180910390fd5b611891600061270f565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118f16120df565b73ffffffffffffffffffffffffffffffffffffffff1661190f611979565b73ffffffffffffffffffffffffffffffffffffffff1614611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614be0565b60405180910390fd5b6119766119706120df565b826127d3565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119aa6120df565b73ffffffffffffffffffffffffffffffffffffffff166119c8611979565b73ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590614be0565b60405180910390fd5b60008110158015611a3157506127108111155b611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614c00565b60405180910390fd5b80600e8190555050565b60075481565b6060600c8054611a8f90614f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614f7a565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6120df565b84611bd0856040518060600160405280602581526020016153fd6025913960036000611b496120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261d9092919063ffffffff16565b6120e7565b6001905092915050565b611be76120df565b73ffffffffffffffffffffffffffffffffffffffff16611c05611979565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614be0565b60405180910390fd5b8060078190555050565b6000611c79611c726120df565b84846122b2565b6001905092915050565b611c8b6120df565b73ffffffffffffffffffffffffffffffffffffffff16611ca9611979565b73ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614be0565b60405180910390fd5b60008110158015611d1257506127108111155b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614c00565b60405180910390fd5b8060128190555050565b60125481565b611d696120df565b73ffffffffffffffffffffffffffffffffffffffff16611d87611979565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614be0565b60405180910390fd5b80601660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611e269190614a88565b60405180910390a150565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eec6120df565b73ffffffffffffffffffffffffffffffffffffffff16611f0a611979565b73ffffffffffffffffffffffffffffffffffffffff1614611f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5790614be0565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fc36120df565b73ffffffffffffffffffffffffffffffffffffffff16611fe1611979565b73ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90614be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e90614b60565b60405180910390fd5b6120b08161270f565b50565b600081836120c19190614e2e565b905092915050565b600081836120d79190614dfd565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614c40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614b80565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122a59190614c80565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614c20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614b00565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050801561249f576001151560168054906101000a900460ff16151514612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d90614ae0565b60405180910390fd5b6007548361245386611720565b61245d9190614da7565b111561249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249590614b20565b60405180910390fd5b5b60006124aa30611720565b9050600060175482101590508080156124d05750601660149054906101000a900460ff16155b801561252a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b80156125425750601660159054906101000a900460ff165b1561255657601754915061255582612884565b5b600060019050600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125fd5750600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260757600090505b6126138888888461295a565b5050505050505050565b6000838311158290612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9190614abe565b60405180910390fd5b5082840390509392505050565b600080600061267f612c6b565b9150915061269681836120c990919063ffffffff16565b9250505090565b600081836126ab9190614da7565b905092915050565b6000806000806000806000806000806126cb8b612fb6565b93509350935093506000806126ea8d8686866126e5612672565b613035565b915091508181878787879b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127f9906149f7565b60006040518083038185875af1925050503d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b505090508061287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690614c60565b60405180910390fd5b505050565b6001601660146101000a81548160ff02191690831515021790555060006128b56002836120c990919063ffffffff16565b905060006128cc82846130e490919063ffffffff16565b905060004790506128dc836130fa565b60006128f182476130e490919063ffffffff16565b90506128fd83826133be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161293093929190614cf5565b60405180910390a1505050506000601660146101000a81548160ff02191690831515021790555050565b80612968576129676134b2565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a0b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2057612a1b848484613514565b612c57565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ac35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ad857612ad384848461377c565b612c56565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b7c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b9157612b8c8484846139e4565b612c55565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c335750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c4857612c43848484613bb7565b612c54565b612c538484846139e4565b5b5b5b5b80612c6557612c64613eb4565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612f7957826001600060068481548110612ccb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ddf5750816002600060068481548110612d77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612df65760095460085494509450505050612fb2565b612eac6001600060068481548110612e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130e490919063ffffffff16565b9250612f646002600060068481548110612eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130e490919063ffffffff16565b91508080612f7190614fac565b915050612c7f565b50612f916008546009546120c990919063ffffffff16565b821015612fa957600954600854935093505050612fb2565b81819350935050505b9091565b6000806000806000612fc786613ed1565b90506000612fd487613f03565b90506000612fe188613f95565b9050600061301c8261300e85613000888e6130e490919063ffffffff16565b6130e490919063ffffffff16565b6130e490919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600061304d84896120b390919063ffffffff16565b9050600061306485896120b390919063ffffffff16565b9050600061307b86896120b390919063ffffffff16565b9050600061309287896120b390919063ffffffff16565b905060006130cd826130bf856130b1888a6130e490919063ffffffff16565b6130e490919063ffffffff16565b6130e490919063ffffffff16565b905084819650965050505050509550959350505050565b600081836130f29190614e88565b905092915050565b6000600267ffffffffffffffff81111561313d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561316b5781602001602082028036833780820191505090505b50905030816000815181106131a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561324b57600080fd5b505afa15801561325f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132839190614528565b816001815181106132bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061332430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120e7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613388959493929190614c9b565b600060405180830381600087803b1580156133a257600080fd5b505af11580156133b6573d6000803e3d6000fd5b505050505050565b6133eb30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120e7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613437611979565b426040518863ffffffff1660e01b815260040161345996959493929190614a27565b6060604051808303818588803b15801561347257600080fd5b505af1158015613486573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ab91906146a6565b5050505050565b60006012541480156134c657506000600e54145b80156134d457506000601054145b156134de57613512565b601254601381905550600e54600f8190555060105460118190555060006012819055506000600e8190555060006010819055505b565b600080600080600080613526876126b3565b95509550955095509550955061358487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ae85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136fa83613fc7565b6137038261416c565b61370c81614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137699190614c80565b60405180910390a3505050505050505050565b60008060008060008061378e876126b3565b9550955095509550955095506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388184600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396283613fc7565b61396b8261416c565b61397481614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516139d19190614c80565b60405180910390a3505050505050505050565b6000806000806000806139f6876126b3565b955095509550955095509550613a5486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b3583613fc7565b613b3e8261416c565b613b4781614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ba49190614c80565b60405180910390a3505050505050505050565b600080600080600080613bc9876126b3565b955095509550955095509550613c2787600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cbc86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5184600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e3283613fc7565b613e3b8261416c565b613e4481614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ea19190614c80565b60405180910390a3505050505050505050565b601354601281905550600f54600e81905550601154601081905550565b6000613efc612710613eee600e54856120b390919063ffffffff16565b6120c990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613f645760009050613f90565b613f8d612710613f7f601054856120b390919063ffffffff16565b6120c990919063ffffffff16565b90505b919050565b6000613fc0612710613fb2601254856120b390919063ffffffff16565b6120c990919063ffffffff16565b9050919050565b6000613fd1612672565b90506000613fe882846120b390919063ffffffff16565b905061403c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141675761412383600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600081111561445057600061417f612672565b9050600061419682846120b390919063ffffffff16565b905061420c8160016000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b60016000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143bf576143598360026000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b60026000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166144006120df565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144459190614c80565b60405180910390a350505b50565b600061445d612672565b9050600061447482846120b390919063ffffffff16565b905061448b81600a5461269d90919063ffffffff16565b600a81905550505050565b6000813590506144a58161538f565b92915050565b6000815190506144ba8161538f565b92915050565b6000813590506144cf816153a6565b92915050565b6000813590506144e4816153bd565b92915050565b6000815190506144f9816153bd565b92915050565b60006020828403121561451157600080fd5b600061451f84828501614496565b91505092915050565b60006020828403121561453a57600080fd5b6000614548848285016144ab565b91505092915050565b6000806040838503121561456457600080fd5b600061457285828601614496565b925050602061458385828601614496565b9150509250929050565b6000806000606084860312156145a257600080fd5b60006145b086828701614496565b93505060206145c186828701614496565b92505060406145d2868287016144d5565b9150509250925092565b600080604083850312156145ef57600080fd5b60006145fd85828601614496565b925050602061460e858286016144d5565b9150509250929050565b60006020828403121561462a57600080fd5b6000614638848285016144c0565b91505092915050565b60006020828403121561465357600080fd5b6000614661848285016144d5565b91505092915050565b6000806040838503121561467d57600080fd5b600061468b858286016144d5565b925050602061469c858286016144c0565b9150509250929050565b6000806000606084860312156146bb57600080fd5b60006146c9868287016144ea565b93505060206146da868287016144ea565b92505060406146eb868287016144ea565b9150509250925092565b6000614701838361470d565b60208301905092915050565b61471681614ebc565b82525050565b61472581614ebc565b82525050565b600061473682614d57565b6147408185614d7a565b935061474b83614d47565b8060005b8381101561477c57815161476388826146f5565b975061476e83614d6d565b92505060018101905061474f565b5085935050505092915050565b61479281614ece565b82525050565b6147a181614f11565b82525050565b6147b081614f35565b82525050565b60006147c182614d62565b6147cb8185614d96565b93506147db818560208601614f47565b6147e481615082565b840191505092915050565b60006147fc601b83614d96565b915061480782615093565b602082019050919050565b600061481f602383614d96565b915061482a826150bc565b604082019050919050565b6000614842601683614d96565b915061484d8261510b565b602082019050919050565b6000614865602a83614d96565b915061487082615134565b604082019050919050565b6000614888602683614d96565b915061489382615183565b604082019050919050565b60006148ab602283614d96565b91506148b6826151d2565b604082019050919050565b60006148ce601b83614d96565b91506148d982615221565b602082019050919050565b60006148f1601f83614d96565b91506148fc8261524a565b602082019050919050565b6000614914602083614d96565b915061491f82615273565b602082019050919050565b6000614937600b83614d96565b91506149428261529c565b602082019050919050565b600061495a602583614d96565b9150614965826152c5565b604082019050919050565b600061497d600083614d8b565b915061498882615314565b600082019050919050565b60006149a0602483614d96565b91506149ab82615317565b604082019050919050565b60006149c3600f83614d96565b91506149ce82615366565b602082019050919050565b6149e281614efa565b82525050565b6149f181614f04565b82525050565b6000614a0282614970565b9150819050919050565b6000602082019050614a21600083018461471c565b92915050565b600060c082019050614a3c600083018961471c565b614a4960208301886149d9565b614a5660408301876147a7565b614a6360608301866147a7565b614a70608083018561471c565b614a7d60a08301846149d9565b979650505050505050565b6000602082019050614a9d6000830184614789565b92915050565b6000602082019050614ab86000830184614798565b92915050565b60006020820190508181036000830152614ad881846147b6565b905092915050565b60006020820190508181036000830152614af9816147ef565b9050919050565b60006020820190508181036000830152614b1981614812565b9050919050565b60006020820190508181036000830152614b3981614835565b9050919050565b60006020820190508181036000830152614b5981614858565b9050919050565b60006020820190508181036000830152614b798161487b565b9050919050565b60006020820190508181036000830152614b998161489e565b9050919050565b60006020820190508181036000830152614bb9816148c1565b9050919050565b60006020820190508181036000830152614bd9816148e4565b9050919050565b60006020820190508181036000830152614bf981614907565b9050919050565b60006020820190508181036000830152614c198161492a565b9050919050565b60006020820190508181036000830152614c398161494d565b9050919050565b60006020820190508181036000830152614c5981614993565b9050919050565b60006020820190508181036000830152614c79816149b6565b9050919050565b6000602082019050614c9560008301846149d9565b92915050565b600060a082019050614cb060008301886149d9565b614cbd60208301876147a7565b8181036040830152614ccf818661472b565b9050614cde606083018561471c565b614ceb60808301846149d9565b9695505050505050565b6000606082019050614d0a60008301866149d9565b614d1760208301856149d9565b614d2460408301846149d9565b949350505050565b6000602082019050614d4160008301846149e8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614db282614efa565b9150614dbd83614efa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614df257614df1614ff5565b5b828201905092915050565b6000614e0882614efa565b9150614e1383614efa565b925082614e2357614e22615024565b5b828204905092915050565b6000614e3982614efa565b9150614e4483614efa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7d57614e7c614ff5565b5b828202905092915050565b6000614e9382614efa565b9150614e9e83614efa565b925082821015614eb157614eb0614ff5565b5b828203905092915050565b6000614ec782614eda565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f1c82614f23565b9050919050565b6000614f2e82614eda565b9050919050565b6000614f4082614efa565b9050919050565b60005b83811015614f65578082015181840152602081019050614f4a565b83811115614f74576000848401525b50505050565b60006002820490506001821680614f9257607f821691505b60208210811415614fa657614fa5615053565b5b50919050565b6000614fb782614efa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fea57614fe9614ff5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e73666572204e6f7420456e61626c65640000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f43414e4e4f545f4255595f544841545f535550504c5900000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c696420627073000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4641494c45445f4554485f53454e440000000000000000000000000000000000600082015250565b61539881614ebc565b81146153a357600080fd5b50565b6153af81614ece565b81146153ba57600080fd5b50565b6153c681614efa565b81146153d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204f0a934669f10c6f5fba09c3559927637e90bff71e8889007307dc3f428608ab64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000061875476770f595ff08fd76d1cdfc77c5101dc3d00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000007555341434f494e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007555341434f494e00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80636c5808011161012e578063a6c5fcad116100ab578063caac79341161006f578063caac7934146108a4578063d12a7688146108cf578063dd62ed3e146108fa578063ea2f0b3714610937578063f2fde38b1461096057610246565b8063a6c5fcad146107c1578063a9059cbb146107ea578063bb1570da14610827578063c0b0fda214610850578063c49b9a801461087b57610246565b80638da5cb5b116100f25780638da5cb5b146106da5780638ee88c531461070557806393fe51441461072e57806395d89b4114610759578063a457c2d71461078457610246565b80636c5808011461060957806370a0823114610620578063715018a61461065d57806388f82020146106745780638a60c4c1146106b157610246565b806339265989116101bc5780634a74bb02116101805780634a74bb021461052257806351877b431461054d57806352390c02146105785780635342acb4146105a15780636bc87c3a146105de57610246565b8063392659891461042b5780633950935114610454578063437823ec146104915780634549b039146104ba57806349bd5a5e146104f757610246565b806322976e0d1161020357806322976e0d1461033257806323b872dd1461035d5780632d8381191461039a578063313ce567146103d75780633685d4191461040257610246565b8063048dec381461024b57806306fdde0314610274578063095ea7b31461029f5780631694505e146102dc57806318160ddd1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906144ff565b610989565b005b34801561028057600080fd5b50610289610a49565b6040516102969190614abe565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906145dc565b610adb565b6040516102d39190614a88565b60405180910390f35b3480156102e857600080fd5b506102f1610af9565b6040516102fe9190614aa3565b60405180910390f35b34801561031357600080fd5b5061031c610b1f565b6040516103299190614c80565b60405180910390f35b34801561033e57600080fd5b50610347610b29565b6040516103549190614c80565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061458d565b610b2f565b6040516103919190614a88565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190614641565b610c08565b6040516103ce9190614c80565b60405180910390f35b3480156103e357600080fd5b506103ec610c76565b6040516103f99190614d2c565b60405180910390f35b34801561040e57600080fd5b50610429600480360381019061042491906144ff565b610c8d565b005b34801561043757600080fd5b50610452600480360381019061044d9190614641565b61105b565b005b34801561046057600080fd5b5061047b600480360381019061047691906145dc565b611133565b6040516104889190614a88565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b391906144ff565b6111e6565b005b3480156104c657600080fd5b506104e160048036038101906104dc919061466a565b6112bd565b6040516104ee9190614c80565b60405180910390f35b34801561050357600080fd5b5061050c611341565b6040516105199190614a0c565b60405180910390f35b34801561052e57600080fd5b50610537611367565b6040516105449190614a88565b60405180910390f35b34801561055957600080fd5b5061056261137a565b60405161056f9190614c80565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a91906144ff565b611384565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906144ff565b61161f565b6040516105d59190614a88565b60405180910390f35b3480156105ea57600080fd5b506105f3611675565b6040516106009190614c80565b60405180910390f35b34801561061557600080fd5b5061061e61167b565b005b34801561062c57600080fd5b50610647600480360381019061064291906144ff565b611720565b6040516106549190614c80565b60405180910390f35b34801561066957600080fd5b5061067261180b565b005b34801561068057600080fd5b5061069b600480360381019061069691906144ff565b611893565b6040516106a89190614a88565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190614641565b6118e9565b005b3480156106e657600080fd5b506106ef611979565b6040516106fc9190614a0c565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614641565b6119a2565b005b34801561073a57600080fd5b50610743611a7a565b6040516107509190614c80565b60405180910390f35b34801561076557600080fd5b5061076e611a80565b60405161077b9190614abe565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906145dc565b611b12565b6040516107b89190614a88565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190614641565b611bdf565b005b3480156107f657600080fd5b50610811600480360381019061080c91906145dc565b611c65565b60405161081e9190614a88565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190614641565b611c83565b005b34801561085c57600080fd5b50610865611d5b565b6040516108729190614c80565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d9190614618565b611d61565b005b3480156108b057600080fd5b506108b9611e31565b6040516108c69190614a0c565b60405180910390f35b3480156108db57600080fd5b506108e4611e57565b6040516108f19190614c80565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614551565b611e5d565b60405161092e9190614c80565b60405180910390f35b34801561094357600080fd5b5061095e600480360381019061095991906144ff565b611ee4565b005b34801561096c57600080fd5b50610987600480360381019061098291906144ff565b611fbb565b005b6109916120df565b73ffffffffffffffffffffffffffffffffffffffff166109af611979565b73ffffffffffffffffffffffffffffffffffffffff1614610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc90614be0565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600b8054610a5890614f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490614f7a565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610aef610ae86120df565b84846120e7565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b60105481565b6000610b3c8484846122b2565b610bfd84610b486120df565b610bf8856040518060600160405280602881526020016153d560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bae6120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261d9092919063ffffffff16565b6120e7565b600190509392505050565b6000600954821115610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614b40565b60405180910390fd5b6000610c59612672565b9050610c6e81846120c990919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610c956120df565b73ffffffffffffffffffffffffffffffffffffffff16610cb3611979565b73ffffffffffffffffffffffffffffffffffffffff1614610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090614be0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90614ba0565b60405180910390fd5b60005b600680549050811015611057578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110445760066001600680549050610e519190614e88565b81548110610e88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061100a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611057565b808061104f90614fac565b915050610d98565b5050565b6110636120df565b73ffffffffffffffffffffffffffffffffffffffff16611081611979565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90614be0565b60405180910390fd5b600081101580156110ea57506127108111155b611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090614c00565b60405180910390fd5b8060108190555050565b60006111dc6111406120df565b846111d785600360006111516120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b6120e7565b6001905092915050565b6111ee6120df565b73ffffffffffffffffffffffffffffffffffffffff1661120c611979565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990614be0565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90614bc0565b60405180910390fd5b81611324576000611314846126b3565b505050505090508091505061133b565b600061132f846126b3565b50505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660159054906101000a900460ff1681565b6000600754905090565b61138c6120df565b73ffffffffffffffffffffffffffffffffffffffff166113aa611979565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790614be0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614ba0565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115615761151d600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c08565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b6116836120df565b73ffffffffffffffffffffffffffffffffffffffff166116a1611979565b73ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee90614be0565b60405180910390fd5b60168054906101000a900460ff16156016806101000a81548160ff021916908315150217905550565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117bb57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611806565b611803600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c08565b90505b919050565b6118136120df565b73ffffffffffffffffffffffffffffffffffffffff16611831611979565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614be0565b60405180910390fd5b611891600061270f565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118f16120df565b73ffffffffffffffffffffffffffffffffffffffff1661190f611979565b73ffffffffffffffffffffffffffffffffffffffff1614611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614be0565b60405180910390fd5b6119766119706120df565b826127d3565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119aa6120df565b73ffffffffffffffffffffffffffffffffffffffff166119c8611979565b73ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590614be0565b60405180910390fd5b60008110158015611a3157506127108111155b611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614c00565b60405180910390fd5b80600e8190555050565b60075481565b6060600c8054611a8f90614f7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614f7a565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6120df565b84611bd0856040518060600160405280602581526020016153fd6025913960036000611b496120df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261d9092919063ffffffff16565b6120e7565b6001905092915050565b611be76120df565b73ffffffffffffffffffffffffffffffffffffffff16611c05611979565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290614be0565b60405180910390fd5b8060078190555050565b6000611c79611c726120df565b84846122b2565b6001905092915050565b611c8b6120df565b73ffffffffffffffffffffffffffffffffffffffff16611ca9611979565b73ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614be0565b60405180910390fd5b60008110158015611d1257506127108111155b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614c00565b60405180910390fd5b8060128190555050565b60125481565b611d696120df565b73ffffffffffffffffffffffffffffffffffffffff16611d87611979565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614be0565b60405180910390fd5b80601660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611e269190614a88565b60405180910390a150565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eec6120df565b73ffffffffffffffffffffffffffffffffffffffff16611f0a611979565b73ffffffffffffffffffffffffffffffffffffffff1614611f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5790614be0565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fc36120df565b73ffffffffffffffffffffffffffffffffffffffff16611fe1611979565b73ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90614be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e90614b60565b60405180910390fd5b6120b08161270f565b50565b600081836120c19190614e2e565b905092915050565b600081836120d79190614dfd565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614c40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90614b80565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122a59190614c80565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614c20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614b00565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050801561249f576001151560168054906101000a900460ff16151514612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d90614ae0565b60405180910390fd5b6007548361245386611720565b61245d9190614da7565b111561249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249590614b20565b60405180910390fd5b5b60006124aa30611720565b9050600060175482101590508080156124d05750601660149054906101000a900460ff16155b801561252a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b80156125425750601660159054906101000a900460ff165b1561255657601754915061255582612884565b5b600060019050600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125fd5750600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561260757600090505b6126138888888461295a565b5050505050505050565b6000838311158290612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9190614abe565b60405180910390fd5b5082840390509392505050565b600080600061267f612c6b565b9150915061269681836120c990919063ffffffff16565b9250505090565b600081836126ab9190614da7565b905092915050565b6000806000806000806000806000806126cb8b612fb6565b93509350935093506000806126ea8d8686866126e5612672565b613035565b915091508181878787879b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127f9906149f7565b60006040518083038185875af1925050503d8060008114612836576040519150601f19603f3d011682016040523d82523d6000602084013e61283b565b606091505b505090508061287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690614c60565b60405180910390fd5b505050565b6001601660146101000a81548160ff02191690831515021790555060006128b56002836120c990919063ffffffff16565b905060006128cc82846130e490919063ffffffff16565b905060004790506128dc836130fa565b60006128f182476130e490919063ffffffff16565b90506128fd83826133be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161293093929190614cf5565b60405180910390a1505050506000601660146101000a81548160ff02191690831515021790555050565b80612968576129676134b2565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a0b5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a2057612a1b848484613514565b612c57565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ac35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ad857612ad384848461377c565b612c56565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b7c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b9157612b8c8484846139e4565b612c55565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c335750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c4857612c43848484613bb7565b612c54565b612c538484846139e4565b5b5b5b5b80612c6557612c64613eb4565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612f7957826001600060068481548110612ccb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ddf5750816002600060068481548110612d77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612df65760095460085494509450505050612fb2565b612eac6001600060068481548110612e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130e490919063ffffffff16565b9250612f646002600060068481548110612eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130e490919063ffffffff16565b91508080612f7190614fac565b915050612c7f565b50612f916008546009546120c990919063ffffffff16565b821015612fa957600954600854935093505050612fb2565b81819350935050505b9091565b6000806000806000612fc786613ed1565b90506000612fd487613f03565b90506000612fe188613f95565b9050600061301c8261300e85613000888e6130e490919063ffffffff16565b6130e490919063ffffffff16565b6130e490919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600061304d84896120b390919063ffffffff16565b9050600061306485896120b390919063ffffffff16565b9050600061307b86896120b390919063ffffffff16565b9050600061309287896120b390919063ffffffff16565b905060006130cd826130bf856130b1888a6130e490919063ffffffff16565b6130e490919063ffffffff16565b6130e490919063ffffffff16565b905084819650965050505050509550959350505050565b600081836130f29190614e88565b905092915050565b6000600267ffffffffffffffff81111561313d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561316b5781602001602082028036833780820191505090505b50905030816000815181106131a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561324b57600080fd5b505afa15801561325f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132839190614528565b816001815181106132bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061332430601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120e7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613388959493929190614c9b565b600060405180830381600087803b1580156133a257600080fd5b505af11580156133b6573d6000803e3d6000fd5b505050505050565b6133eb30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120e7565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613437611979565b426040518863ffffffff1660e01b815260040161345996959493929190614a27565b6060604051808303818588803b15801561347257600080fd5b505af1158015613486573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ab91906146a6565b5050505050565b60006012541480156134c657506000600e54145b80156134d457506000601054145b156134de57613512565b601254601381905550600e54600f8190555060105460118190555060006012819055506000600e8190555060006010819055505b565b600080600080600080613526876126b3565b95509550955095509550955061358487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136ae85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136fa83613fc7565b6137038261416c565b61370c81614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137699190614c80565b60405180910390a3505050505050505050565b60008060008060008061378e876126b3565b9550955095509550955095506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388184600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061391685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061396283613fc7565b61396b8261416c565b61397481614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516139d19190614c80565b60405180910390a3505050505050505050565b6000806000806000806139f6876126b3565b955095509550955095509550613a5486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ae985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b3583613fc7565b613b3e8261416c565b613b4781614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ba49190614c80565b60405180910390a3505050505050505050565b600080600080600080613bc9876126b3565b955095509550955095509550613c2787600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cbc86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d5184600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613de685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e3283613fc7565b613e3b8261416c565b613e4481614453565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ea19190614c80565b60405180910390a3505050505050505050565b601354601281905550600f54600e81905550601154601081905550565b6000613efc612710613eee600e54856120b390919063ffffffff16565b6120c990919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613f645760009050613f90565b613f8d612710613f7f601054856120b390919063ffffffff16565b6120c990919063ffffffff16565b90505b919050565b6000613fc0612710613fb2601254856120b390919063ffffffff16565b6120c990919063ffffffff16565b9050919050565b6000613fd1612672565b90506000613fe882846120b390919063ffffffff16565b905061403c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141675761412383600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600081111561445057600061417f612672565b9050600061419682846120b390919063ffffffff16565b905061420c8160016000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b60016000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143bf576143598360026000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269d90919063ffffffff16565b60026000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166144006120df565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144459190614c80565b60405180910390a350505b50565b600061445d612672565b9050600061447482846120b390919063ffffffff16565b905061448b81600a5461269d90919063ffffffff16565b600a81905550505050565b6000813590506144a58161538f565b92915050565b6000815190506144ba8161538f565b92915050565b6000813590506144cf816153a6565b92915050565b6000813590506144e4816153bd565b92915050565b6000815190506144f9816153bd565b92915050565b60006020828403121561451157600080fd5b600061451f84828501614496565b91505092915050565b60006020828403121561453a57600080fd5b6000614548848285016144ab565b91505092915050565b6000806040838503121561456457600080fd5b600061457285828601614496565b925050602061458385828601614496565b9150509250929050565b6000806000606084860312156145a257600080fd5b60006145b086828701614496565b93505060206145c186828701614496565b92505060406145d2868287016144d5565b9150509250925092565b600080604083850312156145ef57600080fd5b60006145fd85828601614496565b925050602061460e858286016144d5565b9150509250929050565b60006020828403121561462a57600080fd5b6000614638848285016144c0565b91505092915050565b60006020828403121561465357600080fd5b6000614661848285016144d5565b91505092915050565b6000806040838503121561467d57600080fd5b600061468b858286016144d5565b925050602061469c858286016144c0565b9150509250929050565b6000806000606084860312156146bb57600080fd5b60006146c9868287016144ea565b93505060206146da868287016144ea565b92505060406146eb868287016144ea565b9150509250925092565b6000614701838361470d565b60208301905092915050565b61471681614ebc565b82525050565b61472581614ebc565b82525050565b600061473682614d57565b6147408185614d7a565b935061474b83614d47565b8060005b8381101561477c57815161476388826146f5565b975061476e83614d6d565b92505060018101905061474f565b5085935050505092915050565b61479281614ece565b82525050565b6147a181614f11565b82525050565b6147b081614f35565b82525050565b60006147c182614d62565b6147cb8185614d96565b93506147db818560208601614f47565b6147e481615082565b840191505092915050565b60006147fc601b83614d96565b915061480782615093565b602082019050919050565b600061481f602383614d96565b915061482a826150bc565b604082019050919050565b6000614842601683614d96565b915061484d8261510b565b602082019050919050565b6000614865602a83614d96565b915061487082615134565b604082019050919050565b6000614888602683614d96565b915061489382615183565b604082019050919050565b60006148ab602283614d96565b91506148b6826151d2565b604082019050919050565b60006148ce601b83614d96565b91506148d982615221565b602082019050919050565b60006148f1601f83614d96565b91506148fc8261524a565b602082019050919050565b6000614914602083614d96565b915061491f82615273565b602082019050919050565b6000614937600b83614d96565b91506149428261529c565b602082019050919050565b600061495a602583614d96565b9150614965826152c5565b604082019050919050565b600061497d600083614d8b565b915061498882615314565b600082019050919050565b60006149a0602483614d96565b91506149ab82615317565b604082019050919050565b60006149c3600f83614d96565b91506149ce82615366565b602082019050919050565b6149e281614efa565b82525050565b6149f181614f04565b82525050565b6000614a0282614970565b9150819050919050565b6000602082019050614a21600083018461471c565b92915050565b600060c082019050614a3c600083018961471c565b614a4960208301886149d9565b614a5660408301876147a7565b614a6360608301866147a7565b614a70608083018561471c565b614a7d60a08301846149d9565b979650505050505050565b6000602082019050614a9d6000830184614789565b92915050565b6000602082019050614ab86000830184614798565b92915050565b60006020820190508181036000830152614ad881846147b6565b905092915050565b60006020820190508181036000830152614af9816147ef565b9050919050565b60006020820190508181036000830152614b1981614812565b9050919050565b60006020820190508181036000830152614b3981614835565b9050919050565b60006020820190508181036000830152614b5981614858565b9050919050565b60006020820190508181036000830152614b798161487b565b9050919050565b60006020820190508181036000830152614b998161489e565b9050919050565b60006020820190508181036000830152614bb9816148c1565b9050919050565b60006020820190508181036000830152614bd9816148e4565b9050919050565b60006020820190508181036000830152614bf981614907565b9050919050565b60006020820190508181036000830152614c198161492a565b9050919050565b60006020820190508181036000830152614c398161494d565b9050919050565b60006020820190508181036000830152614c5981614993565b9050919050565b60006020820190508181036000830152614c79816149b6565b9050919050565b6000602082019050614c9560008301846149d9565b92915050565b600060a082019050614cb060008301886149d9565b614cbd60208301876147a7565b8181036040830152614ccf818661472b565b9050614cde606083018561471c565b614ceb60808301846149d9565b9695505050505050565b6000606082019050614d0a60008301866149d9565b614d1760208301856149d9565b614d2460408301846149d9565b949350505050565b6000602082019050614d4160008301846149e8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614db282614efa565b9150614dbd83614efa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614df257614df1614ff5565b5b828201905092915050565b6000614e0882614efa565b9150614e1383614efa565b925082614e2357614e22615024565b5b828204905092915050565b6000614e3982614efa565b9150614e4483614efa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7d57614e7c614ff5565b5b828202905092915050565b6000614e9382614efa565b9150614e9e83614efa565b925082821015614eb157614eb0614ff5565b5b828203905092915050565b6000614ec782614eda565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f1c82614f23565b9050919050565b6000614f2e82614eda565b9050919050565b6000614f4082614efa565b9050919050565b60005b83811015614f65578082015181840152602081019050614f4a565b83811115614f74576000848401525b50505050565b60006002820490506001821680614f9257607f821691505b60208210811415614fa657614fa5615053565b5b50919050565b6000614fb782614efa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fea57614fe9614ff5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e73666572204e6f7420456e61626c65640000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f43414e4e4f545f4255595f544841545f535550504c5900000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c696420627073000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4641494c45445f4554485f53454e440000000000000000000000000000000000600082015250565b61539881614ebc565b81146153a357600080fd5b50565b6153af81614ece565b81146153ba57600080fd5b50565b6153c681614efa565b81146153d157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204f0a934669f10c6f5fba09c3559927637e90bff71e8889007307dc3f428608ab64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000061875476770f595ff08fd76d1cdfc77c5101dc3d00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000007555341434f494e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007555341434f494e00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): USACOIN
Arg [1] : symbol_ (string): USACOIN
Arg [2] : totalSupply_ (uint256): 100000000000000000000000000
Arg [3] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [4] : marketingAddress_ (address): 0x61875476770F595ff08fd76D1CdfC77C5101dC3D
Arg [5] : liquidityFeeBps_ (uint16): 200
Arg [6] : marketingFeeBps_ (uint16): 800
Arg [7] : burnBps_ (uint16): 200
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 00000000000000000000000061875476770f595ff08fd76d1cdfc77c5101dc3d
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [7] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [9] : 555341434f494e00000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [11] : 555341434f494e00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
15471:19248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34444:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18831:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19743:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16461:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19108:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16286:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19911:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21318:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19017:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21919:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23540:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20232:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23086:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20863:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16509:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16611:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34121:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21579:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28386:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16191:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34356:80;;;;;;;;;;;;;:::i;:::-;;19211:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1566:94;;;;;;;;;;;;;:::i;:::-;;20735:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34590:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1347:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23323:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15902:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20458:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34236:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19417:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23742:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16381:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23914:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16544:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16688:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19592:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23205:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1666:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34444:138;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34554:20:::1;34534:17;;:40;;;;;;;;;;;;;;;;;;34444:138:::0;:::o;18831:83::-;18868:13;18901:5;18894:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18831:83;:::o;19743:160::-;19818:4;19834:39;19843:12;:10;:12::i;:::-;19857:7;19866:6;19834:8;:39::i;:::-;19891:4;19884:11;;19743:160;;;;:::o;16461:41::-;;;;;;;;;;;;;:::o;19108:95::-;19161:7;19188;;19181:14;;19108:95;:::o;16286:28::-;;;;:::o;19911:313::-;20009:4;20026:36;20036:6;20044:9;20055:6;20026:9;:36::i;:::-;20073:121;20082:6;20090:12;:10;:12::i;:::-;20104:89;20142:6;20104:89;;;;;;;;;;;;;;;;;:11;:19;20116:6;20104:19;;;;;;;;;;;;;;;:33;20124:12;:10;:12::i;:::-;20104:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20073:8;:121::i;:::-;20212:4;20205:11;;19911:313;;;;;:::o;21318:253::-;21385:7;21424;;21413;:18;;21405:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21489:19;21511:10;:8;:10::i;:::-;21489:32;;21539:24;21551:11;21539:7;:11;;:24;;;;:::i;:::-;21532:31;;;21318:253;;;:::o;19017:83::-;19058:5;19083:9;;;;;;;;;;;19076:16;;19017:83;:::o;21919:477::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21999:11:::1;:20;22011:7;21999:20;;;;;;;;;;;;;;;;;;;;;;;;;21991:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22067:9;22062:327;22086:9;:16;;;;22082:1;:20;22062:327;;;22144:7;22128:23;;:9;22138:1;22128:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22124:254;;;22187:9;22216:1;22197:9;:16;;;;:20;;;;:::i;:::-;22187:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22172:9;22182:1;22172:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22256:1;22237:7;:16;22245:7;22237:16;;;;;;;;;;;;;;;:20;;;;22299:5;22276:11;:20;22288:7;22276:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22323:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22357:5;;22124:254;22104:3;;;;;:::i;:::-;;;;22062:327;;;;21919:477:::0;:::o;23540:194::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23645:1:::1;23629:12;:17;;:42;;;;;23666:5;23650:12;:21;;23629:42;23621:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23714:12;23698:13;:28;;;;23540:194:::0;:::o;20232:218::-;20320:4;20337:83;20346:12;:10;:12::i;:::-;20360:7;20369:50;20408:10;20369:11;:25;20381:12;:10;:12::i;:::-;20369:25;;;;;;;;;;;;;;;:34;20395:7;20369:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20337:8;:83::i;:::-;20438:4;20431:11;;20232:218;;;;:::o;23086:111::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23185:4:::1;23155:18;:27;23174:7;23155:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23086:111:::0;:::o;20863:447::-;20954:7;20993;;20982;:18;;20974:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21052:17;21047:256;;21087:15;21116:19;21127:7;21116:10;:19::i;:::-;21086:49;;;;;;;21157:7;21150:14;;;;;21047:256;21200:23;21235:19;21246:7;21235:10;:19::i;:::-;21197:57;;;;;;;21276:15;21269:22;;;20863:447;;;;;:::o;16509:28::-;;;;;;;;;;;;;:::o;16611:33::-;;;;;;;;;;;;;:::o;34121:89::-;34162:7;34189:13;;34182:20;;34121:89;:::o;21579:332::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21660:11:::1;:20;21672:7;21660:20;;;;;;;;;;;;;;;;;;;;;;;;;21659:21;21651:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21746:1;21727:7;:16;21735:7;21727:16;;;;;;;;;;;;;;;;:20;21723:109;;;21783:37;21803:7;:16;21811:7;21803:16;;;;;;;;;;;;;;;;21783:19;:37::i;:::-;21764:7;:16;21772:7;21764:16;;;;;;;;;;;;;;;:56;;;;21723:109;21865:4;21842:11;:20;21854:7;21842:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21880:9;21895:7;21880:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21579:332:::0;:::o;28386:124::-;28451:4;28475:18;:27;28494:7;28475:27;;;;;;;;;;;;;;;;;;;;;;;;;28468:34;;28386:124;;;:::o;16191:28::-;;;;:::o;34356:80::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34419:9:::1;::::0;::::1;;;;;;;;34418:10;34406:9;::::0;:22:::1;;;;;;;;;;;;;;;;;;34356:80::o:0;19211:198::-;19277:7;19301:11;:20;19313:7;19301:20;;;;;;;;;;;;;;;;;;;;;;;;;19297:49;;;19330:7;:16;19338:7;19330:16;;;;;;;;;;;;;;;;19323:23;;;;19297:49;19364:37;19384:7;:16;19392:7;19384:16;;;;;;;;;;;;;;;;19364:19;:37::i;:::-;19357:44;;19211:198;;;;:::o;1566:94::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1631:21:::1;1649:1;1631:9;:21::i;:::-;1566:94::o:0;20735:120::-;20803:4;20827:11;:20;20839:7;20827:20;;;;;;;;;;;;;;;;;;;;;;;;;20820:27;;20735:120;;;:::o;34590:124::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34661:45:::1;34684:12;:10;:12::i;:::-;34699:6;34661:14;:45::i;:::-;34590:124:::0;:::o;1347:87::-;1393:7;1420:6;;;;;;;;;;;1413:13;;1347:87;:::o;23323:209::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23437:1:::1;23418:15;:20;;:48;;;;;23461:5;23442:15;:24;;23418:48;23410:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23509:15;23493:13;:31;;;;23323:209:::0;:::o;15902:54::-;;;;:::o;18922:87::-;18961:13;18994:7;18987:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18922:87;:::o;20458:269::-;20551:4;20568:129;20577:12;:10;:12::i;:::-;20591:7;20600:96;20639:15;20600:96;;;;;;;;;;;;;;;;;:11;:25;20612:12;:10;:12::i;:::-;20600:25;;;;;;;;;;;;;;;:34;20626:7;20600:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20568:8;:129::i;:::-;20715:4;20708:11;;20458:269;;;;:::o;34236:112::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34328:12:::1;34312:13;:28;;;;34236:112:::0;:::o;19417:167::-;19495:4;19512:42;19522:12;:10;:12::i;:::-;19536:9;19547:6;19512:9;:42::i;:::-;19572:4;19565:11;;19417:167;;;;:::o;23742:164::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:1:::1;23821:7;:12;;:32;;;;;23848:5;23837:7;:16;;23821:32;23813:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23891:7;23880:8;:18;;;;23742:164:::0;:::o;16381:23::-;;;;:::o;23914:171::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24015:8:::1;23991:21;;:32;;;;;;;;;;;;;;;;;;24039:38;24068:8;24039:38;;;;;;:::i;:::-;;;;;;;;23914:171:::0;:::o;16544:32::-;;;;;;;;;;;;;:::o;16688:44::-;;;;:::o;19592:143::-;19673:7;19700:11;:18;19712:5;19700:18;;;;;;;;;;;;;;;:27;19719:7;19700:27;;;;;;;;;;;;;;;;19693:34;;19592:143;;;;:::o;23205:110::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23302:5:::1;23272:18;:27;23291:7;23272:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23205:110:::0;:::o;1666:192::-;1491:12;:10;:12::i;:::-;1480:23;;:7;:5;:7::i;:::-;:23;;;1472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1775:1:::1;1755:22;;:8;:22;;;;1747:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1831:19;1841:8;1831:9;:19::i;:::-;1666:192:::0;:::o;3464:98::-;3522:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3464:98;;;;:::o;3568:::-;3626:7;3657:1;3653;:5;;;;:::i;:::-;3646:12;;3568:98;;;;:::o;881:::-;934:7;961:10;954:17;;881:98;:::o;28518:335::-;28628:1;28611:19;;:5;:19;;;;28603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28709:1;28690:21;;:7;:21;;;;28682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28791:6;28761:11;:18;28773:5;28761:18;;;;;;;;;;;;;;;:27;28780:7;28761:27;;;;;;;;;;;;;;;:36;;;;28829:7;28813:32;;28822:5;28813:32;;;28838:6;28813:32;;;;;;:::i;:::-;;;;;;;;28518:335;;;:::o;28861:1081::-;28965:1;28949:18;;:4;:18;;;;28941:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29042:1;29028:16;;:2;:16;;;;29020:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29095:12;29110:13;;;;;;;;;;;29095:28;;29134:10;29155:4;29147:12;;:4;:12;;;29134:25;;29173:5;29170:182;;;29215:4;29202:17;;:9;;;;;;;;;;:17;;;29194:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29300:13;;29290:6;29274:13;29284:2;29274:9;:13::i;:::-;:22;;;;:::i;:::-;:39;;29266:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29170:182;29362:28;29393:24;29411:4;29393:9;:24::i;:::-;29362:55;;29428:24;29479:29;;29455:20;:53;;29428:80;;29523:19;:40;;;;;29547:16;;;;;;;;;;;29546:17;29523:40;:65;;;;;29575:13;;;;;;;;;;;29567:21;;:4;:21;;;;29523:65;:90;;;;;29592:21;;;;;;;;;;;29523:90;29519:226;;;29653:29;;29630:52;;29697:36;29712:20;29697:14;:36::i;:::-;29519:226;29755:12;29770:4;29755:19;;29789:18;:24;29808:4;29789:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29817:18;:22;29836:2;29817:22;;;;;;;;;;;;;;;;;;;;;;;;;29789:50;29785:98;;;29866:5;29856:15;;29785:98;29893:41;29908:4;29914:2;29918:6;29926:7;29893:14;:41::i;:::-;28861:1081;;;;;;;;:::o;3776:240::-;3896:7;3954:1;3949;:6;;3957:12;3941:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3996:1;3992;:5;3985:12;;3776:240;;;;;:::o;25552:164::-;25594:7;25615:15;25632;25651:19;:17;:19::i;:::-;25614:56;;;;25688:20;25700:7;25688;:11;;:20;;;;:::i;:::-;25681:27;;;;25552:164;:::o;3256:98::-;3314:7;3345:1;3341;:5;;;;:::i;:::-;3334:12;;3256:98;;;;:::o;24128:446::-;24187:7;24196;24205;24214;24223;24232;24253:23;24278:18;24298;24318:13;24335:20;24347:7;24335:11;:20::i;:::-;24252:103;;;;;;;;24367:15;24384:23;24411:63;24423:7;24432:10;24444;24456:5;24463:10;:8;:10::i;:::-;24411:11;:63::i;:::-;24366:108;;;;24493:7;24502:15;24519;24536:10;24548;24560:5;24485:81;;;;;;;;;;;;;;;;;;24128:446;;;;;;;:::o;1866:173::-;1922:16;1941:6;;;;;;;;;;;1922:25;;1967:8;1958:6;;:17;;;;;;;;;;;;;;;;;;2022:8;1991:40;;2012:8;1991:40;;;;;;;;;;;;1866:173;;:::o;33937:176::-;34017:9;34032:2;:7;;34047:6;34032:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34016:42;;;34074:4;34069:36;;34080:25;;;;;;;;;;:::i;:::-;;;;;;;;34069:36;33937:176;;;:::o;29950:466::-;17016:4;16997:16;;:23;;;;;;;;;;;;;;;;;;30035:12:::1;30050:27;30075:1;30050:20;:24;;:27;;;;:::i;:::-;30035:42;;30088:17;30108:30;30133:4;30108:20;:24;;:30;;;;:::i;:::-;30088:50;;30149:22;30174:21;30149:46;;30206:22;30223:4;30206:16;:22::i;:::-;30239:18;30260:41;30286:14;30260:21;:25;;:41;;;;:::i;:::-;30239:62;;30312:35;30325:9;30336:10;30312:12;:35::i;:::-;30365:43;30380:4;30386:10;30398:9;30365:43;;;;;;;;:::i;:::-;;;;;;;;17031:1;;;;17062:5:::0;17043:16;;:24;;;;;;;;;;;;;;;;;;29950:466;:::o;31353:792::-;31467:7;31462:28;;31476:14;:12;:14::i;:::-;31462:28;31505:11;:19;31517:6;31505:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31529:11;:22;31541:9;31529:22;;;;;;;;;;;;;;;;;;;;;;;;;31528:23;31505:46;31501:597;;;31568:48;31590:6;31598:9;31609:6;31568:21;:48::i;:::-;31501:597;;;31639:11;:19;31651:6;31639:19;;;;;;;;;;;;;;;;;;;;;;;;;31638:20;:46;;;;;31662:11;:22;31674:9;31662:22;;;;;;;;;;;;;;;;;;;;;;;;;31638:46;31634:464;;;31701:46;31721:6;31729:9;31740:6;31701:19;:46::i;:::-;31634:464;;;31770:11;:19;31782:6;31770:19;;;;;;;;;;;;;;;;;;;;;;;;;31769:20;:47;;;;;31794:11;:22;31806:9;31794:22;;;;;;;;;;;;;;;;;;;;;;;;;31793:23;31769:47;31765:333;;;31833:44;31851:6;31859:9;31870:6;31833:17;:44::i;:::-;31765:333;;;31899:11;:19;31911:6;31899:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;31922:11;:22;31934:9;31922:22;;;;;;;;;;;;;;;;;;;;;;;;;31899:45;31895:203;;;31961:48;31983:6;31991:9;32002:6;31961:21;:48::i;:::-;31895:203;;;32042:44;32060:6;32068:9;32079:6;32042:17;:44::i;:::-;31895:203;31765:333;31634:464;31501:597;32113:7;32108:29;;32122:15;:13;:15::i;:::-;32108:29;31353:792;;;;:::o;25724:556::-;25775:7;25784;25804:15;25822:7;;25804:25;;25840:15;25858:7;;25840:25;;25881:9;25876:289;25900:9;:16;;;;25896:1;:20;25876:289;;;25966:7;25942;:21;25950:9;25960:1;25950:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25942:21;;;;;;;;;;;;;;;;:31;:66;;;;26001:7;25977;:21;25985:9;25995:1;25985:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25977:21;;;;;;;;;;;;;;;;:31;25942:66;25938:97;;;26018:7;;26027;;26010:25;;;;;;;;;25938:97;26060:34;26072:7;:21;26080:9;26090:1;26080:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26072:21;;;;;;;;;;;;;;;;26060:7;:11;;:34;;;;:::i;:::-;26050:44;;26119:34;26131:7;:21;26139:9;26149:1;26139:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26131:21;;;;;;;;;;;;;;;;26119:7;:11;;:34;;;;:::i;:::-;26109:44;;25918:3;;;;;:::i;:::-;;;;25876:289;;;;26189:20;26201:7;;26189;;:11;;:20;;;;:::i;:::-;26179:7;:30;26175:61;;;26219:7;;26228;;26211:25;;;;;;;;26175:61;26255:7;26264;26247:25;;;;;;25724:556;;;:::o;24582:442::-;24642:7;24651;24660;24669;24689:18;24710:30;24732:7;24710:21;:30::i;:::-;24689:51;;24751:21;24775:30;24797:7;24775:21;:30::i;:::-;24751:54;;24816:13;24832:25;24849:7;24832:16;:25::i;:::-;24816:41;;24868:23;24894:53;24941:5;24894:42;24922:13;24894:23;24906:10;24894:7;:11;;:23;;;;:::i;:::-;:27;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;24868:79;;24966:15;24983:10;24995:13;25010:5;24958:58;;;;;;;;;;;;24582:442;;;;;:::o;25032:512::-;25168:7;25177;25196:15;25214:24;25226:11;25214:7;:11;;:24;;;;:::i;:::-;25196:42;;25249:18;25270:27;25285:11;25270:10;:14;;:27;;;;:::i;:::-;25249:48;;25308:18;25329:27;25344:11;25329:10;:14;;:27;;;;:::i;:::-;25308:48;;25367:13;25383:22;25393:11;25383:5;:9;;:22;;;;:::i;:::-;25367:38;;25416:23;25442:50;25486:5;25442:39;25470:10;25442:23;25454:10;25442:7;:11;;:23;;;;:::i;:::-;:27;;:39;;;;:::i;:::-;:43;;:50;;;;:::i;:::-;25416:76;;25511:7;25520:15;25503:33;;;;;;;;;25032:512;;;;;;;;:::o;3360:98::-;3418:7;3449:1;3445;:5;;;;:::i;:::-;3438:12;;3360:98;;;;:::o;30424:501::-;30490:21;30528:1;30514:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30490:40;;30559:4;30541;30546:1;30541:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;30585:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30575:4;30580:1;30575:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;30620:62;30637:4;30652:15;;;;;;;;;;;30670:11;30620:8;:62::i;:::-;30693:15;;;;;;;;;;;:66;;;30774:11;30800:1;30844:4;30871;30891:15;30693:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30424:501;;:::o;30933:414::-;31014:62;31031:4;31046:15;;;;;;;;;;;31064:11;31014:8;:62::i;:::-;31087:15;;;;;;;;;;;:31;;;31126:9;31159:4;31179:11;31205:1;31248;31291:7;:5;:7::i;:::-;31313:15;31087:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30933:414;;:::o;27862:333::-;27921:1;27909:8;;:13;:35;;;;;27943:1;27926:13;;:18;27909:35;:57;;;;;27965:1;27948:13;;:18;27909:57;27905:70;;;27968:7;;27905:70;28004:8;;27985:16;:27;;;;28047:13;;28023:21;:37;;;;28095:13;;28071:21;:37;;;;28130:1;28119:8;:12;;;;28158:1;28142:13;:17;;;;28186:1;28170:13;:17;;;;27862:333;:::o;33326:603::-;33429:15;33446:23;33471;33496:18;33516;33536:13;33553:19;33564:7;33553:10;:19::i;:::-;33428:144;;;;;;;;;;;;33601:28;33621:7;33601;:15;33609:6;33601:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33583:7;:15;33591:6;33583:15;;;;;;;;;;;;;;;:46;;;;33658:28;33678:7;33658;:15;33666:6;33658:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33640:7;:15;33648:6;33640:15;;;;;;;;;;;;;;;:46;;;;33718:39;33741:15;33718:7;:18;33726:9;33718:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33697:7;:18;33705:9;33697:18;;;;;;;;;;;;;;;:60;;;;33768:26;33783:10;33768:14;:26::i;:::-;33805:29;33823:10;33805:17;:29::i;:::-;33845:16;33855:5;33845:9;:16::i;:::-;33894:9;33877:44;;33886:6;33877:44;;;33905:15;33877:44;;;;;;:::i;:::-;;;;;;;;33326:603;;;;;;;;;:::o;32703:615::-;32804:15;32821:23;32846;32871:18;32891;32911:13;32928:19;32939:7;32928:10;:19::i;:::-;32803:144;;;;;;;;;;;;32976:28;32996:7;32976;:15;32984:6;32976:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32958:7;:15;32966:6;32958:15;;;;;;;;;;;;;;;:46;;;;33036:39;33059:15;33036:7;:18;33044:9;33036:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33015:7;:18;33023:9;33015:18;;;;;;;;;;;;;;;:60;;;;33107:39;33130:15;33107:7;:18;33115:9;33107:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33086:7;:18;33094:9;33086:18;;;;;;;;;;;;;;;:60;;;;33157:26;33172:10;33157:14;:26::i;:::-;33194:29;33212:10;33194:17;:29::i;:::-;33234:16;33244:5;33234:9;:16::i;:::-;33283:9;33266:44;;33275:6;33266:44;;;33294:15;33266:44;;;;;;:::i;:::-;;;;;;;;32703:615;;;;;;;;;:::o;32153:542::-;32252:15;32269:23;32294;32319:18;32339;32359:13;32376:19;32387:7;32376:10;:19::i;:::-;32251:144;;;;;;;;;;;;32424:28;32444:7;32424;:15;32432:6;32424:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32406:7;:15;32414:6;32406:15;;;;;;;;;;;;;;;:46;;;;32484:39;32507:15;32484:7;:18;32492:9;32484:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32463:7;:18;32471:9;32463:18;;;;;;;;;;;;;;;:60;;;;32534:26;32549:10;32534:14;:26::i;:::-;32571:29;32589:10;32571:17;:29::i;:::-;32611:16;32621:5;32611:9;:16::i;:::-;32660:9;32643:44;;32652:6;32643:44;;;32671:15;32643:44;;;;;;:::i;:::-;;;;;;;;32153:542;;;;;;;;;:::o;22404:674::-;22507:15;22524:23;22549;22574:18;22594;22614:13;22631:19;22642:7;22631:10;:19::i;:::-;22506:144;;;;;;;;;;;;22679:28;22699:7;22679;:15;22687:6;22679:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22661:7;:15;22669:6;22661:15;;;;;;;;;;;;;;;:46;;;;22736:28;22756:7;22736;:15;22744:6;22736:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22718:7;:15;22726:6;22718:15;;;;;;;;;;;;;;;:46;;;;22796:39;22819:15;22796:7;:18;22804:9;22796:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22775:7;:18;22783:9;22775:18;;;;;;;;;;;;;;;:60;;;;22867:39;22890:15;22867:7;:18;22875:9;22867:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22846:7;:18;22854:9;22846:18;;;;;;;;;;;;;;;:60;;;;22917:26;22932:10;22917:14;:26::i;:::-;22954:29;22972:10;22954:17;:29::i;:::-;22994:16;23004:5;22994:9;:16::i;:::-;23043:9;23026:44;;23035:6;23026:44;;;23054:15;23026:44;;;;;;:::i;:::-;;;;;;;;22404:674;;;;;;;;;:::o;28203:175::-;28258:16;;28247:8;:27;;;;28301:21;;28285:13;:37;;;;28349:21;;28333:13;:37;;;;28203:175::o;27507:141::-;27577:7;27603:37;27634:5;27603:26;27615:13;;27603:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;27596:44;;27507:141;;;:::o;27656:198::-;27726:7;27779:1;27750:31;;:17;;;;;;;;;;;:31;;;27746:45;;;27790:1;27783:8;;;;27746:45;27809:37;27840:5;27809:26;27821:13;;27809:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;27802:44;;27656:198;;;;:::o;27367:132::-;27432:7;27459:32;27485:5;27459:21;27471:8;;27459:7;:11;;:21;;;;:::i;:::-;:25;;:32;;;;:::i;:::-;27452:39;;27367:132;;;:::o;26483:355::-;26546:19;26568:10;:8;:10::i;:::-;26546:32;;26589:18;26610:27;26625:11;26610:10;:14;;:27;;;;:::i;:::-;26589:48;;26673:38;26700:10;26673:7;:22;26689:4;26673:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26648:7;:22;26664:4;26648:22;;;;;;;;;;;;;;;:63;;;;26726:11;:26;26746:4;26726:26;;;;;;;;;;;;;;;;;;;;;;;;;26722:108;;;26792:38;26819:10;26792:7;:22;26808:4;26792:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26767:7;:22;26783:4;26767:22;;;;;;;;;;;;;;;:63;;;;26722:108;26483:355;;;:::o;26846:513::-;26929:1;26916:10;:14;26912:440;;;26947:19;26969:10;:8;:10::i;:::-;26947:32;;26994:18;27015:27;27030:11;27015:10;:14;;:27;;;;:::i;:::-;26994:48;;27086:42;27117:10;27086:7;:26;27094:17;;;;;;;;;;;27086:26;;;;;;;;;;;;;;;;:30;;:42;;;;:::i;:::-;27057:7;:26;27065:17;;;;;;;;;;;27057:26;;;;;;;;;;;;;;;:71;;;;27147:11;:30;27159:17;;;;;;;;;;;27147:30;;;;;;;;;;;;;;;;;;;;;;;;;27143:124;;;27225:42;27256:10;27225:7;:26;27233:17;;;;;;;;;;;27225:26;;;;;;;;;;;;;;;;:30;;:42;;;;:::i;:::-;27196:7;:26;27204:17;;;;;;;;;;;27196:26;;;;;;;;;;;;;;;:71;;;;27143:124;27310:17;;;;;;;;;;;27287:53;;27296:12;:10;:12::i;:::-;27287:53;;;27329:10;27287:53;;;;;;:::i;:::-;;;;;;;;26912:440;;;26846:513;:::o;26288:187::-;26341:19;26363:10;:8;:10::i;:::-;26341:32;;26384:13;26400:22;26410:11;26400:5;:9;;:22;;;;:::i;:::-;26384:38;;26446:21;26461:5;26446:10;;:14;;:21;;;;:::i;:::-;26433:10;:34;;;;26288:187;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;2732:6;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;2997:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;3701:6;3709;3717;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;4284:10;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;4787:3;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;5953:3;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;6377:3;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;6749:3;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;7121:3;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;7493:3;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;7865:3;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;8237:3;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;8609:3;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;8981:3;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;9353:3;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;10097:3;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:398::-;10486:3;10507:83;10588:1;10583:3;10507:83;:::i;:::-;10500:90;;10599:93;10688:3;10599:93;:::i;:::-;10717:1;10712:3;10708:11;10701:18;;10490:235;;;:::o;10731:366::-;10873:3;10894:67;10958:2;10953:3;10894:67;:::i;:::-;10887:74;;10970:93;11059:3;10970:93;:::i;:::-;11088:2;11083:3;11079:12;11072:19;;10877:220;;;:::o;11103:366::-;11245:3;11266:67;11330:2;11325:3;11266:67;:::i;:::-;11259:74;;11342:93;11431:3;11342:93;:::i;:::-;11460:2;11455:3;11451:12;11444:19;;11249:220;;;:::o;11475:118::-;11562:24;11580:5;11562:24;:::i;:::-;11557:3;11550:37;11540:53;;:::o;11599:112::-;11682:22;11698:5;11682:22;:::i;:::-;11677:3;11670:35;11660:51;;:::o;11717:379::-;11901:3;11923:147;12066:3;11923:147;:::i;:::-;11916:154;;12087:3;12080:10;;11905:191;;;:::o;12102:222::-;12195:4;12233:2;12222:9;12218:18;12210:26;;12246:71;12314:1;12303:9;12299:17;12290:6;12246:71;:::i;:::-;12200:124;;;;:::o;12330:807::-;12579:4;12617:3;12606:9;12602:19;12594:27;;12631:71;12699:1;12688:9;12684:17;12675:6;12631:71;:::i;:::-;12712:72;12780:2;12769:9;12765:18;12756:6;12712:72;:::i;:::-;12794:80;12870:2;12859:9;12855:18;12846:6;12794:80;:::i;:::-;12884;12960:2;12949:9;12945:18;12936:6;12884:80;:::i;:::-;12974:73;13042:3;13031:9;13027:19;13018:6;12974:73;:::i;:::-;13057;13125:3;13114:9;13110:19;13101:6;13057:73;:::i;:::-;12584:553;;;;;;;;;:::o;13143:210::-;13230:4;13268:2;13257:9;13253:18;13245:26;;13281:65;13343:1;13332:9;13328:17;13319:6;13281:65;:::i;:::-;13235:118;;;;:::o;13359:276::-;13479:4;13517:2;13506:9;13502:18;13494:26;;13530:98;13625:1;13614:9;13610:17;13601:6;13530:98;:::i;:::-;13484:151;;;;:::o;13641:313::-;13754:4;13792:2;13781:9;13777:18;13769:26;;13841:9;13835:4;13831:20;13827:1;13816:9;13812:17;13805:47;13869:78;13942:4;13933:6;13869:78;:::i;:::-;13861:86;;13759:195;;;;:::o;13960:419::-;14126:4;14164:2;14153:9;14149:18;14141:26;;14213:9;14207:4;14203:20;14199:1;14188:9;14184:17;14177:47;14241:131;14367:4;14241:131;:::i;:::-;14233:139;;14131:248;;;:::o;14385:419::-;14551:4;14589:2;14578:9;14574:18;14566:26;;14638:9;14632:4;14628:20;14624:1;14613:9;14609:17;14602:47;14666:131;14792:4;14666:131;:::i;:::-;14658:139;;14556:248;;;:::o;14810:419::-;14976:4;15014:2;15003:9;14999:18;14991:26;;15063:9;15057:4;15053:20;15049:1;15038:9;15034:17;15027:47;15091:131;15217:4;15091:131;:::i;:::-;15083:139;;14981:248;;;:::o;15235:419::-;15401:4;15439:2;15428:9;15424:18;15416:26;;15488:9;15482:4;15478:20;15474:1;15463:9;15459:17;15452:47;15516:131;15642:4;15516:131;:::i;:::-;15508:139;;15406:248;;;:::o;15660:419::-;15826:4;15864:2;15853:9;15849:18;15841:26;;15913:9;15907:4;15903:20;15899:1;15888:9;15884:17;15877:47;15941:131;16067:4;15941:131;:::i;:::-;15933:139;;15831:248;;;:::o;16085:419::-;16251:4;16289:2;16278:9;16274:18;16266:26;;16338:9;16332:4;16328:20;16324:1;16313:9;16309:17;16302:47;16366:131;16492:4;16366:131;:::i;:::-;16358:139;;16256:248;;;:::o;16510:419::-;16676:4;16714:2;16703:9;16699:18;16691:26;;16763:9;16757:4;16753:20;16749:1;16738:9;16734:17;16727:47;16791:131;16917:4;16791:131;:::i;:::-;16783:139;;16681:248;;;:::o;16935:419::-;17101:4;17139:2;17128:9;17124:18;17116:26;;17188:9;17182:4;17178:20;17174:1;17163:9;17159:17;17152:47;17216:131;17342:4;17216:131;:::i;:::-;17208:139;;17106:248;;;:::o;17360:419::-;17526:4;17564:2;17553:9;17549:18;17541:26;;17613:9;17607:4;17603:20;17599:1;17588:9;17584:17;17577:47;17641:131;17767:4;17641:131;:::i;:::-;17633:139;;17531:248;;;:::o;17785:419::-;17951:4;17989:2;17978:9;17974:18;17966:26;;18038:9;18032:4;18028:20;18024:1;18013:9;18009:17;18002:47;18066:131;18192:4;18066:131;:::i;:::-;18058:139;;17956:248;;;:::o;18210:419::-;18376:4;18414:2;18403:9;18399:18;18391:26;;18463:9;18457:4;18453:20;18449:1;18438:9;18434:17;18427:47;18491:131;18617:4;18491:131;:::i;:::-;18483:139;;18381:248;;;:::o;18635:419::-;18801:4;18839:2;18828:9;18824:18;18816:26;;18888:9;18882:4;18878:20;18874:1;18863:9;18859:17;18852:47;18916:131;19042:4;18916:131;:::i;:::-;18908:139;;18806:248;;;:::o;19060:419::-;19226:4;19264:2;19253:9;19249:18;19241:26;;19313:9;19307:4;19303:20;19299:1;19288:9;19284:17;19277:47;19341:131;19467:4;19341:131;:::i;:::-;19333:139;;19231:248;;;:::o;19485:222::-;19578:4;19616:2;19605:9;19601:18;19593:26;;19629:71;19697:1;19686:9;19682:17;19673:6;19629:71;:::i;:::-;19583:124;;;;:::o;19713:831::-;19976:4;20014:3;20003:9;19999:19;19991:27;;20028:71;20096:1;20085:9;20081:17;20072:6;20028:71;:::i;:::-;20109:80;20185:2;20174:9;20170:18;20161:6;20109:80;:::i;:::-;20236:9;20230:4;20226:20;20221:2;20210:9;20206:18;20199:48;20264:108;20367:4;20358:6;20264:108;:::i;:::-;20256:116;;20382:72;20450:2;20439:9;20435:18;20426:6;20382:72;:::i;:::-;20464:73;20532:3;20521:9;20517:19;20508:6;20464:73;:::i;:::-;19981:563;;;;;;;;:::o;20550:442::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20750:71;20818:1;20807:9;20803:17;20794:6;20750:71;:::i;:::-;20831:72;20899:2;20888:9;20884:18;20875:6;20831:72;:::i;:::-;20913;20981:2;20970:9;20966:18;20957:6;20913:72;:::i;:::-;20704:288;;;;;;:::o;20998:214::-;21087:4;21125:2;21114:9;21110:18;21102:26;;21138:67;21202:1;21191:9;21187:17;21178:6;21138:67;:::i;:::-;21092:120;;;;:::o;21218:132::-;21285:4;21308:3;21300:11;;21338:4;21333:3;21329:14;21321:22;;21290:60;;;:::o;21356:114::-;21423:6;21457:5;21451:12;21441:22;;21430:40;;;:::o;21476:99::-;21528:6;21562:5;21556:12;21546:22;;21535:40;;;:::o;21581:113::-;21651:4;21683;21678:3;21674:14;21666:22;;21656:38;;;:::o;21700:184::-;21799:11;21833:6;21828:3;21821:19;21873:4;21868:3;21864:14;21849:29;;21811:73;;;;:::o;21890:147::-;21991:11;22028:3;22013:18;;22003:34;;;;:::o;22043:169::-;22127:11;22161:6;22156:3;22149:19;22201:4;22196:3;22192:14;22177:29;;22139:73;;;;:::o;22218:305::-;22258:3;22277:20;22295:1;22277:20;:::i;:::-;22272:25;;22311:20;22329:1;22311:20;:::i;:::-;22306:25;;22465:1;22397:66;22393:74;22390:1;22387:81;22384:2;;;22471:18;;:::i;:::-;22384:2;22515:1;22512;22508:9;22501:16;;22262:261;;;;:::o;22529:185::-;22569:1;22586:20;22604:1;22586:20;:::i;:::-;22581:25;;22620:20;22638:1;22620:20;:::i;:::-;22615:25;;22659:1;22649:2;;22664:18;;:::i;:::-;22649:2;22706:1;22703;22699:9;22694:14;;22571:143;;;;:::o;22720:348::-;22760:7;22783:20;22801:1;22783:20;:::i;:::-;22778:25;;22817:20;22835:1;22817:20;:::i;:::-;22812:25;;23005:1;22937:66;22933:74;22930:1;22927:81;22922:1;22915:9;22908:17;22904:105;22901:2;;;23012:18;;:::i;:::-;22901:2;23060:1;23057;23053:9;23042:20;;22768:300;;;;:::o;23074:191::-;23114:4;23134:20;23152:1;23134:20;:::i;:::-;23129:25;;23168:20;23186:1;23168:20;:::i;:::-;23163:25;;23207:1;23204;23201:8;23198:2;;;23212:18;;:::i;:::-;23198:2;23257:1;23254;23250:9;23242:17;;23119:146;;;;:::o;23271:96::-;23308:7;23337:24;23355:5;23337:24;:::i;:::-;23326:35;;23316:51;;;:::o;23373:90::-;23407:7;23450:5;23443:13;23436:21;23425:32;;23415:48;;;:::o;23469:126::-;23506:7;23546:42;23539:5;23535:54;23524:65;;23514:81;;;:::o;23601:77::-;23638:7;23667:5;23656:16;;23646:32;;;:::o;23684:86::-;23719:7;23759:4;23752:5;23748:16;23737:27;;23727:43;;;:::o;23776:180::-;23853:9;23886:64;23944:5;23886:64;:::i;:::-;23873:77;;23863:93;;;:::o;23962:140::-;24039:9;24072:24;24090:5;24072:24;:::i;:::-;24059:37;;24049:53;;;:::o;24108:121::-;24166:9;24199:24;24217:5;24199:24;:::i;:::-;24186:37;;24176:53;;;:::o;24235:307::-;24303:1;24313:113;24327:6;24324:1;24321:13;24313:113;;;24412:1;24407:3;24403:11;24397:18;24393:1;24388:3;24384:11;24377:39;24349:2;24346:1;24342:10;24337:15;;24313:113;;;24444:6;24441:1;24438:13;24435:2;;;24524:1;24515:6;24510:3;24506:16;24499:27;24435:2;24284:258;;;;:::o;24548:320::-;24592:6;24629:1;24623:4;24619:12;24609:22;;24676:1;24670:4;24666:12;24697:18;24687:2;;24753:4;24745:6;24741:17;24731:27;;24687:2;24815;24807:6;24804:14;24784:18;24781:38;24778:2;;;24834:18;;:::i;:::-;24778:2;24599:269;;;;:::o;24874:233::-;24913:3;24936:24;24954:5;24936:24;:::i;:::-;24927:33;;24982:66;24975:5;24972:77;24969:2;;;25052:18;;:::i;:::-;24969:2;25099:1;25092:5;25088:13;25081:20;;24917:190;;;:::o;25113:180::-;25161:77;25158:1;25151:88;25258:4;25255:1;25248:15;25282:4;25279:1;25272:15;25299:180;25347:77;25344:1;25337:88;25444:4;25441:1;25434:15;25468:4;25465:1;25458:15;25485:180;25533:77;25530:1;25523:88;25630:4;25627:1;25620:15;25654:4;25651:1;25644:15;25671:102;25712:6;25763:2;25759:7;25754:2;25747:5;25743:14;25739:28;25729:38;;25719:54;;;:::o;25779:177::-;25919:29;25915:1;25907:6;25903:14;25896:53;25885:71;:::o;25962:222::-;26102:34;26098:1;26090:6;26086:14;26079:58;26171:5;26166:2;26158:6;26154:15;26147:30;26068:116;:::o;26190:172::-;26330:24;26326:1;26318:6;26314:14;26307:48;26296:66;:::o;26368:229::-;26508:34;26504:1;26496:6;26492:14;26485:58;26577:12;26572:2;26564:6;26560:15;26553:37;26474:123;:::o;26603:225::-;26743:34;26739:1;26731:6;26727:14;26720:58;26812:8;26807:2;26799:6;26795:15;26788:33;26709:119;:::o;26834:221::-;26974:34;26970:1;26962:6;26958:14;26951:58;27043:4;27038:2;27030:6;27026:15;27019:29;26940:115;:::o;27061:177::-;27201:29;27197:1;27189:6;27185:14;27178:53;27167:71;:::o;27244:181::-;27384:33;27380:1;27372:6;27368:14;27361:57;27350:75;:::o;27431:182::-;27571:34;27567:1;27559:6;27555:14;27548:58;27537:76;:::o;27619:161::-;27759:13;27755:1;27747:6;27743:14;27736:37;27725:55;:::o;27786:224::-;27926:34;27922:1;27914:6;27910:14;27903:58;27995:7;27990:2;27982:6;27978:15;27971:32;27892:118;:::o;28016:114::-;28122:8;:::o;28136:223::-;28276:34;28272:1;28264:6;28260:14;28253:58;28345:6;28340:2;28332:6;28328:15;28321:31;28242:117;:::o;28365:165::-;28505:17;28501:1;28493:6;28489:14;28482:41;28471:59;:::o;28536:122::-;28609:24;28627:5;28609:24;:::i;:::-;28602:5;28599:35;28589:2;;28648:1;28645;28638:12;28589:2;28579:79;:::o;28664:116::-;28734:21;28749:5;28734:21;:::i;:::-;28727:5;28724:32;28714:2;;28770:1;28767;28760:12;28714:2;28704:76;:::o;28786:122::-;28859:24;28877:5;28859:24;:::i;:::-;28852:5;28849:35;28839:2;;28898:1;28895;28888:12;28839:2;28829:79;:::o
Swarm Source
ipfs://4f0a934669f10c6f5fba09c3559927637e90bff71e8889007307dc3f428608ab
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.