More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 18415888 | 457 days ago | IN | 0 ETH | 0.00187499 | ||||
Transfer | 18405894 | 458 days ago | IN | 0 ETH | 0.0006509 | ||||
Approve | 18402143 | 459 days ago | IN | 0 ETH | 0.00035456 | ||||
Renounce Ownersh... | 18402061 | 459 days ago | IN | 0 ETH | 0.00015676 | ||||
Approve | 18402035 | 459 days ago | IN | 0 ETH | 0.00076917 | ||||
Approve | 18402032 | 459 days ago | IN | 0 ETH | 0.00031195 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Blox
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-21 */ /** *0xBLOX* */ // SPDX-License-Identifier: MIT pragma solidity 0.8.16; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Blox is Context, IERC20, Ownable { 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 _isExcludedFromFees; mapping (address => bool) private _isExcluded; address[] private _excluded; string private _name = "Blox"; string private _symbol = "BLOX"; uint8 private _decimals = 9; uint256 private constant MAX = type(uint256).max; uint256 private _tTotal = 30_000_000 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public taxFee = 1; uint256 private _previousTaxFee = taxFee; uint256 public burnFee = 0; uint256 private _previousburnFee = burnFee; uint256 public bloxTeamFee = 1; uint256 private _previousbloxTeamFee = bloxTeamFee; uint256 public marketingFee = 0; uint256 private _previousMarketingFee = marketingFee; uint256 public foundationFee = 0; uint256 private _previousfoundationFee = foundationFee; uint256 public totalFees = taxFee + burnFee + marketingFee + foundationFee + bloxTeamFee; address public marketingWallet = 0x000000000000000000000000000000000000dEaD; address public foundationWallet = 0x000000000000000000000000000000000000dEaD; address public burnWallet = 0x000000000000000000000000000000000000dEaD; address public bloxTeamWallet = 0xDab9277349A7567fD1397f924C51dc3B0eedb243; bool public walletToWalletTransferWithoutFee = true; address private DEAD = 0x000000000000000000000000000000000000dEaD; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private inSwapAndLiquify; bool public swapEnabled = true; uint256 public swapTokensAtAmount = _tTotal / 20000; event ExcludeFromFees(address indexed account, bool isExcluded); event MarketingWalletChanged(address marketingWallet); event foundationWalletChanged(address foundationWallet); event burnWalletChanged(address burnWallet); event bloxTeamWalletChanged(address bloxTeamWallet); event SwapEnabledUpdated(bool enabled); event SendMarketing(uint256 bnbSend); event Sendfoundation(uint256 bnbSend); event Sendburn(uint256 bnbSend); event SendCharity(uint256 bnbSend); constructor() { address newOwner = 0x171cAD126a9360cc093e38902223bC678736c357; transferOwnership(newOwner); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), MAX); _isExcludedFromFees[owner()] = true; _isExcludedFromFees[marketingWallet] = true; _isExcludedFromFees[foundationWallet] = true; _isExcludedFromFees[burnWallet] = true; _isExcludedFromFees[bloxTeamWallet] = true; _isExcludedFromFees[address(this)] = true; _rOwned[owner()] = _rTotal; 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()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionDistributed() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rTotal = _rTotal - rAmount; _tFeeTotal = _tFeeTotal + tAmount; } 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 / 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; } } } receive() external payable {} function claimStuckTokens(address token) external onlyOwner { require(token != address(this), "Owner cannot claim native tokens"); if (token == address(0x0)) { payable(msg.sender).transfer(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendBNB(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 _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, tfoundation, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing, tfoundation); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tfoundation = calculatefoundationFee(tAmount); uint256 tTransferAmount = tAmount - tFee - tMarketing - tfoundation; return (tTransferAmount, tFee, tMarketing, tfoundation); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; uint256 rMarketing = tMarketing * currentRate; uint256 rfoundation = tfoundation * currentRate; uint256 rTransferAmount = rAmount - rFee - rMarketing - rfoundation; return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / 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 - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeburn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(burnFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tburn = calculateburnFee(tAmount); uint256 rburn = tburn * _getRate(); rTransferAmount = rTransferAmount - rburn; tTransferAmount = tTransferAmount - tburn; _rOwned[address(this)] = _rOwned[address(this)] + rburn; emit Transfer(sender, address(this), tburn); return(tTransferAmount, rTransferAmount); } function _takebloxTeam(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(bloxTeamFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tCharity = calculatebloxTeamFee(tAmount); uint256 rCharity = tCharity * _getRate(); rTransferAmount = rTransferAmount - rCharity; tTransferAmount = tTransferAmount - tCharity; _rOwned[address(this)] = _rOwned[address(this)] + rCharity; emit Transfer(sender, address(this), tCharity); return(tTransferAmount, rTransferAmount); } function _takeMarketing(uint256 tMarketing) private { if (tMarketing > 0) { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rMarketing; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tMarketing; } } function _takefoundation(uint256 tfoundation) private { if (tfoundation > 0) { uint256 currentRate = _getRate(); uint256 rfoundation = tfoundation * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rfoundation; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tfoundation; } } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount * taxFee / 100; } function calculateburnFee(uint256 _amount) private view returns (uint256) { return _amount * burnFee / 100; } function calculatebloxTeamFee(uint256 _amount) private view returns (uint256) { return _amount * bloxTeamFee / 100; } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount * marketingFee / 100; } function calculatefoundationFee(uint256 _amount) private view returns (uint256) { return _amount * foundationFee / 100; } function removeAllFee() private { if(taxFee == 0 && burnFee == 0 && bloxTeamFee == 0 && marketingFee == 0 && foundationFee == 0) return; _previousTaxFee = taxFee; _previousburnFee = burnFee; _previousbloxTeamFee = bloxTeamFee; _previousMarketingFee = marketingFee; _previousfoundationFee = foundationFee; taxFee = 0; marketingFee = 0; burnFee = 0; bloxTeamFee = 0; foundationFee = 0; } function restoreAllFee() private { taxFee = _previousTaxFee; burnFee = _previousburnFee; bloxTeamFee = _previousbloxTeamFee; marketingFee = _previousMarketingFee; foundationFee = _previousfoundationFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFees[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(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapEnabled ) { inSwapAndLiquify = true; uint256 taxForSwap = foundationFee + marketingFee + burnFee + bloxTeamFee; if(taxForSwap > 0) { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp); uint256 newBalance = address(this).balance - initialBalance; if(foundationFee > 0) { uint256 foundationBNB = newBalance * foundationFee / taxForSwap; sendBNB(payable(foundationWallet), foundationBNB); emit Sendfoundation(foundationBNB); } if(marketingFee > 0) { uint256 marketingBNB = newBalance * marketingFee / taxForSwap; sendBNB(payable(marketingWallet), marketingBNB); emit SendMarketing(marketingBNB); } if(burnFee > 0) { uint256 burnBNB = newBalance * burnFee / taxForSwap; sendBNB(payable(burnWallet), burnBNB); emit Sendburn(burnBNB); } if(bloxTeamFee > 0) { uint256 charityBNB = newBalance * bloxTeamFee / taxForSwap; sendBNB(payable(bloxTeamWallet), charityBNB); emit SendCharity(charityBNB); } } inSwapAndLiquify = false; } _tokenTransfer(from,to,amount); } //=======Swap=======// function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() { require(newAmount >= totalSupply() / 100000, "SwapTokensAtAmount must be greater than 0.001% of total supply"); swapTokensAtAmount = newAmount; } function setSwapEnabled(bool _enabled) external onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } //=======TaxAndTransfer=======// function _tokenTransfer(address sender, address recipient, uint256 amount) private { bool restoreFees = false; if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient] || (walletToWalletTransferWithoutFee && sender != uniswapV2Pair && recipient != uniswapV2Pair) ) { removeAllFee(); restoreFees = true; } 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 (restoreFees) { restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = _takeburn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = _takebloxTeam(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takefoundation(tfoundation); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = _takeburn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = _takebloxTeam(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takefoundation(tfoundation); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = _takeburn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = _takebloxTeam(sender, tTransferAmount, rTransferAmount, tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takefoundation(tfoundation); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tfoundation) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = _takeburn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = _takebloxTeam(sender, tTransferAmount, rTransferAmount, tAmount); _tOwned[sender] = _tOwned[sender] - tAmount; _rOwned[sender] = _rOwned[sender] - rAmount; _tOwned[recipient] = _tOwned[recipient] + tTransferAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _takeMarketing(tMarketing); _takefoundation(tfoundation); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //=======FeeManagement=======// function excludeFromFees(address account) external onlyOwner { require(!_isExcludedFromFees[account], "Account is already the value of true"); _isExcludedFromFees[account] = true; emit ExcludeFromFees(account, true); } function changeMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != marketingWallet, "Marketing wallet is already that address"); require(!isContract(_marketingWallet), "Marketing wallet cannot be a contract"); marketingWallet = _marketingWallet; emit MarketingWalletChanged(marketingWallet); } function changefoundationWallet(address _foundationWallet) external onlyOwner { require(_foundationWallet != foundationWallet, "foundation wallet is already that address"); require(!isContract(_foundationWallet), "foundation wallet cannot be a contract"); foundationWallet = _foundationWallet; emit foundationWalletChanged(foundationWallet); } function changeburnWallet(address _burnWallet) external onlyOwner { require(_burnWallet != burnWallet, "burn wallet is already that address"); require(!isContract(_burnWallet), "burn wallet cannot be a contract"); burnWallet = _burnWallet; emit burnWalletChanged(burnWallet); } function changebloxTeamWallet(address _bloxTeamWallet) external onlyOwner { require(_bloxTeamWallet != bloxTeamWallet, "wallet is already that address"); require(!isContract(_bloxTeamWallet), "wallet cannot be a contract"); bloxTeamWallet = _bloxTeamWallet; emit bloxTeamWalletChanged(bloxTeamWallet); } function setTaxFeePercent(uint256 _taxFee) external onlyOwner() { taxFee = _taxFee; totalFees = taxFee + marketingFee + burnFee + foundationFee + bloxTeamFee; require(totalFees <= 25, "Total fees must be less than 25%"); } function setMarketingFeePercent(uint256 _marketing) external onlyOwner { marketingFee = _marketing; totalFees = taxFee + marketingFee + burnFee + foundationFee + bloxTeamFee; require(totalFees <= 25, "Total fees must be less than 25%"); } function setburnFeePercent(uint256 _burnFee) external onlyOwner() { burnFee = _burnFee; totalFees = taxFee + marketingFee + burnFee + foundationFee + bloxTeamFee; require(totalFees <= 25, "Total fees must be less than 25%"); } function setbloxTeamPercent(uint256 _bloxTeam) external onlyOwner() { bloxTeamFee = _bloxTeam; totalFees = taxFee + marketingFee + burnFee + foundationFee + bloxTeamFee; require(totalFees <= 25, "Total fees must be less than 25%"); } function setfoundationFeePercent(uint256 _foundationFee) external onlyOwner() { foundationFee = _foundationFee; totalFees = taxFee + marketingFee + burnFee + foundationFee + bloxTeamFee; require(totalFees <= 25, "Total fees must be less than 25%"); } function enableWalletToWalletTransferWithoutFee(bool enable) external onlyOwner { require(walletToWalletTransferWithoutFee != enable, "Wallet to wallet transfer without fee is already set to that value"); walletToWalletTransferWithoutFee = enable; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"bnbSend","type":"uint256"}],"name":"SendCharity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"Sendburn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"Sendfoundation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"bloxTeamWallet","type":"address"}],"name":"bloxTeamWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burnWallet","type":"address"}],"name":"burnWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"foundationWallet","type":"address"}],"name":"foundationWalletChanged","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloxTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloxTeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bloxTeamWallet","type":"address"}],"name":"changebloxTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnWallet","type":"address"}],"name":"changeburnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_foundationWallet","type":"address"}],"name":"changefoundationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableWalletToWalletTransferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"foundationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"_marketing","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bloxTeam","type":"uint256"}],"name":"setbloxTeamPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setburnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_foundationFee","type":"uint256"}],"name":"setfoundationFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","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":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToWalletTransferWithoutFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526004608090815263084d8def60e31b60a052600790620000259082620007b7565b50604080518082019091526004815263084989eb60e31b6020820152600890620000509082620007b7565b506009805460ff1916811781556200006a90600a62000998565b6200007a906301c9c380620009b0565b600a8190556200008d90600019620009e8565b6200009b90600019620009ff565b600b556001600d819055600e8190556000600f819055601081905560118290556012829055601381905560148190556015819055601681905580620000e1818462000a15565b620000ed919062000a15565b620000f9919062000a15565b62000105919062000a15565b6017556018805461dead6001600160a01b0319918216811790925560198054821683179055601a8054821683179055601b80546001600160a81b0319167401dab9277349a7567fd1397f924c51dc3b0eedb243179055601c80549091169091179055601e8054600160a81b60ff60a81b19909116179055600a546200018e90614e209062000a2b565b601f553480156200019e57600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003d11833981519152908290a35073171cad126a9360cc093e38902223bc678736c357620001ef81620004d9565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d919062000a42565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e1919062000a42565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000355919062000a42565b601e80546001600160a01b039283166001600160a01b031991821617909155601d8054928416929091168217905562000393903090600019620005ea565b600160046000620003ac6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601854821681526004909352818320805485166001908117909155601954821684528284208054861682179055601a54821684528284208054861682179055601b549091168352818320805485168217905530835290822080549093168117909255600b549190620004546000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004816000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620004c991815260200190565b60405180910390a3505062000a6d565b6000546001600160a01b03163314620005395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620005a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000530565b600080546040516001600160a01b038085169392169160008051602062003d1183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166200064e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000530565b6001600160a01b038216620006b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000530565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073d57607f821691505b6020821081036200075e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007b257600081815260208120601f850160051c810160208610156200078d5750805b601f850160051c820191505b81811015620007ae5782815560010162000799565b5050505b505050565b81516001600160401b03811115620007d357620007d362000712565b620007eb81620007e4845462000728565b8462000764565b602080601f8311600181146200082357600084156200080a5750858301515b600019600386901b1c1916600185901b178555620007ae565b600085815260208120601f198616915b82811015620008545788860151825594840194600190910190840162000833565b5085821015620008735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008da578160001904821115620008be57620008be62000883565b80851615620008cc57918102915b93841c93908002906200089e565b509250929050565b600082620008f35750600162000992565b81620009025750600062000992565b81600181146200091b5760028114620009265762000946565b600191505062000992565b60ff8411156200093a576200093a62000883565b50506001821b62000992565b5060208310610133831016604e8410600b84101617156200096b575081810a62000992565b62000977838362000899565b80600019048211156200098e576200098e62000883565b0290505b92915050565b6000620009a960ff841683620008e2565b9392505050565b6000816000190483118215151615620009cd57620009cd62000883565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620009fa57620009fa620009d2565b500690565b8181038181111562000992576200099262000883565b8082018082111562000992576200099262000883565b60008262000a3d5762000a3d620009d2565b500490565b60006020828403121562000a5557600080fd5b81516001600160a01b0381168114620009a957600080fd5b6132948062000a7d6000396000f3fe6080604052600436106102e85760003560e01c806361cab21711610190578063a9059cbb116100dc578063e01af92c11610095578063e89f9d0b1161006f578063e89f9d0b1461090f578063f2fde38b14610925578063f9d0831a14610945578063fce589d81461096557600080fd5b8063e01af92c146108b9578063e2f45605146108d9578063e57f14e1146108ef57600080fd5b8063a9059cbb146107e8578063a9568a3414610808578063afa4f3b21461081e578063b577554a1461083e578063bb85c6d114610853578063dd62ed3e1461087357600080fd5b806375f0a874116101495780638da5cb5b116101235780638da5cb5b1461077f57806395d89b411461079d578063a071dcf4146107b2578063a457c2d7146107c857600080fd5b806375f0a8741461070657806388f82020146107265780638991654f1461075f57600080fd5b806361cab2171461065a5780636b67c4df1461067a5780636b7ae8dc146106905780636ddd1713146106b057806370a08231146106d1578063715018a6146106f157600080fd5b8063313ce5671161024f57806349bd5a5e1161020857806352e58c97116101e257806352e58c97146105c15780635342acb4146105e15780635654d0b31461061a57806357c51e8c1461063a57600080fd5b806349bd5a5e146105615780634ff669d31461058157806352390c02146105a157600080fd5b8063313ce5671461049f5780633685d419146104c157806339509351146104e15780633bd5d173146105015780634549b03914610521578063457c194c1461054157600080fd5b80631529fbbf116102a15780631529fbbf146103e95780631694505e1461040a57806318160ddd1461042a57806320d98fc41461043f57806323b872dd1461045f5780632d8381191461047f57600080fd5b8063061c82d0146102f4578063062287491461031657806306fdde0314610353578063095ea7b3146103755780630cdd0548146103a557806313114a9d146103c557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612eda565b61097b565b005b34801561032257600080fd5b50601a54610336906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561035f57600080fd5b50610368610a3f565b60405161034a9190612ef3565b34801561038157600080fd5b50610395610390366004612f56565b610ad1565b604051901515815260200161034a565b3480156103b157600080fd5b50601b54610336906001600160a01b031681565b3480156103d157600080fd5b506103db60175481565b60405190815260200161034a565b3480156103f557600080fd5b50601b5461039590600160a01b900460ff1681565b34801561041657600080fd5b50601d54610336906001600160a01b031681565b34801561043657600080fd5b50600a546103db565b34801561044b57600080fd5b5061031461045a366004612f82565b610ae8565b34801561046b57600080fd5b5061039561047a366004612f9f565b610c29565b34801561048b57600080fd5b506103db61049a366004612eda565b610c7b565b3480156104ab57600080fd5b5060095460405160ff909116815260200161034a565b3480156104cd57600080fd5b506103146104dc366004612f82565b610cff565b3480156104ed57600080fd5b506103956104fc366004612f56565b610eb5565b34801561050d57600080fd5b5061031461051c366004612eda565b610eec565b34801561052d57600080fd5b506103db61053c366004612fee565b610fda565b34801561054d57600080fd5b5061031461055c366004612eda565b611069565b34801561056d57600080fd5b50601e54610336906001600160a01b031681565b34801561058d57600080fd5b5061031461059c366004612eda565b6110af565b3480156105ad57600080fd5b506103146105bc366004612f82565b6110f7565b3480156105cd57600080fd5b506103146105dc366004612f82565b61124a565b3480156105ed57600080fd5b506103956105fc366004612f82565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062657600080fd5b5061031461063536600461301e565b611399565b34801561064657600080fd5b50610314610655366004612f82565b611474565b34801561066657600080fd5b50610314610675366004612eda565b6115a2565b34801561068657600080fd5b506103db60135481565b34801561069c57600080fd5b50601954610336906001600160a01b031681565b3480156106bc57600080fd5b50601e5461039590600160a81b900460ff1681565b3480156106dd57600080fd5b506103db6106ec366004612f82565b6115e9565b3480156106fd57600080fd5b50610314611648565b34801561071257600080fd5b50601854610336906001600160a01b031681565b34801561073257600080fd5b50610395610741366004612f82565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561076b57600080fd5b5061031461077a366004612eda565b6116bc565b34801561078b57600080fd5b506000546001600160a01b0316610336565b3480156107a957600080fd5b50610368611702565b3480156107be57600080fd5b506103db600d5481565b3480156107d457600080fd5b506103956107e3366004612f56565b611711565b3480156107f457600080fd5b50610395610803366004612f56565b611748565b34801561081457600080fd5b506103db60115481565b34801561082a57600080fd5b50610314610839366004612eda565b611755565b34801561084a57600080fd5b50600c546103db565b34801561085f57600080fd5b5061031461086e366004612f82565b611810565b34801561087f57600080fd5b506103db61088e36600461303b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108c557600080fd5b506103146108d436600461301e565b61195d565b3480156108e557600080fd5b506103db601f5481565b3480156108fb57600080fd5b5061031461090a366004612f82565b6119d4565b34801561091b57600080fd5b506103db60155481565b34801561093157600080fd5b50610314610940366004612f82565b611ad0565b34801561095157600080fd5b50610314610960366004612f82565b611bba565b34801561097157600080fd5b506103db600f5481565b6000546001600160a01b031633146109ae5760405162461bcd60e51b81526004016109a590613069565b60405180910390fd5b600d819055601154601554600f546013546109c990856130b4565b6109d391906130b4565b6109dd91906130b4565b6109e791906130b4565b601781905560191015610a3c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c657373207468616e2032352560448201526064016109a5565b50565b606060078054610a4e906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a906130c7565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905090565b6000610ade338484611d5d565b5060015b92915050565b6000546001600160a01b03163314610b125760405162461bcd60e51b81526004016109a590613069565b601a546001600160a01b0390811690821603610b7c5760405162461bcd60e51b815260206004820152602360248201527f6275726e2077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b60648201526084016109a5565b6001600160a01b0381163b15610bd45760405162461bcd60e51b815260206004820181905260248201527f6275726e2077616c6c65742063616e6e6f74206265206120636f6e747261637460448201526064016109a5565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4044e8f3d5a749de005c61e7cd4e16cc78f35f7989dac2fd630e02735dccd4a906020015b60405180910390a150565b6000610c36848484611e81565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610c71918691610c6c908690613101565b611d5d565b5060019392505050565b6000600b54821115610ce25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109a5565b6000610cec61232a565b9050610cf88184613114565b9392505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526005602052604090205460ff16610d915760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a5565b60005b600654811015610eb157816001600160a01b031660068281548110610dbb57610dbb613136565b6000918252602090912001546001600160a01b031603610e9f5760068054610de590600190613101565b81548110610df557610df5613136565b600091825260209091200154600680546001600160a01b039092169183908110610e2157610e21613136565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e7957610e7961314c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ea981613162565b915050610d94565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ade918590610c6c9086906130b4565b3360008181526005602052604090205460ff1615610f615760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109a5565b6000610f6c8361234d565b505050506001600160a01b038516600090815260016020526040902054929350610f9a928492509050613101565b6001600160a01b038316600090815260016020526040902055600b54610fc1908290613101565b600b55600c54610fd29084906130b4565b600c55505050565b6000600a5483111561102e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109a5565b8161104e57600061103e8461234d565b50949650610ae295505050505050565b60006110598461234d565b50939650610ae295505050505050565b6000546001600160a01b031633146110935760405162461bcd60e51b81526004016109a590613069565b6013819055601154601554600f54600d546109c99085906130b4565b6000546001600160a01b031633146110d95760405162461bcd60e51b81526004016109a590613069565b6011819055601554600f54601354600d54849392916109c9916130b4565b6000546001600160a01b031633146111215760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526005602052604090205460ff161561118a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a5565b6001600160a01b038116600090815260016020526040902054156111e4576001600160a01b0381166000908152600160205260409020546111ca90610c7b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b81526004016109a590613069565b6019546001600160a01b03908116908216036112e45760405162461bcd60e51b815260206004820152602960248201527f666f756e646174696f6e2077616c6c657420697320616c72656164792074686160448201526874206164647265737360b81b60648201526084016109a5565b6001600160a01b0381163b1561134b5760405162461bcd60e51b815260206004820152602660248201527f666f756e646174696f6e2077616c6c65742063616e6e6f74206265206120636f6044820152651b9d1c9858dd60d21b60648201526084016109a5565b601980546001600160a01b0319166001600160a01b0383169081179091556040519081527fb4d223afecd88ad2ee5c1953215b9eba425c88de0e3c52d7659dd229088a7e5490602001610c1e565b6000546001600160a01b031633146113c35760405162461bcd60e51b81526004016109a590613069565b801515601b60149054906101000a900460ff161515036114565760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016109a5565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461149e5760405162461bcd60e51b81526004016109a590613069565b601b546001600160a01b03908116908216036114fc5760405162461bcd60e51b815260206004820152601e60248201527f77616c6c657420697320616c726561647920746861742061646472657373000060448201526064016109a5565b6001600160a01b0381163b156115545760405162461bcd60e51b815260206004820152601b60248201527f77616c6c65742063616e6e6f74206265206120636f6e7472616374000000000060448201526064016109a5565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f82245f3a5c8b66e560ac2b10741ce5e223e902e6427719e943e6b91d252902b090602001610c1e565b6000546001600160a01b031633146115cc5760405162461bcd60e51b81526004016109a590613069565b6015819055601154600f54601354600d548492916109c9916130b4565b6001600160a01b03811660009081526005602052604081205460ff161561162657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ae290610c7b565b6000546001600160a01b031633146116725760405162461bcd60e51b81526004016109a590613069565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116e65760405162461bcd60e51b81526004016109a590613069565b600f819055601154601554601354600d5484916109c9916130b4565b606060088054610a4e906130c7565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ade918590610c6c908690613101565b6000610ade338484611e81565b6000546001600160a01b0316331461177f5760405162461bcd60e51b81526004016109a590613069565b620186a061178c600a5490565b6117969190613114565b81101561180b5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016109a5565b601f55565b6000546001600160a01b0316331461183a5760405162461bcd60e51b81526004016109a590613069565b6018546001600160a01b03908116908216036118a95760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109a5565b6001600160a01b0381163b1561190f5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b60648201526084016109a5565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610c1e565b6000546001600160a01b031633146119875760405162461bcd60e51b81526004016109a590613069565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610c1e90831515815260200190565b6000546001600160a01b031633146119fe5760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526004602052604090205460ff1615611a735760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479207468652076616c7565206f66206044820152637472756560e01b60648201526084016109a5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600190811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a250565b6000546001600160a01b03163314611afa5760405162461bcd60e51b81526004016109a590613069565b6001600160a01b038116611b5f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611be45760405162461bcd60e51b81526004016109a590613069565b306001600160a01b03821603611c3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016109a5565b6001600160a01b038116611c765760405133904780156108fc02916000818181858888f19350505050158015610eb1573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce3919061317b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613194565b50505050565b6001600160a01b038316611dbf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a5565b6001600160a01b038216611e205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ee55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a5565b60008111611f475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109a5565b6000611f52306115e9565b601f5490915081108015908190611f735750601e54600160a01b900460ff16155b8015611f8c5750601e546001600160a01b038581169116145b8015611fa15750601e54600160a81b900460ff165b1561231857601e805460ff60a01b1916600160a01b179055601154600f546013546015546000939291611fd3916130b4565b611fdd91906130b4565b611fe791906130b4565b905080156123095760408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061202857612028613136565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a591906131b1565b816001815181106120b8576120b8613136565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac947906120fe9088906000908690309042906004016131ce565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506000824761213e9190613101565b601554909150156121b2576000846015548361215a919061323f565b6121649190613114565b60195490915061217d906001600160a01b0316826123a8565b6040518181527f0afb1684bc45987e0af7845d547fec7d9c213d0aa84c806a35f7fc8bcb952abb9060200160405180910390a1505b6013541561222357600084601354836121cb919061323f565b6121d59190613114565b6018549091506121ee906001600160a01b0316826123a8565b6040518181527fddce3d5e4f18a9c2902704a38b56baadd81a9af59b8ded8a3220b6a6c1696b6b9060200160405180910390a1505b600f541561229457600084600f548361223c919061323f565b6122469190613114565b601a5490915061225f906001600160a01b0316826123a8565b6040518181527f7cd85dd6865fde54be49843872333a3b09b595ef3f51a39a27292ab1951457509060200160405180910390a1505b6011541561230557600084601154836122ad919061323f565b6122b79190613114565b601b549091506122d0906001600160a01b0316826123a8565b6040518181527f44638f3f53210bad18feb66d96dc67a4327d1eb6f0ad32b35d5656f8e6ee20859060200160405180910390a1505b5050505b50601e805460ff60a01b191690555b6123238585856124c6565b5050505050565b60008060006123376126da565b90925090506123468183613114565b9250505090565b60008060008060008060008060008060006123678c61285d565b935093509350935060008060006123888f87878761238361232a565b6128bc565b919f509d509b509599509397509195509350505050919395979092949650565b804710156123f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109a5565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612445576040519150601f19603f3d011682016040523d82523d6000602084013e61244a565b606091505b50509050806124c15760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109a5565b505050565b6001600160a01b03831660009081526004602052604081205460ff168061250557506001600160a01b03831660009081526004602052604090205460ff165b8061254c5750601b54600160a01b900460ff1680156125325750601e546001600160a01b03858116911614155b801561254c5750601e546001600160a01b03848116911614155b1561255d5761255961292e565b5060015b6001600160a01b03841660009081526005602052604090205460ff16801561259e57506001600160a01b03831660009081526005602052604090205460ff16155b156125b3576125ae8484846129a0565b6126b1565b6001600160a01b03841660009081526005602052604090205460ff161580156125f457506001600160a01b03831660009081526005602052604090205460ff165b15612604576125ae848484612af6565b6001600160a01b03841660009081526005602052604090205460ff1615801561264657506001600160a01b03831660009081526005602052604090205460ff16155b15612656576125ae848484612bc5565b6001600160a01b03841660009081526005602052604090205460ff16801561269657506001600160a01b03831660009081526005602052604090205460ff165b156126a6576125ae848484612c2d565b6126b1848484612bc5565b8015611d5757611d57600e54600d55601054600f55601254601155601454601355601654601555565b600b54600a546000918291825b60065481101561282c5782600160006006848154811061270957612709613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612774575081600260006006848154811061274d5761274d613136565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561278a57600b54600a54945094505050509091565b60016000600683815481106127a1576127a1613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127d09084613101565b925060026000600683815481106127e9576127e9613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020546128189083613101565b91508061282481613162565b9150506126e7565b50600a54600b5461283d9190613114565b82101561285457600b54600a549350935050509091565b90939092509050565b600080600080600061286e86612cc5565b9050600061287b87612ce1565b9050600061288888612cf3565b905060008183612898868c613101565b6128a29190613101565b6128ac9190613101565b9993985091965094509092505050565b60008080806128cb858a61323f565b905060006128d9868a61323f565b905060006128e7878a61323f565b905060006128f5888a61323f565b9050600081836129058688613101565b61290f9190613101565b6129199190613101565b949d949c50929a509298505050505050505050565b600d5415801561293e5750600f54155b801561294a5750601154155b80156129565750601354155b80156129625750601554155b1561296957565b600d8054600e55600f8054601055601180546012556013805460145560158054601655600094859055908490559183905582905555565b60008060008060008060006129b48861234d565b96509650965096509650965096506129ce8a85888b612d05565b965093506129de8a85888b612dde565b6001600160a01b038c16600090815260026020526040902054909750909450612a08908990613101565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a38908890613101565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612a689087906130b4565b6001600160a01b038a16600090815260016020526040902055612a8a82612e00565b612a9381612e00565b612a9d8584612e90565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612ae291815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612b0a8861234d565b9650965096509650965096509650612b248a85888b612d05565b96509350612b348a85888b612dde565b6001600160a01b038c16600090815260016020526040902054909750909450612b5e908890613101565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612b959085906130b4565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a689087906130b4565b6000806000806000806000612bd98861234d565b9650965096509650965096509650612bf38a85888b612d05565b96509350612c038a85888b612dde565b6001600160a01b038c16600090815260016020526040902054909750909450612a38908890613101565b6000806000806000806000612c418861234d565b9650965096509650965096509650612c5b8a85888b612d05565b96509350612c6b8a85888b612dde565b6001600160a01b038c16600090815260026020526040902054909750909450612c95908990613101565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612b5e908890613101565b60006064600d5483612cd7919061323f565b610ae29190613114565b6000606460135483612cd7919061323f565b6000606460155483612cd7919061323f565b600080600f54600003612d1c575083905082612dd5565b6000612d2784612eb6565b90506000612d3361232a565b612d3d908361323f565b9050612d498187613101565b9550612d558288613101565b30600090815260016020526040902054909750612d739082906130b4565b30600081815260016020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612dc49086815260200190565b60405180910390a386869350935050505b94509492505050565b600080601154600003612df5575083905082612dd5565b6000612d2784612ec8565b8015610a3c576000612e1061232a565b90506000612e1e828461323f565b30600090815260016020526040902054909150612e3c9082906130b4565b3060009081526001602090815260408083209390935560059052205460ff16156124c15730600090815260026020526040902054612e7b9084906130b4565b30600090815260026020526040902055505050565b81600b54612e9e9190613101565b600b55600c54612eaf9082906130b4565b600c555050565b60006064600f5483612cd7919061323f565b6000606460115483612cd7919061323f565b600060208284031215612eec57600080fd5b5035919050565b600060208083528351808285015260005b81811015612f2057858101830151858201604001528201612f04565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a3c57600080fd5b60008060408385031215612f6957600080fd5b8235612f7481612f41565b946020939093013593505050565b600060208284031215612f9457600080fd5b8135610cf881612f41565b600080600060608486031215612fb457600080fd5b8335612fbf81612f41565b92506020840135612fcf81612f41565b929592945050506040919091013590565b8015158114610a3c57600080fd5b6000806040838503121561300157600080fd5b82359150602083013561301381612fe0565b809150509250929050565b60006020828403121561303057600080fd5b8135610cf881612fe0565b6000806040838503121561304e57600080fd5b823561305981612f41565b9150602083013561301381612f41565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae257610ae261309e565b600181811c908216806130db57607f821691505b6020821081036130fb57634e487b7160e01b600052602260045260246000fd5b50919050565b81810381811115610ae257610ae261309e565b60008261313157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016131745761317461309e565b5060010190565b60006020828403121561318d57600080fd5b5051919050565b6000602082840312156131a657600080fd5b8151610cf881612fe0565b6000602082840312156131c357600080fd5b8151610cf881612f41565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561321e5784516001600160a01b0316835293830193918301916001016131f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008160001904831182151516156132595761325961309e565b50029056fea2646970667358221220f40d72a0290ac7919c6b7dac422dd91227f29644448bc586bd2f427e398cd8d364736f6c634300081000338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x6080604052600436106102e85760003560e01c806361cab21711610190578063a9059cbb116100dc578063e01af92c11610095578063e89f9d0b1161006f578063e89f9d0b1461090f578063f2fde38b14610925578063f9d0831a14610945578063fce589d81461096557600080fd5b8063e01af92c146108b9578063e2f45605146108d9578063e57f14e1146108ef57600080fd5b8063a9059cbb146107e8578063a9568a3414610808578063afa4f3b21461081e578063b577554a1461083e578063bb85c6d114610853578063dd62ed3e1461087357600080fd5b806375f0a874116101495780638da5cb5b116101235780638da5cb5b1461077f57806395d89b411461079d578063a071dcf4146107b2578063a457c2d7146107c857600080fd5b806375f0a8741461070657806388f82020146107265780638991654f1461075f57600080fd5b806361cab2171461065a5780636b67c4df1461067a5780636b7ae8dc146106905780636ddd1713146106b057806370a08231146106d1578063715018a6146106f157600080fd5b8063313ce5671161024f57806349bd5a5e1161020857806352e58c97116101e257806352e58c97146105c15780635342acb4146105e15780635654d0b31461061a57806357c51e8c1461063a57600080fd5b806349bd5a5e146105615780634ff669d31461058157806352390c02146105a157600080fd5b8063313ce5671461049f5780633685d419146104c157806339509351146104e15780633bd5d173146105015780634549b03914610521578063457c194c1461054157600080fd5b80631529fbbf116102a15780631529fbbf146103e95780631694505e1461040a57806318160ddd1461042a57806320d98fc41461043f57806323b872dd1461045f5780632d8381191461047f57600080fd5b8063061c82d0146102f4578063062287491461031657806306fdde0314610353578063095ea7b3146103755780630cdd0548146103a557806313114a9d146103c557600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f366004612eda565b61097b565b005b34801561032257600080fd5b50601a54610336906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561035f57600080fd5b50610368610a3f565b60405161034a9190612ef3565b34801561038157600080fd5b50610395610390366004612f56565b610ad1565b604051901515815260200161034a565b3480156103b157600080fd5b50601b54610336906001600160a01b031681565b3480156103d157600080fd5b506103db60175481565b60405190815260200161034a565b3480156103f557600080fd5b50601b5461039590600160a01b900460ff1681565b34801561041657600080fd5b50601d54610336906001600160a01b031681565b34801561043657600080fd5b50600a546103db565b34801561044b57600080fd5b5061031461045a366004612f82565b610ae8565b34801561046b57600080fd5b5061039561047a366004612f9f565b610c29565b34801561048b57600080fd5b506103db61049a366004612eda565b610c7b565b3480156104ab57600080fd5b5060095460405160ff909116815260200161034a565b3480156104cd57600080fd5b506103146104dc366004612f82565b610cff565b3480156104ed57600080fd5b506103956104fc366004612f56565b610eb5565b34801561050d57600080fd5b5061031461051c366004612eda565b610eec565b34801561052d57600080fd5b506103db61053c366004612fee565b610fda565b34801561054d57600080fd5b5061031461055c366004612eda565b611069565b34801561056d57600080fd5b50601e54610336906001600160a01b031681565b34801561058d57600080fd5b5061031461059c366004612eda565b6110af565b3480156105ad57600080fd5b506103146105bc366004612f82565b6110f7565b3480156105cd57600080fd5b506103146105dc366004612f82565b61124a565b3480156105ed57600080fd5b506103956105fc366004612f82565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062657600080fd5b5061031461063536600461301e565b611399565b34801561064657600080fd5b50610314610655366004612f82565b611474565b34801561066657600080fd5b50610314610675366004612eda565b6115a2565b34801561068657600080fd5b506103db60135481565b34801561069c57600080fd5b50601954610336906001600160a01b031681565b3480156106bc57600080fd5b50601e5461039590600160a81b900460ff1681565b3480156106dd57600080fd5b506103db6106ec366004612f82565b6115e9565b3480156106fd57600080fd5b50610314611648565b34801561071257600080fd5b50601854610336906001600160a01b031681565b34801561073257600080fd5b50610395610741366004612f82565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561076b57600080fd5b5061031461077a366004612eda565b6116bc565b34801561078b57600080fd5b506000546001600160a01b0316610336565b3480156107a957600080fd5b50610368611702565b3480156107be57600080fd5b506103db600d5481565b3480156107d457600080fd5b506103956107e3366004612f56565b611711565b3480156107f457600080fd5b50610395610803366004612f56565b611748565b34801561081457600080fd5b506103db60115481565b34801561082a57600080fd5b50610314610839366004612eda565b611755565b34801561084a57600080fd5b50600c546103db565b34801561085f57600080fd5b5061031461086e366004612f82565b611810565b34801561087f57600080fd5b506103db61088e36600461303b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108c557600080fd5b506103146108d436600461301e565b61195d565b3480156108e557600080fd5b506103db601f5481565b3480156108fb57600080fd5b5061031461090a366004612f82565b6119d4565b34801561091b57600080fd5b506103db60155481565b34801561093157600080fd5b50610314610940366004612f82565b611ad0565b34801561095157600080fd5b50610314610960366004612f82565b611bba565b34801561097157600080fd5b506103db600f5481565b6000546001600160a01b031633146109ae5760405162461bcd60e51b81526004016109a590613069565b60405180910390fd5b600d819055601154601554600f546013546109c990856130b4565b6109d391906130b4565b6109dd91906130b4565b6109e791906130b4565b601781905560191015610a3c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2066656573206d757374206265206c657373207468616e2032352560448201526064016109a5565b50565b606060078054610a4e906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a906130c7565b8015610ac75780601f10610a9c57610100808354040283529160200191610ac7565b820191906000526020600020905b815481529060010190602001808311610aaa57829003601f168201915b5050505050905090565b6000610ade338484611d5d565b5060015b92915050565b6000546001600160a01b03163314610b125760405162461bcd60e51b81526004016109a590613069565b601a546001600160a01b0390811690821603610b7c5760405162461bcd60e51b815260206004820152602360248201527f6275726e2077616c6c657420697320616c72656164792074686174206164647260448201526265737360e81b60648201526084016109a5565b6001600160a01b0381163b15610bd45760405162461bcd60e51b815260206004820181905260248201527f6275726e2077616c6c65742063616e6e6f74206265206120636f6e747261637460448201526064016109a5565b601a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc4044e8f3d5a749de005c61e7cd4e16cc78f35f7989dac2fd630e02735dccd4a906020015b60405180910390a150565b6000610c36848484611e81565b6001600160a01b038416600090815260036020908152604080832033808552925290912054610c71918691610c6c908690613101565b611d5d565b5060019392505050565b6000600b54821115610ce25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016109a5565b6000610cec61232a565b9050610cf88184613114565b9392505050565b6000546001600160a01b03163314610d295760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526005602052604090205460ff16610d915760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a5565b60005b600654811015610eb157816001600160a01b031660068281548110610dbb57610dbb613136565b6000918252602090912001546001600160a01b031603610e9f5760068054610de590600190613101565b81548110610df557610df5613136565b600091825260209091200154600680546001600160a01b039092169183908110610e2157610e21613136565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e7957610e7961314c565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ea981613162565b915050610d94565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ade918590610c6c9086906130b4565b3360008181526005602052604090205460ff1615610f615760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016109a5565b6000610f6c8361234d565b505050506001600160a01b038516600090815260016020526040902054929350610f9a928492509050613101565b6001600160a01b038316600090815260016020526040902055600b54610fc1908290613101565b600b55600c54610fd29084906130b4565b600c55505050565b6000600a5483111561102e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016109a5565b8161104e57600061103e8461234d565b50949650610ae295505050505050565b60006110598461234d565b50939650610ae295505050505050565b6000546001600160a01b031633146110935760405162461bcd60e51b81526004016109a590613069565b6013819055601154601554600f54600d546109c99085906130b4565b6000546001600160a01b031633146110d95760405162461bcd60e51b81526004016109a590613069565b6011819055601554600f54601354600d54849392916109c9916130b4565b6000546001600160a01b031633146111215760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526005602052604090205460ff161561118a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016109a5565b6001600160a01b038116600090815260016020526040902054156111e4576001600160a01b0381166000908152600160205260409020546111ca90610c7b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b031633146112745760405162461bcd60e51b81526004016109a590613069565b6019546001600160a01b03908116908216036112e45760405162461bcd60e51b815260206004820152602960248201527f666f756e646174696f6e2077616c6c657420697320616c72656164792074686160448201526874206164647265737360b81b60648201526084016109a5565b6001600160a01b0381163b1561134b5760405162461bcd60e51b815260206004820152602660248201527f666f756e646174696f6e2077616c6c65742063616e6e6f74206265206120636f6044820152651b9d1c9858dd60d21b60648201526084016109a5565b601980546001600160a01b0319166001600160a01b0383169081179091556040519081527fb4d223afecd88ad2ee5c1953215b9eba425c88de0e3c52d7659dd229088a7e5490602001610c1e565b6000546001600160a01b031633146113c35760405162461bcd60e51b81526004016109a590613069565b801515601b60149054906101000a900460ff161515036114565760405162461bcd60e51b815260206004820152604260248201527f57616c6c657420746f2077616c6c6574207472616e7366657220776974686f7560448201527f742066656520697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016109a5565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331461149e5760405162461bcd60e51b81526004016109a590613069565b601b546001600160a01b03908116908216036114fc5760405162461bcd60e51b815260206004820152601e60248201527f77616c6c657420697320616c726561647920746861742061646472657373000060448201526064016109a5565b6001600160a01b0381163b156115545760405162461bcd60e51b815260206004820152601b60248201527f77616c6c65742063616e6e6f74206265206120636f6e7472616374000000000060448201526064016109a5565b601b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f82245f3a5c8b66e560ac2b10741ce5e223e902e6427719e943e6b91d252902b090602001610c1e565b6000546001600160a01b031633146115cc5760405162461bcd60e51b81526004016109a590613069565b6015819055601154600f54601354600d548492916109c9916130b4565b6001600160a01b03811660009081526005602052604081205460ff161561162657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ae290610c7b565b6000546001600160a01b031633146116725760405162461bcd60e51b81526004016109a590613069565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116e65760405162461bcd60e51b81526004016109a590613069565b600f819055601154601554601354600d5484916109c9916130b4565b606060088054610a4e906130c7565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ade918590610c6c908690613101565b6000610ade338484611e81565b6000546001600160a01b0316331461177f5760405162461bcd60e51b81526004016109a590613069565b620186a061178c600a5490565b6117969190613114565b81101561180b5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c79000060648201526084016109a5565b601f55565b6000546001600160a01b0316331461183a5760405162461bcd60e51b81526004016109a590613069565b6018546001600160a01b03908116908216036118a95760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b60648201526084016109a5565b6001600160a01b0381163b1561190f5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b60648201526084016109a5565b601880546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610c1e565b6000546001600160a01b031633146119875760405162461bcd60e51b81526004016109a590613069565b601e8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610c1e90831515815260200190565b6000546001600160a01b031633146119fe5760405162461bcd60e51b81526004016109a590613069565b6001600160a01b03811660009081526004602052604090205460ff1615611a735760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479207468652076616c7565206f66206044820152637472756560e01b60648201526084016109a5565b6001600160a01b038116600081815260046020908152604091829020805460ff1916600190811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a250565b6000546001600160a01b03163314611afa5760405162461bcd60e51b81526004016109a590613069565b6001600160a01b038116611b5f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611be45760405162461bcd60e51b81526004016109a590613069565b306001600160a01b03821603611c3c5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016109a5565b6001600160a01b038116611c765760405133904780156108fc02916000818181858888f19350505050158015610eb1573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce3919061317b565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190613194565b50505050565b6001600160a01b038316611dbf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a5565b6001600160a01b038216611e205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a5565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ee55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109a5565b60008111611f475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016109a5565b6000611f52306115e9565b601f5490915081108015908190611f735750601e54600160a01b900460ff16155b8015611f8c5750601e546001600160a01b038581169116145b8015611fa15750601e54600160a81b900460ff165b1561231857601e805460ff60a01b1916600160a01b179055601154600f546013546015546000939291611fd3916130b4565b611fdd91906130b4565b611fe791906130b4565b905080156123095760408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061202857612028613136565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a591906131b1565b816001815181106120b8576120b8613136565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac947906120fe9088906000908690309042906004016131ce565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506000824761213e9190613101565b601554909150156121b2576000846015548361215a919061323f565b6121649190613114565b60195490915061217d906001600160a01b0316826123a8565b6040518181527f0afb1684bc45987e0af7845d547fec7d9c213d0aa84c806a35f7fc8bcb952abb9060200160405180910390a1505b6013541561222357600084601354836121cb919061323f565b6121d59190613114565b6018549091506121ee906001600160a01b0316826123a8565b6040518181527fddce3d5e4f18a9c2902704a38b56baadd81a9af59b8ded8a3220b6a6c1696b6b9060200160405180910390a1505b600f541561229457600084600f548361223c919061323f565b6122469190613114565b601a5490915061225f906001600160a01b0316826123a8565b6040518181527f7cd85dd6865fde54be49843872333a3b09b595ef3f51a39a27292ab1951457509060200160405180910390a1505b6011541561230557600084601154836122ad919061323f565b6122b79190613114565b601b549091506122d0906001600160a01b0316826123a8565b6040518181527f44638f3f53210bad18feb66d96dc67a4327d1eb6f0ad32b35d5656f8e6ee20859060200160405180910390a1505b5050505b50601e805460ff60a01b191690555b6123238585856124c6565b5050505050565b60008060006123376126da565b90925090506123468183613114565b9250505090565b60008060008060008060008060008060006123678c61285d565b935093509350935060008060006123888f87878761238361232a565b6128bc565b919f509d509b509599509397509195509350505050919395979092949650565b804710156123f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109a5565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612445576040519150601f19603f3d011682016040523d82523d6000602084013e61244a565b606091505b50509050806124c15760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109a5565b505050565b6001600160a01b03831660009081526004602052604081205460ff168061250557506001600160a01b03831660009081526004602052604090205460ff165b8061254c5750601b54600160a01b900460ff1680156125325750601e546001600160a01b03858116911614155b801561254c5750601e546001600160a01b03848116911614155b1561255d5761255961292e565b5060015b6001600160a01b03841660009081526005602052604090205460ff16801561259e57506001600160a01b03831660009081526005602052604090205460ff16155b156125b3576125ae8484846129a0565b6126b1565b6001600160a01b03841660009081526005602052604090205460ff161580156125f457506001600160a01b03831660009081526005602052604090205460ff165b15612604576125ae848484612af6565b6001600160a01b03841660009081526005602052604090205460ff1615801561264657506001600160a01b03831660009081526005602052604090205460ff16155b15612656576125ae848484612bc5565b6001600160a01b03841660009081526005602052604090205460ff16801561269657506001600160a01b03831660009081526005602052604090205460ff165b156126a6576125ae848484612c2d565b6126b1848484612bc5565b8015611d5757611d57600e54600d55601054600f55601254601155601454601355601654601555565b600b54600a546000918291825b60065481101561282c5782600160006006848154811061270957612709613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612774575081600260006006848154811061274d5761274d613136565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561278a57600b54600a54945094505050509091565b60016000600683815481106127a1576127a1613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020546127d09084613101565b925060026000600683815481106127e9576127e9613136565b60009182526020808320909101546001600160a01b031683528201929092526040019020546128189083613101565b91508061282481613162565b9150506126e7565b50600a54600b5461283d9190613114565b82101561285457600b54600a549350935050509091565b90939092509050565b600080600080600061286e86612cc5565b9050600061287b87612ce1565b9050600061288888612cf3565b905060008183612898868c613101565b6128a29190613101565b6128ac9190613101565b9993985091965094509092505050565b60008080806128cb858a61323f565b905060006128d9868a61323f565b905060006128e7878a61323f565b905060006128f5888a61323f565b9050600081836129058688613101565b61290f9190613101565b6129199190613101565b949d949c50929a509298505050505050505050565b600d5415801561293e5750600f54155b801561294a5750601154155b80156129565750601354155b80156129625750601554155b1561296957565b600d8054600e55600f8054601055601180546012556013805460145560158054601655600094859055908490559183905582905555565b60008060008060008060006129b48861234d565b96509650965096509650965096506129ce8a85888b612d05565b965093506129de8a85888b612dde565b6001600160a01b038c16600090815260026020526040902054909750909450612a08908990613101565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612a38908890613101565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054612a689087906130b4565b6001600160a01b038a16600090815260016020526040902055612a8a82612e00565b612a9381612e00565b612a9d8584612e90565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612ae291815260200190565b60405180910390a350505050505050505050565b6000806000806000806000612b0a8861234d565b9650965096509650965096509650612b248a85888b612d05565b96509350612b348a85888b612dde565b6001600160a01b038c16600090815260016020526040902054909750909450612b5e908890613101565b6001600160a01b03808c16600090815260016020908152604080832094909455918c16815260029091522054612b959085906130b4565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612a689087906130b4565b6000806000806000806000612bd98861234d565b9650965096509650965096509650612bf38a85888b612d05565b96509350612c038a85888b612dde565b6001600160a01b038c16600090815260016020526040902054909750909450612a38908890613101565b6000806000806000806000612c418861234d565b9650965096509650965096509650612c5b8a85888b612d05565b96509350612c6b8a85888b612dde565b6001600160a01b038c16600090815260026020526040902054909750909450612c95908990613101565b6001600160a01b038b16600090815260026020908152604080832093909355600190522054612b5e908890613101565b60006064600d5483612cd7919061323f565b610ae29190613114565b6000606460135483612cd7919061323f565b6000606460155483612cd7919061323f565b600080600f54600003612d1c575083905082612dd5565b6000612d2784612eb6565b90506000612d3361232a565b612d3d908361323f565b9050612d498187613101565b9550612d558288613101565b30600090815260016020526040902054909750612d739082906130b4565b30600081815260016020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612dc49086815260200190565b60405180910390a386869350935050505b94509492505050565b600080601154600003612df5575083905082612dd5565b6000612d2784612ec8565b8015610a3c576000612e1061232a565b90506000612e1e828461323f565b30600090815260016020526040902054909150612e3c9082906130b4565b3060009081526001602090815260408083209390935560059052205460ff16156124c15730600090815260026020526040902054612e7b9084906130b4565b30600090815260026020526040902055505050565b81600b54612e9e9190613101565b600b55600c54612eaf9082906130b4565b600c555050565b60006064600f5483612cd7919061323f565b6000606460115483612cd7919061323f565b600060208284031215612eec57600080fd5b5035919050565b600060208083528351808285015260005b81811015612f2057858101830151858201604001528201612f04565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a3c57600080fd5b60008060408385031215612f6957600080fd5b8235612f7481612f41565b946020939093013593505050565b600060208284031215612f9457600080fd5b8135610cf881612f41565b600080600060608486031215612fb457600080fd5b8335612fbf81612f41565b92506020840135612fcf81612f41565b929592945050506040919091013590565b8015158114610a3c57600080fd5b6000806040838503121561300157600080fd5b82359150602083013561301381612fe0565b809150509250929050565b60006020828403121561303057600080fd5b8135610cf881612fe0565b6000806040838503121561304e57600080fd5b823561305981612f41565b9150602083013561301381612f41565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae257610ae261309e565b600181811c908216806130db57607f821691505b6020821081036130fb57634e487b7160e01b600052602260045260246000fd5b50919050565b81810381811115610ae257610ae261309e565b60008261313157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016131745761317461309e565b5060010190565b60006020828403121561318d57600080fd5b5051919050565b6000602082840312156131a657600080fd5b8151610cf881612fe0565b6000602082840312156131c357600080fd5b8151610cf881612f41565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561321e5784516001600160a01b0316835293830193918301916001016131f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008160001904831182151516156132595761325961309e565b50029056fea2646970667358221220f40d72a0290ac7919c6b7dac422dd91227f29644448bc586bd2f427e398cd8d364736f6c63430008100033
Deployed Bytecode Sourcemap
13367:26752:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38399:262;;;;;;;;;;-1:-1:-1;38399:262:0;;;;;:::i;:::-;;:::i;:::-;;14915:70;;;;;;;;;;-1:-1:-1;14915:70:0;;;;-1:-1:-1;;;;;14915:70:0;;;;;;-1:-1:-1;;;;;363:32:1;;;345:51;;333:2;318:18;14915:70:0;;;;;;;;16971:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17943:167::-;;;;;;;;;;-1:-1:-1;17943:167:0;;;;;:::i;:::-;;:::i;:::-;;;1581:14:1;;1574:22;1556:41;;1544:2;1529:18;17943:167:0;1416:187:1;14994:74:0;;;;;;;;;;-1:-1:-1;14994:74:0;;;;-1:-1:-1;;;;;14994:74:0;;;14645:88;;;;;;;;;;;;;;;;;;;1754:25:1;;;1742:2;1727:18;14645:88:0;1608:177:1;15085:51:0;;;;;;;;;;-1:-1:-1;15085:51:0;;;;-1:-1:-1;;;15085:51:0;;;;;;15231:42;;;;;;;;;;-1:-1:-1;15231:42:0;;;;-1:-1:-1;;;;;15231:42:0;;;17272:99;;;;;;;;;;-1:-1:-1;17354:7:0;;17272:99;;37693:328;;;;;;;;;;-1:-1:-1;37693:328:0;;;;;:::i;:::-;;:::i;18122:274::-;;;;;;;;;;-1:-1:-1;18122:274:0;;;;;:::i;:::-;;:::i;20003:258::-;;;;;;;;;;-1:-1:-1;20003:258:0;;;;;:::i;:::-;;:::i;17173:87::-;;;;;;;;;;-1:-1:-1;17241:9:0;;17173:87;;17241:9;;;;2880:36:1;;2868:2;2853:18;17173:87:0;2738:184:1;20632:501:0;;;;;;;;;;-1:-1:-1;20632:501:0;;;;;:::i;:::-;;:::i;18408:221::-;;;;;;;;;;-1:-1:-1;18408:221:0;;;;;:::i;:::-;;:::i;19140:383::-;;;;;;;;;;-1:-1:-1;19140:383:0;;;;;:::i;:::-;;:::i;19535:456::-;;;;;;;;;;-1:-1:-1;19535:456:0;;;;;:::i;:::-;;:::i;38673:278::-;;;;;;;;;;-1:-1:-1;38673:278:0;;;;;:::i;:::-;;:::i;15282:29::-;;;;;;;;;;-1:-1:-1;15282:29:0;;;;-1:-1:-1;;;;;15282:29:0;;;39245:273;;;;;;;;;;-1:-1:-1;39245:273:0;;;;;:::i;:::-;;:::i;20273:347::-;;;;;;;;;;-1:-1:-1;20273:347:0;;;;;:::i;:::-;;:::i;37287:394::-;;;;;;;;;;-1:-1:-1;37287:394:0;;;;;:::i;:::-;;:::i;28258:128::-;;;;;;;;;;-1:-1:-1;28258:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;28348:28:0;28322:4;28348:28;;;:19;:28;;;;;;;;;28258:128;39832:278;;;;;;;;;;-1:-1:-1;39832:278:0;;;;;:::i;:::-;;:::i;38033:354::-;;;;;;;;;;-1:-1:-1;38033:354:0;;;;;:::i;:::-;;:::i;39530:290::-;;;;;;;;;;-1:-1:-1;39530:290:0;;;;;:::i;:::-;;:::i;14432:31::-;;;;;;;;;;;;;;;;14830:76;;;;;;;;;;-1:-1:-1;14830:76:0;;;;-1:-1:-1;;;;;14830:76:0;;;15362:30;;;;;;;;;;-1:-1:-1;15362:30:0;;;;-1:-1:-1;;;15362:30:0;;;;;;17383:204;;;;;;;;;;-1:-1:-1;17383:204:0;;;;;:::i;:::-;;:::i;1101:154::-;;;;;;;;;;;;;:::i;14746:75::-;;;;;;;;;;-1:-1:-1;14746:75:0;;;;-1:-1:-1;;;;;14746:75:0;;;18884:124;;;;;;;;;;-1:-1:-1;18884:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;18978:20:0;18952:4;18978:20;;;:11;:20;;;;;;;;;18884:124;38967:266;;;;;;;;;;-1:-1:-1;38967:266:0;;;;;:::i;:::-;;:::i;869:83::-;;;;;;;;;;-1:-1:-1;907:7:0;936:6;-1:-1:-1;;;;;936:6:0;869:83;;17070:91;;;;;;;;;;;;;:::i;14149:25::-;;;;;;;;;;;;;;;;18641:231;;;;;;;;;;-1:-1:-1;18641:231:0;;;;;:::i;:::-;;:::i;17599:173::-;;;;;;;;;;-1:-1:-1;17599:173:0;;;;;:::i;:::-;;:::i;14330:30::-;;;;;;;;;;;;;;;;31456:247;;;;;;;;;;-1:-1:-1;31456:247:0;;;;;:::i;:::-;;:::i;19020:108::-;;;;;;;;;;-1:-1:-1;19108:10:0;;19020:108;;36892:383;;;;;;;;;;-1:-1:-1;36892:383:0;;;;;:::i;:::-;;:::i;17784:147::-;;;;;;;;;;-1:-1:-1;17784:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;17894:18:0;;;17865:7;17894:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17784:147;31719:149;;;;;;;;;;-1:-1:-1;31719:149:0;;;;;:::i;:::-;;:::i;15401:51::-;;;;;;;;;;;;;;;;36614:262;;;;;;;;;;-1:-1:-1;36614:262:0;;;;;:::i;:::-;;:::i;14537:32::-;;;;;;;;;;;;;;;;1267:252;;;;;;;;;;-1:-1:-1;1267:252:0;;;;;:::i;:::-;;:::i;21186:459::-;;;;;;;;;;-1:-1:-1;21186:459:0;;;;;:::i;:::-;;:::i;14240:26::-;;;;;;;;;;;;;;;;38399:262;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;;;;;;;;;38476:6:::1;:16:::0;;;38567:11:::1;::::0;38551:13:::1;::::0;38541:7:::1;::::0;38526:12:::1;::::0;38517:21:::1;::::0;38485:7;38517:21:::1;:::i;:::-;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:61;;;;:::i;:::-;38505:9;:73:::0;;;38612:2:::1;-1:-1:-1::0;38599:15:0::1;38591:60;;;::::0;-1:-1:-1;;;38591:60:0;;4828:2:1;38591:60:0::1;::::0;::::1;4810:21:1::0;;;4847:18;;;4840:30;4906:34;4886:18;;;4879:62;4958:18;;38591:60:0::1;4626:356:1::0;38591:60:0::1;38399:262:::0;:::o;16971:87::-;17008:13;17043:5;17036:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16971:87;:::o;17943:167::-;18018:4;18037:39;233:10;18060:7;18069:6;18037:8;:39::i;:::-;-1:-1:-1;18096:4:0;17943:167;;;;;:::o;37693:328::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;37795:10:::1;::::0;-1:-1:-1;;;;;37795:10:0;;::::1;37780:25:::0;;::::1;::::0;37772:73:::1;;;::::0;-1:-1:-1;;;37772:73:0;;5574:2:1;37772:73:0::1;::::0;::::1;5556:21:1::0;5613:2;5593:18;;;5586:30;5652:34;5632:18;;;5625:62;-1:-1:-1;;;5703:18:1;;;5696:33;5746:19;;37772:73:0::1;5372:399:1::0;37772:73:0::1;-1:-1:-1::0;;;;;21743:19:0;;;:23;37858:69:::1;;;::::0;-1:-1:-1;;;37858:69:0;;5978:2:1;37858:69:0::1;::::0;::::1;5960:21:1::0;;;5997:18;;;5990:30;6056:34;6036:18;;;6029:62;6108:18;;37858:69:0::1;5776:356:1::0;37858:69:0::1;37940:10;:24:::0;;-1:-1:-1;;;;;;37940:24:0::1;-1:-1:-1::0;;;;;37940:24:0;::::1;::::0;;::::1;::::0;;;37982:29:::1;::::0;345:51:1;;;37982:29:0::1;::::0;333:2:1;318:18;37982:29:0::1;;;;;;;;37693:328:::0;:::o;18122:274::-;18220:4;18239:36;18249:6;18257:9;18268:6;18239:9;:36::i;:::-;-1:-1:-1;;;;;18319:19:0;;;;;;:11;:19;;;;;;;;233:10;18319:33;;;;;;;;;18288:74;;18297:6;;18319:42;;18355:6;;18319:42;:::i;:::-;18288:8;:74::i;:::-;-1:-1:-1;18382:4:0;18122:274;;;;;:::o;20003:258::-;20069:7;20110;;20099;:18;;20091:73;;;;-1:-1:-1;;;20091:73:0;;6472:2:1;20091:73:0;;;6454:21:1;6511:2;6491:18;;;6484:30;6550:34;6530:18;;;6523:62;-1:-1:-1;;;6601:18:1;;;6594:40;6651:19;;20091:73:0;6270:406:1;20091:73:0;20177:19;20200:10;:8;:10::i;:::-;20177:33;-1:-1:-1;20230:21:0;20177:33;20230:7;:21;:::i;:::-;20223:28;20003:258;-1:-1:-1;;;20003:258:0:o;20632:501::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20716:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20708:60;;;::::0;-1:-1:-1;;;20708:60:0;;7105:2:1;20708:60:0::1;::::0;::::1;7087:21:1::0;7144:2;7124:18;;;7117:30;7183:29;7163:18;;;7156:57;7230:18;;20708:60:0::1;6903:351:1::0;20708:60:0::1;20786:9;20781:343;20805:9;:16:::0;20801:20;::::1;20781:343;;;20865:7;-1:-1:-1::0;;;;;20849:23:0::1;:9;20859:1;20849:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20849:12:0::1;:23:::0;20845:266:::1;;20910:9;20920:16:::0;;:20:::1;::::0;20939:1:::1;::::0;20920:20:::1;:::i;:::-;20910:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20895:9:::1;:12:::0;;-1:-1:-1;;;;;20910:31:0;;::::1;::::0;20905:1;;20895:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20895:46:0::1;-1:-1:-1::0;;;;;20895:46:0;;::::1;;::::0;;20962:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21003:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21003:28:0::1;::::0;;21052:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21052:15:0;;;;;-1:-1:-1;;;;;;21052:15:0::1;::::0;;;;;20781:343:::1;20632:501:::0;:::o;20845:266::-:1;20823:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20781:343;;;;20632:501:::0;:::o;18408:221::-;233:10;18496:4;18547:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18547:34:0;;;;;;;;;;18496:4;;18515:80;;18538:7;;18547:47;;18584:10;;18547:47;:::i;19140:383::-;233:10;19194:14;19245:19;;;:11;:19;;;;;;;;19244:20;19236:77;;;;-1:-1:-1;;;19236:77:0;;7865:2:1;19236:77:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:34;7923:18;;;7916:62;-1:-1:-1;;;7994:18:1;;;7987:42;8046:19;;19236:77:0;7663:408:1;19236:77:0;19327:15;19352:19;19363:7;19352:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19402:15:0;;;;;;:7;:15;;;;;;19326:45;;-1:-1:-1;19402:25:0;;19326:45;;-1:-1:-1;19402:15:0;-1:-1:-1;19402:25:0;:::i;:::-;-1:-1:-1;;;;;19384:15:0;;;;;;:7;:15;;;;;:43;19450:7;;:17;;19460:7;;19450:17;:::i;:::-;19440:7;:27;19493:10;;:20;;19506:7;;19493:20;:::i;:::-;19480:10;:33;-1:-1:-1;;;19140:383:0:o;19535:456::-;19625:7;19666;;19655;:18;;19647:62;;;;-1:-1:-1;;;19647:62:0;;8278:2:1;19647:62:0;;;8260:21:1;8317:2;8297:18;;;8290:30;8356:33;8336:18;;;8329:61;8407:18;;19647:62:0;8076:355:1;19647:62:0;19727:17;19722:260;;19764:15;19789:19;19800:7;19789:10;:19::i;:::-;-1:-1:-1;19763:45:0;;-1:-1:-1;19825:14:0;;-1:-1:-1;;;;;;19825:14:0;19722:260;19878:23;19910:19;19921:7;19910:10;:19::i;:::-;-1:-1:-1;19876:53:0;;-1:-1:-1;19946:22:0;;-1:-1:-1;;;;;;19946:22:0;38673:278;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;38757:12:::1;:25:::0;;;38857:11:::1;::::0;38841:13:::1;::::0;38831:7:::1;::::0;38807:6:::1;::::0;:21:::1;::::0;38772:10;;38807:21:::1;:::i;39245:273::-:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;39326:11:::1;:23:::0;;;39408:13:::1;::::0;39398:7:::1;::::0;39383:12:::1;::::0;39374:6:::1;::::0;39340:9;;39408:13;39398:7;39374:21:::1;::::0;::::1;:::i;20273:347::-:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20358:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20357:21;20349:61;;;::::0;-1:-1:-1;;;20349:61:0;;7105:2:1;20349:61:0::1;::::0;::::1;7087:21:1::0;7144:2;7124:18;;;7117:30;7183:29;7163:18;;;7156:57;7230:18;;20349:61:0::1;6903:351:1::0;20349:61:0::1;-1:-1:-1::0;;;;;20426:16:0;::::1;20445:1;20426:16:::0;;;:7:::1;:16;::::0;;;;;:20;20423:112:::1;;-1:-1:-1::0;;;;;20504:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20484:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20465:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20423:112:::1;-1:-1:-1::0;;;;;20547:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20547:27:0::1;20570:4;20547:27:::0;;::::1;::::0;;;20587:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20587:23:0::1;::::0;;::::1;::::0;;20273:347::o;37287:394::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;37407:16:::1;::::0;-1:-1:-1;;;;;37407:16:0;;::::1;37386:37:::0;;::::1;::::0;37378:91:::1;;;::::0;-1:-1:-1;;;37378:91:0;;8638:2:1;37378:91:0::1;::::0;::::1;8620:21:1::0;8677:2;8657:18;;;8650:30;8716:34;8696:18;;;8689:62;-1:-1:-1;;;8767:18:1;;;8760:39;8816:19;;37378:91:0::1;8436:405:1::0;37378:91:0::1;-1:-1:-1::0;;;;;21743:19:0;;;:23;37482:81:::1;;;::::0;-1:-1:-1;;;37482:81:0;;9048:2:1;37482:81:0::1;::::0;::::1;9030:21:1::0;9087:2;9067:18;;;9060:30;9126:34;9106:18;;;9099:62;-1:-1:-1;;;9177:18:1;;;9170:36;9223:19;;37482:81:0::1;8846:402:1::0;37482:81:0::1;37576:16;:36:::0;;-1:-1:-1;;;;;;37576:36:0::1;-1:-1:-1::0;;;;;37576:36:0;::::1;::::0;;::::1;::::0;;;37630:41:::1;::::0;345:51:1;;;37630:41:0::1;::::0;333:2:1;318:18;37630:41:0::1;199:203:1::0;39832:278:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;39969:6:::1;39933:42;;:32;;;;;;;;;;;:42;;::::0;39925:121:::1;;;::::0;-1:-1:-1;;;39925:121:0;;9455:2:1;39925:121:0::1;::::0;::::1;9437:21:1::0;9494:2;9474:18;;;9467:30;9533:34;9513:18;;;9506:62;9604:34;9584:18;;;9577:62;-1:-1:-1;;;9655:19:1;;;9648:33;9698:19;;39925:121:0::1;9253:470:1::0;39925:121:0::1;40059:32;:41:::0;;;::::1;;-1:-1:-1::0;;;40059:41:0::1;-1:-1:-1::0;;;;40059:41:0;;::::1;::::0;;;::::1;::::0;;39832:278::o;38033:354::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;38147:14:::1;::::0;-1:-1:-1;;;;;38147:14:0;;::::1;38128:33:::0;;::::1;::::0;38120:76:::1;;;::::0;-1:-1:-1;;;38120:76:0;;9930:2:1;38120:76:0::1;::::0;::::1;9912:21:1::0;9969:2;9949:18;;;9942:30;10008:32;9988:18;;;9981:60;10058:18;;38120:76:0::1;9728:354:1::0;38120:76:0::1;-1:-1:-1::0;;;;;21743:19:0;;;:23;38209:68:::1;;;::::0;-1:-1:-1;;;38209:68:0;;10289:2:1;38209:68:0::1;::::0;::::1;10271:21:1::0;10328:2;10308:18;;;10301:30;10367:29;10347:18;;;10340:57;10414:18;;38209:68:0::1;10087:351:1::0;38209:68:0::1;38290:14;:32:::0;;-1:-1:-1;;;;;;38290:32:0::1;-1:-1:-1::0;;;;;38290:32:0;::::1;::::0;;::::1;::::0;;;38340:37:::1;::::0;345:51:1;;;38340:37:0::1;::::0;333:2:1;318:18;38340:37:0::1;199:203:1::0;39530:290:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;39621:13:::1;:30:::0;;;39726:11:::1;::::0;39700:7:::1;::::0;39685:12:::1;::::0;39676:6:::1;::::0;39637:14;;39700:7;39676:21:::1;::::0;::::1;:::i;17383:204::-:0;-1:-1:-1;;;;;17475:20:0;;17449:7;17475:20;;;:11;:20;;;;;;;;17471:49;;;-1:-1:-1;;;;;;17504:16:0;;;;;:7;:16;;;;;;;17383:204::o;17471:49::-;-1:-1:-1;;;;;17560:16:0;;;;;;:7;:16;;;;;;17540:37;;:19;:37::i;1101:154::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;1210:1:::1;1194:6:::0;;1173:40:::1;::::0;-1:-1:-1;;;;;1194:6:0;;::::1;::::0;1173:40:::1;::::0;1210:1;;1173:40:::1;1243:1;1226:19:::0;;-1:-1:-1;;;;;;1226:19:0::1;::::0;;1101:154::o;38967:266::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;39046:7:::1;:18:::0;;;39139:11:::1;::::0;39123:13:::1;::::0;39098:12:::1;::::0;39089:6:::1;::::0;39056:8;;39089:21:::1;::::0;::::1;:::i;17070:91::-:0;17109:13;17144:7;17137:14;;;;;:::i;18641:231::-;233:10;18734:4;18785:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18785:34:0;;;;;;;;;;18734:4;;18753:85;;18776:7;;18785:52;;18822:15;;18785:52;:::i;17599:173::-;17677:4;17696:42;233:10;17720:9;17731:6;17696:9;:42::i;31456:247::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;31577:6:::1;31561:13;17354:7:::0;;;17272:99;31561:13:::1;:22;;;;:::i;:::-;31548:9;:35;;31540:110;;;::::0;-1:-1:-1;;;31540:110:0;;10645:2:1;31540:110:0::1;::::0;::::1;10627:21:1::0;10684:2;10664:18;;;10657:30;10723:34;10703:18;;;10696:62;10794:32;10774:18;;;10767:60;10844:19;;31540:110:0::1;10443:426:1::0;31540:110:0::1;31663:18;:30:::0;31456:247::o;36892:383::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;37009:15:::1;::::0;-1:-1:-1;;;;;37009:15:0;;::::1;36989:35:::0;;::::1;::::0;36981:88:::1;;;::::0;-1:-1:-1;;;36981:88:0;;11076:2:1;36981:88:0::1;::::0;::::1;11058:21:1::0;11115:2;11095:18;;;11088:30;11154:34;11134:18;;;11127:62;-1:-1:-1;;;11205:18:1;;;11198:38;11253:19;;36981:88:0::1;10874:404:1::0;36981:88:0::1;-1:-1:-1::0;;;;;21743:19:0;;;:23;37082:79:::1;;;::::0;-1:-1:-1;;;37082:79:0;;11485:2:1;37082:79:0::1;::::0;::::1;11467:21:1::0;11524:2;11504:18;;;11497:30;11563:34;11543:18;;;11536:62;-1:-1:-1;;;11614:18:1;;;11607:35;11659:19;;37082:79:0::1;11283:401:1::0;37082:79:0::1;37174:15;:34:::0;;-1:-1:-1;;;;;;37174:34:0::1;-1:-1:-1::0;;;;;37174:34:0;::::1;::::0;;::::1;::::0;;;37226:39:::1;::::0;345:51:1;;;37226:39:0::1;::::0;333:2:1;318:18;37226:39:0::1;199:203:1::0;31719:149:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;31790:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;31790:22:0::1;-1:-1:-1::0;;;;31790:22:0;;::::1;;::::0;;31830:28:::1;::::0;::::1;::::0;::::1;::::0;31804:8;1581:14:1;1574:22;1556:41;;1544:2;1529:18;;1416:187;36614:262:0;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36697:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;36696:29;36688:78;;;::::0;-1:-1:-1;;;36688:78:0;;11891:2:1;36688:78:0::1;::::0;::::1;11873:21:1::0;11930:2;11910:18;;;11903:30;11969:34;11949:18;;;11942:62;-1:-1:-1;;;12020:18:1;;;12013:34;12064:19;;36688:78:0::1;11689:400:1::0;36688:78:0::1;-1:-1:-1::0;;;;;36779:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;36779:35:0::1;36810:4;36779:35:::0;;::::1;::::0;;;36836:30;;1556:41:1;;;36836:30:0::1;::::0;1529:18:1;36836:30:0::1;;;;;;;36614:262:::0;:::o;1267:252::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1358:22:0;::::1;1350:73;;;::::0;-1:-1:-1;;;1350:73:0;;12296:2:1;1350:73:0::1;::::0;::::1;12278:21:1::0;12335:2;12315:18;;;12308:30;12374:34;12354:18;;;12347:62;-1:-1:-1;;;12425:18:1;;;12418:36;12471:19;;1350:73:0::1;12094:402:1::0;1350:73:0::1;1462:6;::::0;;1441:38:::1;::::0;-1:-1:-1;;;;;1441:38:0;;::::1;::::0;1462:6;::::1;::::0;1441:38:::1;::::0;::::1;1492:6;:17:::0;;-1:-1:-1;;;;;;1492:17:0::1;-1:-1:-1::0;;;;;1492:17:0;;;::::1;::::0;;;::::1;::::0;;1267:252::o;21186:459::-;1006:6;;-1:-1:-1;;;;;1006:6:0;233:10;1006:22;998:67;;;;-1:-1:-1;;;998:67:0;;;;;;;:::i;:::-;21284:4:::1;-1:-1:-1::0;;;;;21267:22:0;::::1;::::0;21259:67:::1;;;::::0;-1:-1:-1;;;21259:67:0;;12703:2:1;21259:67:0::1;::::0;::::1;12685:21:1::0;;;12722:18;;;12715:30;12781:34;12761:18;;;12754:62;12833:18;;21259:67:0::1;12501:356:1::0;21259:67:0::1;-1:-1:-1::0;;;;;21343:21:0;::::1;21339:132;;21383:51;::::0;21391:10:::1;::::0;21412:21:::1;21383:51:::0;::::1;;;::::0;::::1;::::0;;;21412:21;21391:10;21383:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;21339:132;21547:35;::::0;-1:-1:-1;;;21547:35:0;;21576:4:::1;21547:35;::::0;::::1;345:51:1::0;21510:5:0;;21483:17:::1;::::0;-1:-1:-1;;;;;21547:20:0;::::1;::::0;::::1;::::0;318:18:1;;21547:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21595:40;::::0;-1:-1:-1;;;21595:40:0;;21615:10:::1;21595:40;::::0;::::1;13225:51:1::0;13292:18;;;13285:34;;;21529:53:0;;-1:-1:-1;;;;;;21595:19:0;::::1;::::0;::::1;::::0;13198:18:1;;21595:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21246:399;;21186:459:::0;:::o;28398:349::-;-1:-1:-1;;;;;28493:19:0;;28485:68;;;;-1:-1:-1;;;28485:68:0;;13782:2:1;28485:68:0;;;13764:21:1;13821:2;13801:18;;;13794:30;13860:34;13840:18;;;13833:62;-1:-1:-1;;;13911:18:1;;;13904:34;13955:19;;28485:68:0;13580:400:1;28485:68:0;-1:-1:-1;;;;;28574:21:0;;28566:68;;;;-1:-1:-1;;;28566:68:0;;14187:2:1;28566:68:0;;;14169:21:1;14226:2;14206:18;;;14199:30;14265:34;14245:18;;;14238:62;-1:-1:-1;;;14316:18:1;;;14309:32;14358:19;;28566:68:0;13985:398:1;28566:68:0;-1:-1:-1;;;;;28651:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28705:32;;1754:25:1;;;28705:32:0;;1727:18:1;28705:32:0;;;;;;;28398:349;;;:::o;28759:2655::-;-1:-1:-1;;;;;28891:18:0;;28883:68;;;;-1:-1:-1;;;28883:68:0;;14590:2:1;28883:68:0;;;14572:21:1;14629:2;14609:18;;;14602:30;14668:34;14648:18;;;14641:62;-1:-1:-1;;;14719:18:1;;;14712:35;14764:19;;28883:68:0;14388:401:1;28883:68:0;28981:1;28972:6;:10;28964:64;;;;-1:-1:-1;;;28964:64:0;;14996:2:1;28964:64:0;;;14978:21:1;15035:2;15015:18;;;15008:30;15074:34;15054:18;;;15047:62;-1:-1:-1;;;15125:18:1;;;15118:39;15174:19;;28964:64:0;14794:405:1;28964:64:0;29045:28;29076:24;29094:4;29076:9;:24::i;:::-;29172:18;;29045:55;;-1:-1:-1;29148:42:0;;;;;;;29223:55;;-1:-1:-1;29262:16:0;;-1:-1:-1;;;29262:16:0;;;;29261:17;29223:55;:93;;;;-1:-1:-1;29303:13:0;;-1:-1:-1;;;;;29297:19:0;;;29303:13;;29297:19;29223:93;:123;;;;-1:-1:-1;29335:11:0;;-1:-1:-1;;;29335:11:0;;;;29223:123;29203:2155;;;29377:16;:23;;-1:-1:-1;;;;29377:23:0;-1:-1:-1;;;29377:23:0;;;29495:11;;29485:7;;29470:12;;29454:13;;29377:23;;29495:11;29485:7;29454:28;;;:::i;:::-;:38;;;;:::i;:::-;:52;;;;:::i;:::-;29433:73;-1:-1:-1;29526:14:0;;29523:1781;;29658:16;;;29672:1;29658:16;;;;;;;;29588:21;;29563:22;;29658:16;29672:1;29658:16;;;;;;;;;;-1:-1:-1;29658:16:0;29634:40;;29713:4;29695;29700:1;29695:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29695:23:0;;;:7;;;;;;;;;;:23;;;;29749:15;;:22;;;-1:-1:-1;;;29749:22:0;;;;:15;;;;;:20;;:22;;;;;29695:7;;29749:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29739:4;29744:1;29739:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29739:32:0;;;:7;;;;;;;;;:32;29796:15;;:273;;-1:-1:-1;;;29796:273:0;;:15;;;:66;;:273;;29887:20;;29796:15;;29986:4;;30023;;30053:15;;29796:273;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30094:18;30139:14;30115:21;:38;;;;:::i;:::-;30181:13;;30094:59;;-1:-1:-1;30181:17:0;30178:289;;30225:21;30278:10;30262:13;;30249:10;:26;;;;:::i;:::-;:39;;;;:::i;:::-;30329:16;;30225:63;;-1:-1:-1;30313:49:0;;-1:-1:-1;;;;;30329:16:0;30225:63;30313:7;:49::i;:::-;30392:29;;1754:25:1;;;30392:29:0;;1742:2:1;1727:18;30392:29:0;;;;;;;30200:267;30178:289;30510:12;;:16;30507:258;;30553:20;30604:10;30589:12;;30576:10;:25;;;;:::i;:::-;:38;;;;:::i;:::-;30655:15;;30553:61;;-1:-1:-1;30639:47:0;;-1:-1:-1;;;;;30655:15:0;30553:61;30639:7;:47::i;:::-;30716:27;;1754:25:1;;;30716:27:0;;1742:2:1;1727:18;30716:27:0;;;;;;;30528:237;30507:258;30792:7;;:11;30789:223;;30830:15;30871:10;30861:7;;30848:10;:20;;;;:::i;:::-;:33;;;;:::i;:::-;30922:10;;30830:51;;-1:-1:-1;30906:37:0;;-1:-1:-1;;;;;30922:10:0;30830:51;30906:7;:37::i;:::-;30973:17;;1754:25:1;;;30973:17:0;;1742:2:1;1727:18;30973:17:0;;;;;;;30805:207;30789:223;31039:11;;:15;31036:247;;31081:18;31129:10;31115:11;;31102:10;:24;;;;:::i;:::-;:37;;;;:::i;:::-;31180:14;;31081:58;;-1:-1:-1;31164:44:0;;-1:-1:-1;;;;;31180:14:0;31081:58;31164:7;:44::i;:::-;31238:23;;1754:25:1;;;31238:23:0;;1742:2:1;1727:18;31238:23:0;;;;;;;31056:227;31036:247;29542:1762;;;29523:1781;-1:-1:-1;31320:16:0;:24;;-1:-1:-1;;;;31320:24:0;;;29203:2155;31374:30;31389:4;31394:2;31397:6;31374:14;:30::i;:::-;28870:2544;;28759:2655;;;:::o;23761:166::-;23802:7;23825:15;23842;23861:19;:17;:19::i;:::-;23824:56;;-1:-1:-1;23824:56:0;-1:-1:-1;23900:17:0;23824:56;;23900:17;:::i;:::-;23893:24;;;;23761:166;:::o;22284:484::-;22343:7;22352;22361;22370;22379;22388;22397;22420:23;22445:12;22459:18;22479:19;22502:20;22514:7;22502:11;:20::i;:::-;22419:103;;;;;;;;22536:15;22553:23;22578:12;22594:64;22606:7;22615:4;22621:10;22633:11;22647:10;:8;:10::i;:::-;22594:11;:64::i;:::-;22535:123;;-1:-1:-1;22535:123:0;-1:-1:-1;22535:123:0;-1:-1:-1;22711:15:0;;-1:-1:-1;22728:4:0;;-1:-1:-1;22734:10:0;;-1:-1:-1;22746:11:0;-1:-1:-1;;;;22284:484:0;;;;;;;;;:::o;21788:325::-;21903:6;21878:21;:31;;21870:73;;;;-1:-1:-1;;;21870:73:0;;16952:2:1;21870:73:0;;;16934:21:1;16991:2;16971:18;;;16964:30;17030:31;17010:18;;;17003:59;17079:18;;21870:73:0;16750:353:1;21870:73:0;21961:12;21979:9;-1:-1:-1;;;;;21979:14:0;22001:6;21979:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21960:52;;;22033:7;22025:78;;;;-1:-1:-1;;;22025:78:0;;17520:2:1;22025:78:0;;;17502:21:1;17559:2;17539:18;;;17532:30;17598:34;17578:18;;;17571:62;17669:28;17649:18;;;17642:56;17715:19;;22025:78:0;17318:422:1;22025:78:0;21857:256;21788:325;;:::o;31920:1148::-;-1:-1:-1;;;;;32057:27:0;;32016:16;32057:27;;;:19;:27;;;;;;;;;:77;;-1:-1:-1;;;;;;32104:30:0;;;;;;:19;:30;;;;;;;;32057:77;:204;;;-1:-1:-1;32155:32:0;;-1:-1:-1;;;32155:32:0;;;;:75;;;;-1:-1:-1;32217:13:0;;-1:-1:-1;;;;;32207:23:0;;;32217:13;;32207:23;;32155:75;:105;;;;-1:-1:-1;32247:13:0;;-1:-1:-1;;;;;32234:26:0;;;32247:13;;32234:26;;32155:105;32053:302;;;32292:14;:12;:14::i;:::-;-1:-1:-1;32337:4:0;32053:302;-1:-1:-1;;;;;32371:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;32395:22:0;;;;;;:11;:22;;;;;;;;32394:23;32371:46;32367:617;;;32436:48;32458:6;32466:9;32477:6;32436:21;:48::i;:::-;32367:617;;;-1:-1:-1;;;;;32509:19:0;;;;;;:11;:19;;;;;;;;32508:20;:46;;;;-1:-1:-1;;;;;;32532:22:0;;;;;;:11;:22;;;;;;;;32508:46;32504:480;;;32573:46;32593:6;32601:9;32612:6;32573:19;:46::i;32504:480::-;-1:-1:-1;;;;;32644:19:0;;;;;;:11;:19;;;;;;;;32643:20;:47;;;;-1:-1:-1;;;;;;32668:22:0;;;;;;:11;:22;;;;;;;;32667:23;32643:47;32639:345;;;32709:44;32727:6;32735:9;32746:6;32709:17;:44::i;32639:345::-;-1:-1:-1;;;;;32777:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32800:22:0;;;;;;:11;:22;;;;;;;;32777:45;32773:211;;;32841:48;32863:6;32871:9;32882:6;32841:21;:48::i;32773:211::-;32926:44;32944:6;32952:9;32963:6;32926:17;:44::i;:::-;33000:11;32996:63;;;33030:15;28031;;28022:6;:24;28069:16;;28059:7;:26;28112:20;;28098:11;:34;28160:21;;28145:12;:36;28210:22;;28194:13;:38;27976:266;23939:572;24038:7;;24076;;23989;;;;;24102:291;24126:9;:16;24122:20;;24102:291;;;24194:7;24170;:21;24178:9;24188:1;24178:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24178:12:0;24170:21;;;;;;;;;;;;;:31;;:66;;;24229:7;24205;:21;24213:9;24223:1;24213:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24213:12:0;24205:21;;;;;;;;;;;;;:31;24170:66;24166:97;;;24246:7;;24255;;24238:25;;;;;;;23939:572;;:::o;24166:97::-;24300:7;:21;24308:9;24318:1;24308:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24308:12:0;24300:21;;;;;;;;;;;;;24290:31;;:7;:31;:::i;:::-;24280:41;;24358:7;:21;24366:9;24376:1;24366:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24366:12:0;24358:21;;;;;;;;;;;;;24348:31;;:7;:31;:::i;:::-;24338:41;-1:-1:-1;24144:3:0;;;;:::i;:::-;;;;24102:291;;;;24429:7;;24419;;:17;;;;:::i;:::-;24409:7;:27;24405:58;;;24446:7;;24455;;24438:25;;;;;;23939:572;;:::o;24405:58::-;24484:7;;24493;;-1:-1:-1;23939:572:0;-1:-1:-1;23939:572:0:o;22780:436::-;22840:7;22849;22858;22867;22889:12;22904:24;22920:7;22904:15;:24::i;:::-;22889:39;;22941:18;22962:30;22984:7;22962:21;:30::i;:::-;22941:51;;23005:19;23027:31;23050:7;23027:22;:31::i;:::-;23005:53;-1:-1:-1;23071:23:0;23005:53;23114:10;23097:14;23107:4;23097:7;:14;:::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;23071:67;23176:4;;-1:-1:-1;23182:10:0;;-1:-1:-1;23182:10:0;-1:-1:-1;22780:436:0;;-1:-1:-1;;;22780:436:0:o;23228:521::-;23364:7;;;;23422:21;23432:11;23422:7;:21;:::i;:::-;23404:39;-1:-1:-1;23456:12:0;23471:18;23478:11;23471:4;:18;:::i;:::-;23456:33;-1:-1:-1;23502:18:0;23523:24;23536:11;23523:10;:24;:::i;:::-;23502:45;-1:-1:-1;23560:19:0;23582:25;23596:11;23582;:25;:::i;:::-;23560:47;-1:-1:-1;23620:23:0;23560:47;23663:10;23646:14;23656:4;23646:7;:14;:::i;:::-;:27;;;;:::i;:::-;:41;;;;:::i;:::-;23708:7;;;;-1:-1:-1;23734:4:0;;-1:-1:-1;23228:521:0;;-1:-1:-1;;;;;;;;;23228:521:0:o;27435:525::-;27483:6;;:11;:27;;;;-1:-1:-1;27498:7:0;;:12;27483:27;:47;;;;-1:-1:-1;27514:11:0;;:16;27483:47;:68;;;;-1:-1:-1;27534:12:0;;:17;27483:68;:90;;;;-1:-1:-1;27555:13:0;;:18;27483:90;27480:102;;;27435:525::o;27480:102::-;27624:6;;;27606:15;:24;27662:7;;;27643:16;:26;27705:11;;;27682:20;:34;27753:12;;;27729:21;:36;27803:13;;;27778:22;:38;-1:-1:-1;27829:10:0;;;;27852:16;;;;27881:11;;;;27905:15;;;27933:17;27435:525::o;34768:857::-;34873:15;34890:23;34915:12;34929:23;34954:12;34968:18;34988:19;35011;35022:7;35011:10;:19::i;:::-;34872:158;;;;;;;;;;;;;;35080:60;35090:6;35098:15;35115;35132:7;35080:9;:60::i;:::-;35043:97;-1:-1:-1;35043:97:0;-1:-1:-1;35190:64:0;35204:6;35043:97;;35246:7;35190:13;:64::i;:::-;-1:-1:-1;;;;;35285:15:0;;;;;;:7;:15;;;;;;35153:101;;-1:-1:-1;35153:101:0;;-1:-1:-1;35285:25:0;;35303:7;;35285:25;:::i;:::-;-1:-1:-1;;;;;35267:15:0;;;;;;:7;:15;;;;;;;;:43;;;;35341:7;:15;;;;:25;;35359:7;;35341:25;:::i;:::-;-1:-1:-1;;;;;35323:15:0;;;;;;;:7;:15;;;;;;:43;;;;35400:18;;;;;;;:36;;35421:15;;35400:36;:::i;:::-;-1:-1:-1;;;;;35379:18:0;;;;;;:7;:18;;;;;:57;35450:26;35465:10;35450:14;:26::i;:::-;35489:28;35505:11;35489:15;:28::i;:::-;35530:23;35542:4;35548;35530:11;:23::i;:::-;35588:9;-1:-1:-1;;;;;35571:44:0;35580:6;-1:-1:-1;;;;;35571:44:0;;35599:15;35571:44;;;;1754:25:1;;1742:2;1727:18;;1608:177;35571:44:0;;;;;;;;34859:766;;;;;;;34768:857;;;:::o;33888:868::-;33991:15;34008:23;34033:12;34047:23;34072:12;34086:18;34106:19;34129;34140:7;34129:10;:19::i;:::-;33990:158;;;;;;;;;;;;;;34198:60;34208:6;34216:15;34233;34250:7;34198:9;:60::i;:::-;34161:97;-1:-1:-1;34161:97:0;-1:-1:-1;34308:64:0;34322:6;34161:97;;34364:7;34308:13;:64::i;:::-;-1:-1:-1;;;;;34403:15:0;;;;;;:7;:15;;;;;;34271:101;;-1:-1:-1;34271:101:0;;-1:-1:-1;34403:25:0;;34421:7;;34403:25;:::i;:::-;-1:-1:-1;;;;;34385:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;34462:18;;;;;:7;:18;;;;;:36;;34483:15;;34462:36;:::i;:::-;-1:-1:-1;;;;;34441:18:0;;;;;;:7;:18;;;;;;;;:57;;;;34532:7;:18;;;;:36;;34553:15;;34532:36;:::i;33080:796::-;33181:15;33198:23;33223:12;33237:23;33262:12;33276:18;33296:19;33319;33330:7;33319:10;:19::i;:::-;33180:158;;;;;;;;;;;;;;33388:60;33398:6;33406:15;33423;33440:7;33388:9;:60::i;:::-;33351:97;-1:-1:-1;33351:97:0;-1:-1:-1;33498:64:0;33512:6;33351:97;;33554:7;33498:13;:64::i;:::-;-1:-1:-1;;;;;33593:15:0;;;;;;:7;:15;;;;;;33461:101;;-1:-1:-1;33461:101:0;;-1:-1:-1;33593:25:0;;33611:7;;33593:25;:::i;35637:926::-;35742:15;35759:23;35784:12;35798:23;35823:12;35837:18;35857:19;35880;35891:7;35880:10;:19::i;:::-;35741:158;;;;;;;;;;;;;;35949:60;35959:6;35967:15;35984;36001:7;35949:9;:60::i;:::-;35912:97;-1:-1:-1;35912:97:0;-1:-1:-1;36059:64:0;36073:6;35912:97;;36115:7;36059:13;:64::i;:::-;-1:-1:-1;;;;;36154:15:0;;;;;;:7;:15;;;;;;36022:101;;-1:-1:-1;36022:101:0;;-1:-1:-1;36154:25:0;;36172:7;;36154:25;:::i;:::-;-1:-1:-1;;;;;36136:15:0;;;;;;:7;:15;;;;;;;;:43;;;;36210:7;:15;;;;:25;;36228:7;;36210:25;:::i;26707:125::-;26771:7;26819:3;26810:6;;26800:7;:16;;;;:::i;:::-;:22;;;;:::i;27130:137::-;27200:7;27254:3;27239:12;;27229:7;:22;;;;:::i;27279:140::-;27350:7;27406:3;27389:13;;27379:7;:23;;;;:::i;24527:620::-;24646:7;24655;24680;;24689:1;24680:10;24677:75;;-1:-1:-1;24716:15:0;;-1:-1:-1;24733:15:0;24709:40;;24677:75;24764:13;24780:25;24797:7;24780:16;:25::i;:::-;24764:41;;24818:13;24842:10;:8;:10::i;:::-;24834:18;;:5;:18;:::i;:::-;24818:34;-1:-1:-1;24883:23:0;24818:34;24883:15;:23;:::i;:::-;24865:41;-1:-1:-1;24937:23:0;24955:5;24937:15;:23;:::i;:::-;25014:4;24998:22;;;;:7;:22;;;;;;24919:41;;-1:-1:-1;24998:30:0;;25023:5;;24998:30;:::i;:::-;24989:4;24973:22;;;;:7;:22;;;;;;;:55;;;;25046:38;;-1:-1:-1;;;;;25046:38:0;;;;;;;25078:5;1754:25:1;;1742:2;1727:18;;1608:177;25046:38:0;;;;;;;;25104:15;25121;25097:40;;;;;;24527:620;;;;;;;;:::o;25159:653::-;25282:7;25291;25316:11;;25329:1;25316:14;25313:79;;-1:-1:-1;25356:15:0;;-1:-1:-1;25373:15:0;25349:40;;25313:79;25404:16;25423:29;25444:7;25423:20;:29::i;25824:424::-;25893:14;;25889:350;;25926:19;25949:10;:8;:10::i;:::-;25926:33;-1:-1:-1;25976:18:0;25997:24;25926:33;25997:10;:24;:::i;:::-;26079:4;26063:22;;;;:7;:22;;;;;;25976:45;;-1:-1:-1;26063:35:0;;25976:45;;26063:35;:::i;:::-;26054:4;26038:22;;;;:7;:22;;;;;;;;:60;;;;26118:11;:26;;;;;;26115:110;;;26206:4;26190:22;;;;:7;:22;;;;;;:35;;26215:10;;26190:35;:::i;:::-;26181:4;26165:22;;;;:7;:22;;;;;:60;25909:330;;25824:424;:::o;22125:147::-;22215:4;22205:7;;:14;;;;:::i;:::-;22195:7;:24;22245:10;;:17;;22258:4;;22245:17;:::i;:::-;22232:10;:30;-1:-1:-1;;22125:147:0:o;26844:127::-;26909:7;26958:3;26948:7;;26938;:17;;;;:::i;26983:135::-;27052:7;27105:3;27091:11;;27081:7;:21;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:315;1164:6;1172;1225:2;1213:9;1204:7;1200:23;1196:32;1193:52;;;1241:1;1238;1231:12;1193:52;1280:9;1267:23;1299:31;1324:5;1299:31;:::i;:::-;1349:5;1401:2;1386:18;;;;1373:32;;-1:-1:-1;;;1096:315:1:o;2025:247::-;2084:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:52;;;2153:1;2150;2143:12;2105:52;2192:9;2179:23;2211:31;2236:5;2211:31;:::i;2277:456::-;2354:6;2362;2370;2423:2;2411:9;2402:7;2398:23;2394:32;2391:52;;;2439:1;2436;2429:12;2391:52;2478:9;2465:23;2497:31;2522:5;2497:31;:::i;:::-;2547:5;-1:-1:-1;2604:2:1;2589:18;;2576:32;2617:33;2576:32;2617:33;:::i;:::-;2277:456;;2669:7;;-1:-1:-1;;;2723:2:1;2708:18;;;;2695:32;;2277:456::o;2927:118::-;3013:5;3006:13;2999:21;2992:5;2989:32;2979:60;;3035:1;3032;3025:12;3050:309;3115:6;3123;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3228:9;3215:23;3205:33;;3288:2;3277:9;3273:18;3260:32;3301:28;3323:5;3301:28;:::i;:::-;3348:5;3338:15;;;3050:309;;;;;:::o;3364:241::-;3420:6;3473:2;3461:9;3452:7;3448:23;3444:32;3441:52;;;3489:1;3486;3479:12;3441:52;3528:9;3515:23;3547:28;3569:5;3547:28;:::i;3610:388::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3794:9;3781:23;3813:31;3838:5;3813:31;:::i;:::-;3863:5;-1:-1:-1;3920:2:1;3905:18;;3892:32;3933:33;3892:32;3933:33;:::i;4003:356::-;4205:2;4187:21;;;4224:18;;;4217:30;4283:34;4278:2;4263:18;;4256:62;4350:2;4335:18;;4003:356::o;4364:127::-;4425:10;4420:3;4416:20;4413:1;4406:31;4456:4;4453:1;4446:15;4480:4;4477:1;4470:15;4496:125;4561:9;;;4582:10;;;4579:36;;;4595:18;;:::i;4987:380::-;5066:1;5062:12;;;;5109;;;5130:61;;5184:4;5176:6;5172:17;5162:27;;5130:61;5237:2;5229:6;5226:14;5206:18;5203:38;5200:161;;5283:10;5278:3;5274:20;5271:1;5264:31;5318:4;5315:1;5308:15;5346:4;5343:1;5336:15;5200:161;;4987:380;;;:::o;6137:128::-;6204:9;;;6225:11;;;6222:37;;;6239:18;;:::i;6681:217::-;6721:1;6747;6737:132;;6791:10;6786:3;6782:20;6779:1;6772:31;6826:4;6823:1;6816:15;6854:4;6851:1;6844:15;6737:132;-1:-1:-1;6883:9:1;;6681:217::o;7259:127::-;7320:10;7315:3;7311:20;7308:1;7301:31;7351:4;7348:1;7341:15;7375:4;7372:1;7365:15;7391:127;7452:10;7447:3;7443:20;7440:1;7433:31;7483:4;7480:1;7473:15;7507:4;7504:1;7497:15;7523:135;7562:3;7583:17;;;7580:43;;7603:18;;:::i;:::-;-1:-1:-1;7650:1:1;7639:13;;7523:135::o;12862:184::-;12932:6;12985:2;12973:9;12964:7;12960:23;12956:32;12953:52;;;13001:1;12998;12991:12;12953:52;-1:-1:-1;13024:16:1;;12862:184;-1:-1:-1;12862:184:1:o;13330:245::-;13397:6;13450:2;13438:9;13429:7;13425:23;13421:32;13418:52;;;13466:1;13463;13456:12;13418:52;13498:9;13492:16;13517:28;13539:5;13517:28;:::i;15336:251::-;15406:6;15459:2;15447:9;15438:7;15434:23;15430:32;15427:52;;;15475:1;15472;15465:12;15427:52;15507:9;15501:16;15526:31;15551:5;15526:31;:::i;15592:980::-;15854:4;15902:3;15891:9;15887:19;15933:6;15922:9;15915:25;15959:2;15997:6;15992:2;15981:9;15977:18;15970:34;16040:3;16035:2;16024:9;16020:18;16013:31;16064:6;16099;16093:13;16130:6;16122;16115:22;16168:3;16157:9;16153:19;16146:26;;16207:2;16199:6;16195:15;16181:29;;16228:1;16238:195;16252:6;16249:1;16246:13;16238:195;;;16317:13;;-1:-1:-1;;;;;16313:39:1;16301:52;;16408:15;;;;16373:12;;;;16349:1;16267:9;16238:195;;;-1:-1:-1;;;;;;;16489:32:1;;;;16484:2;16469:18;;16462:60;-1:-1:-1;;;16553:3:1;16538:19;16531:35;16450:3;15592:980;-1:-1:-1;;;15592:980:1:o;16577:168::-;16617:7;16683:1;16679;16675:6;16671:14;16668:1;16665:21;16660:1;16653:9;16646:17;16642:45;16639:71;;;16690:18;;:::i;:::-;-1:-1:-1;16730:9:1;;16577:168::o
Swarm Source
ipfs://f40d72a0290ac7919c6b7dac422dd91227f29644448bc586bd2f427e398cd8d3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.