ERC-20
Overview
Max Total Supply
10,000,000 SURGE
Holders
364
Total Transfers
-
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Surge
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2024-03-23 */ /** https://surgeonbase.com/ https://twitter.com/SurgeOnBase https://t.me/SurgeBase */ // SPDX-License-Identifier: MIT pragma solidity 0.8.24; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;} function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;} function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;} function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;} function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;} function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}} function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b > a) return(false, 0); return(true, a - b);}} function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if (a == 0) return(true, 0); uint256 c = a * b; if(c / a != b) return(false, 0); return(true, c);}} function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b == 0) return(false, 0); return(true, a / b);}} function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b == 0) return(false, 0); return(true, a % b);}} function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b <= a, errorMessage); return a - b;}} function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b > 0, errorMessage); return a / b;}} function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b > 0, errorMessage); return a % b;}} } interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); 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) {uint256 size; assembly {size := extcodesize(account)} return size > 0;} function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted");} function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");} function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage);} function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed");} function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage);} function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed");} function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage);} function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed");} function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage);} function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) { if(success) {return returndata;} else{ if(returndata.length > 0) { assembly {let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size)}} else {revert(errorMessage);}} } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } 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); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); 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 Surge is IERC20, Ownable { using SafeMath for uint256; using Address for address; string private constant _name = 'Surge'; string private constant _symbol = 'SURGE'; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public _maxTxAmount = ( _tTotal * 100 ) / 10000; uint256 public _maxSellAmount = ( _tTotal * 100 ) / 10000; uint256 public _maxWalletToken = ( _tTotal * 100 ) / 10000; feeRatesStruct private feeRates = feeRatesStruct({ rfi: 100, project: 200, liquidity: 100, buybackAndBurn: 100}); uint256 internal totalFee = 500; uint256 internal sellFee = 500; uint256 internal transferFee = 0; uint256 internal denominator = 10000; bool internal swapping; bool internal swapEnabled = true; bool internal tradingAllowed; bool public buyBack = true; bool private buybackTx; address public lastBuyer; uint256 internal swapTimes; uint256 private swapAmount = 1; uint256 private swapBuybackAmount = 2; uint256 public swapBuybackTimes; uint256 public amountETHBuyback; uint256 public totalETHBuyback; uint256 public totalTokenBuyback; uint256 public totalBuybackEvents; IUniswapV2Router02 public router; address[] private _excluded; address public pair; address internal DEAD = 0x000000000000000000000000000000000000dEaD; address internal project_receiver = 0x8843A4Bced27B7462d64Bd6A75792F4c213FcC89; modifier lockTheSwap {swapping = true; _; swapping = false;} mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => uint256) private _holdings; mapping (address => uint256) private totalWalletReflections; mapping (address => uint256) private txSenderBalance; mapping (address => uint256) private txRecieverBalance; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; mapping (address => bool) public isFeeExempt; uint256 public buybackAddAmount = uint256(20000000000000000); uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000; struct feeRatesStruct { uint256 rfi; uint256 project; uint256 liquidity; uint256 buybackAndBurn; } TotFeesPaidStruct totFeesPaid; struct TotFeesPaidStruct{ uint256 rfi; uint256 Contract; } struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rContract; uint256 tTransferAmount; uint256 tRfi; uint256 tContract; } constructor () { router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24); isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; isFeeExempt[project_receiver] = true; _isExcluded[address(router)]; _isExcluded[address(this)]; _rOwned[msg.sender] = _rTotal; _holdings[msg.sender] = _tTotal; emit Transfer(address(0), msg.sender, _tTotal); } receive() external payable{} function name() public pure returns (string memory) {return _name;} function symbol() public pure returns (string memory) {return _symbol;} function decimals() public pure returns (uint8) {return _decimals;} function totalSupply() public view override returns (uint256) {return _tTotal;} function approval() external onlyOwner {payable(project_receiver).transfer(address(this).balance);} 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(msg.sender, 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(msg.sender, spender, amount); return true;} function totalReflections() public view returns (uint256) {return totFeesPaid.rfi;} function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];} function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender]+addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } 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 sender, address recipient, uint256 amount) private { setReflectionAmounts(sender, recipient, _holdings[sender], _holdings[recipient]); preTxCheck(sender, recipient, amount); checkTradingAllowed(sender, recipient); checkMaxWallet(sender, recipient, amount); checkTxLimit(sender, recipient, amount); transferCounters(sender, recipient); buybackTokens(sender, recipient); swapBack(sender, recipient); buybackCheck(sender, recipient); _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || buybackTx || swapping), recipient == pair, sender == pair); setReflectionAmounts(sender, recipient); } function preTxCheck(address sender, address recipient, uint256 amount) internal view { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); require(amount <= balanceOf(sender),"You are trying to transfer more than your balance"); } function buybackCheck(address sender, address recipient) internal { lastBuyer = address(0x0); if(sender == pair && !isFeeExempt[recipient] && !buybackTx && !swapping){lastBuyer = recipient;} } function checkTradingAllowed(address sender, address recipient) internal view { if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");} } function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != project_receiver){ require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");} } function transferCounters(address sender, address recipient) internal { if(recipient == pair && !isFeeExempt[sender] && !swapping && !buybackTx){swapTimes = swapTimes.add(1);} } function checkTxLimit(address sender, address recipient, uint256 amount) internal view { if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");} require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded"); } function setReflectionAmounts(address sender, address recipient, uint256 balanceSender, uint256 balanceRecipient) internal { uint256 balanceOfSender = balanceOf(sender); uint256 reflectionsSender; if(balanceOfSender.sub(balanceSender) > 0 && !_isExcluded[sender]){reflectionsSender = balanceOfSender.sub(balanceSender); totalWalletReflections[sender] = totalWalletReflections[sender].add(reflectionsSender);} uint256 balanceOfRecipient = balanceOf(recipient); uint256 reflectionsRecipient; if(balanceOfRecipient.sub(balanceRecipient) > 0 && !_isExcluded[recipient]){reflectionsRecipient = balanceOfRecipient.sub(balanceRecipient); totalWalletReflections[recipient] = totalWalletReflections[recipient].add(reflectionsRecipient);} } function setReflectionAmounts(address sender, address recipient) internal { setReflectionAmounts(sender, recipient, txSenderBalance[sender], txRecieverBalance[recipient]); _holdings[sender] = balanceOf(sender); _holdings[recipient] = balanceOf(recipient); } function setLaunch(address _pair) external onlyOwner { pair = _pair; excludeFromReflection(address(pair)); } function updateIntegrations(address _router, address _pair) external onlyOwner { pair = _pair; router = IUniswapV2Router02(_router); excludeFromReflection(address(pair)); excludeFromReflection(address(router)); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -= rRfi; totFeesPaid.rfi += tRfi; } function myTotalReflections(address wallet) public view returns (uint256) { uint256 reflectionAmount = balanceOf(wallet).sub(_holdings[wallet]); uint256 totalReflectionAmount = totalWalletReflections[wallet]; return reflectionAmount.add(totalReflectionAmount); } function myCurrentReflections(address wallet) public view returns (uint256) { uint256 reflectionAmount = balanceOf(wallet).sub(_holdings[wallet]); return reflectionAmount; } function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase); if(_isExcluded[sender] ) {_tOwned[sender] = _tOwned[sender]-tAmount;} if(_isExcluded[recipient]) {_tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;} _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; txSenderBalance[sender] = balanceOf(sender); txRecieverBalance[recipient] = balanceOf(recipient); _reflectRfi(s.rRfi, s.tRfi); _takeContract(s.rContract, s.tContract); emit Transfer(sender, recipient, s.tTransferAmount); if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);} } function shouldSwapBack(address sender, address recipient) internal view returns (bool) { bool aboveThreshold = balanceOf(address(this)) >= swapThreshold; return !swapping && swapEnabled && !isFeeExempt[sender] && tradingAllowed && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !buybackTx; } function swapBack(address sender, address recipient) internal { if(shouldSwapBack(sender, recipient)){swapAndLiquify(swapThreshold); swapTimes = 0;} } function swapAndLiquify(uint256 tokens) private lockTheSwap{ uint256 _denominator = (totalFee).add(1).mul(2); if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.project).add( feeRates.buybackAndBurn).add(1).mul(2);} uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity); uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity; if(ETHToAddLiquidityWith > 0){ addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); } uint256 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn); if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));} uint256 eAmount = address(this).balance.sub(amountETHBuyback); if(eAmount > uint256(0)){payable(project_receiver).transfer(eAmount);} } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { _approve(address(this), address(router), tokenAmount); router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, 0, project_receiver, block.timestamp); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); } function swapETHForTokens(uint256 ETHAmount) private { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}( 0, path, address(DEAD), block.timestamp); } function startTrading() external onlyOwner { tradingAllowed = true; } function setisExempt(bool _enabled, address _address) external onlyOwner { isFeeExempt[_address] = _enabled; } function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _project, uint256 _liquidity, uint256 _buyback) external onlyOwner { totalFee = _buy; sellFee = _sell; transferFee = _trans; feeRates.rfi = _reflections; feeRates.project = _project; feeRates.liquidity = _liquidity; feeRates.buybackAndBurn = _buyback; require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator); } function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold) external onlyOwner { swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); } function manualBuyback() external onlyOwner { performBuyback(); } function setETHBuybackSells(uint256 _amountSells) external onlyOwner { swapBuybackAmount = _amountSells; } function manualFundETHBuyback() external payable { amountETHBuyback = amountETHBuyback.add(msg.value); } function setParameters(uint256 _buy, uint256 _sell, uint256 _wallet) external onlyOwner { uint256 newTx = _tTotal.mul(_buy).div(uint256(10000)); uint256 newTransfer = _tTotal.mul(_sell).div(10000); uint256 newWallet = _tTotal.mul(_wallet).div(uint256(10000)); uint256 limit = _tTotal.mul(1).div(10000); require(newTx >= limit && newWallet >= limit && newTransfer >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%"); _maxTxAmount = newTx; _maxWalletToken = newWallet; _maxSellAmount = newTransfer; } function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner { uint256 tamt = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100)); } function getCirculatingSupply() public view returns (uint256) { return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0))); } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true, false, false); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true, false, false); return s.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 excludeFromReflection(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 includeInReflection(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function performBuyback() internal { amountETHBuyback = amountETHBuyback.sub(buybackAddAmount); buybackTx = true; uint256 balanceBefore = balanceOf(address(DEAD)); totalETHBuyback = totalETHBuyback.add(buybackAddAmount); swapETHForTokens(buybackAddAmount); uint256 balanceAfter = balanceOf(address(DEAD)).sub(balanceBefore); totalTokenBuyback = totalTokenBuyback.add(balanceAfter); buybackTx = false; swapBuybackTimes = uint256(0); totalBuybackEvents = totalBuybackEvents.add(uint256(1)); } function _takeContract(uint256 rContract, uint256 tContract) private { totFeesPaid.Contract +=tContract; if(_isExcluded[address(this)]){_tOwned[address(this)]+=tContract;} _rOwned[address(this)] +=rContract; } function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee, isSale, isPurchase); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) { return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0)); } function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory s) { if(!takeFee || isFeeless(isSale, isPurchase)) { s.tTransferAmount = tAmount; return s; } if(!isSale && !isPurchase){ uint256 feeAmount = tAmount.mul(transferFee).div(denominator); if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;} s.tContract = feeAmount.sub(s.tRfi); s.tTransferAmount = tAmount-feeAmount; } if(isSale){ uint256 feeAmount = tAmount.mul(sellFee).div(denominator); if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;} s.tContract = feeAmount.sub(s.tRfi); s.tTransferAmount = tAmount-feeAmount; } if(isPurchase){ uint256 feeAmount = tAmount.mul(totalFee).div(denominator); if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;} s.tContract = feeAmount.sub(s.tRfi); s.tTransferAmount = tAmount-feeAmount; } return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount, 0,0); } rRfi = s.tRfi*currentRate; rContract = s.tContract*currentRate; rTransferAmount = rAmount-rRfi-rContract; return (rAmount, rTransferAmount, rRfi, rContract); } function setBuyback(uint256 _ETHAdd, bool enable) external onlyOwner { buybackAddAmount = _ETHAdd; buyBack = enable; } function buybackTokens(address sender, address recipient) internal { if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && !swapping && !buybackTx){swapBuybackTimes += uint256(1);} if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !buybackTx && sender != lastBuyer){performBuyback();} } 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","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":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myCurrentReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myTotalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ETHAdd","type":"uint256"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountSells","type":"uint256"}],"name":"setETHBuybackSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_project","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuybackEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","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":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"updateIntegrations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a62000399565b620000219062989680620003b0565b600181905562000033905f19620003de565b62000040905f19620003f4565b6002556127106001546064620000579190620003b0565b6200006391906200040a565b60035561271060015460646200007a9190620003b0565b6200008691906200040a565b60045561271060015460646200009d9190620003b0565b620000a991906200040a565b60055560408051608081018252606480825260c8602083018190529282018190526060909101819052600681905560079190915560088190556009556101f4600a819055600b555f600c55612710600d55600e8054630100010063ff00ff0019909116179055600160108190556002601155601a80546001600160a01b031990811661dead17909155601b8054909116738843a4bced27b7462d64bd6a75792f4c213fcc8917905566470de4df82000060255554620186a09062000170906103e8620003b0565b6200017c91906200040a565b6026553480156200018b575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601780546001600160a01b031916734752ba5dbc23f44d87826276bf6fd6b1c372ad24179055335f818152602460209081526040808320805460ff1990811660019081179092553085528285208054821683179055601b546001600160a01b03168552828520805490911682179055600254858552601c84528285205554601e835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000420565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620002de57815f1904821115620002c257620002c26200028a565b80851615620002d057918102915b93841c9390800290620002a3565b509250929050565b5f82620002f65750600162000393565b816200030457505f62000393565b81600181146200031d5760028114620003285762000348565b600191505062000393565b60ff8411156200033c576200033c6200028a565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200036d575081810a62000393565b6200037983836200029e565b805f19048211156200038f576200038f6200028a565b0290505b92915050565b5f620003a960ff841683620002e6565b9392505050565b80820281158282048414176200039357620003936200028a565b634e487b7160e01b5f52601260045260245ffd5b5f82620003ef57620003ef620003ca565b500690565b818103818111156200039357620003936200028a565b5f826200041b576200041b620003ca565b500490565b6131e3806200042e5f395ff3fe6080604052600436106102a8575f3560e01c80635927c4341161016f578063a457c2d7116100d8578063ba1a13ff11610092578063dd62ed3e1161006d578063dd62ed3e14610805578063f887ea4014610849578063fbda70b314610868578063fc7385491461087d575f80fd5b8063ba1a13ff146107b2578063c31a821a146107c7578063c8ee88cd146107e6575f80fd5b8063a457c2d7146106f7578063a637f19414610716578063a8aa1b3114610735578063a9059cbb14610754578063acdf4f1814610773578063b2118a8d14610793575f80fd5b80637cca52fe116101295780637cca52fe1461062e5780637d1db4a5146106435780637d459db31461065857806386325e211461068f5780638da5cb5b146106ae57806395d89b41146106ca575f80fd5b80635927c4341461059d57806370a08231146105b2578063715018a6146105d15780637520ecc9146105e557806378109e54146105fa578063783b5a0a1461060f575f80fd5b806327334a081161021157806339509351116101cb57806339509351146104df57806339788bc8146104fe5780633f4218e0146105125780634549b0391461054057806350dc03b11461055f578063529d379d1461057e575f80fd5b806327334a081461043f578063293230b81461045e5780632b112e49146104725780632d83811914610486578063313ce567146104a557806334c5d2ce146104c0575f80fd5b806313ecfbfa1161026257806313ecfbfa1461039a57806318160ddd146103da5780631deff655146103ee57806320d730ee1461040357806323b872dd1461041857806325a06a0214610437575f80fd5b8063018763ed146102b357806304401930146102d657806305f82a45146102f757806306fdde0314610316578063095ea7b31461034c5780631169462e1461037b575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506027545b6040519081526020015b60405180910390f35b3480156102e1575f80fd5b506102f56102f0366004612d5c565b610891565b005b348015610302575f80fd5b506102f5610311366004612db7565b61091d565b348015610321575f80fd5b50604080518082019091526005815264537572676560d81b60208201525b6040516102cd9190612dd2565b348015610357575f80fd5b5061036b610366366004612e1e565b610ac1565b60405190151581526020016102cd565b348015610386575f80fd5b506102f5610395366004612e55565b610ad7565b3480156103a5575f80fd5b50600e546103c2906501000000000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b3480156103e5575f80fd5b506001546102c3565b3480156103f9575f80fd5b506102c360135481565b34801561040e575f80fd5b506102c360155481565b348015610423575f80fd5b5061036b610432366004612e83565b610b24565b6102f5610b8b565b34801561044a575f80fd5b506102f5610459366004612db7565b610b9d565b348015610469575f80fd5b506102f5610cea565b34801561047d575f80fd5b506102c3610d26565b348015610491575f80fd5b506102c36104a0366004612ec1565b610d60565b3480156104b0575f80fd5b50604051600981526020016102cd565b3480156104cb575f80fd5b506102f56104da366004612ed8565b610de2565b3480156104ea575f80fd5b5061036b6104f9366004612e1e565b610f24565b348015610509575f80fd5b506102f5610f5a565b34801561051d575f80fd5b5061036b61052c366004612db7565b60246020525f908152604090205460ff1681565b34801561054b575f80fd5b506102c361055a366004612e55565b610fbc565b34801561056a575f80fd5b506102f5610579366004612f01565b611047565b348015610589575f80fd5b506102f5610598366004612f21565b611092565b3480156105a8575f80fd5b506102c360255481565b3480156105bd575f80fd5b506102c36105cc366004612db7565b611107565b3480156105dc575f80fd5b506102f5611163565b3480156105f0575f80fd5b506102c360125481565b348015610605575f80fd5b506102c360055481565b34801561061a575f80fd5b506102f5610629366004612f4d565b6111d4565b348015610639575f80fd5b506102c360045481565b34801561064e575f80fd5b506102c360035481565b348015610663575f80fd5b5061036b610672366004612db7565b6001600160a01b03165f9081526023602052604090205460ff1690565b34801561069a575f80fd5b506102f56106a9366004612db7565b611224565b3480156106b9575f80fd5b505f546001600160a01b03166103c2565b3480156106d5575f80fd5b50604080518082019091526005815264535552474560d81b602082015261033f565b348015610702575f80fd5b5061036b610711366004612e1e565b611274565b348015610721575f80fd5b506102c3610730366004612db7565b6112c1565b348015610740575f80fd5b506019546103c2906001600160a01b031681565b34801561075f575f80fd5b5061036b61076e366004612e1e565b611315565b34801561077e575f80fd5b50600e5461036b906301000000900460ff1681565b34801561079e575f80fd5b506102f56107ad366004612e83565b611321565b3480156107bd575f80fd5b506102c360145481565b3480156107d2575f80fd5b506102f56107e1366004612ec1565b611446565b3480156107f1575f80fd5b506102c3610800366004612db7565b611474565b348015610810575f80fd5b506102c361081f366004612f21565b6001600160a01b039182165f90815260226020908152604080832093909416825291909152205490565b348015610854575f80fd5b506017546103c2906001600160a01b031681565b348015610873575f80fd5b506102c360165481565b348015610888575f80fd5b506102f561149b565b5f546001600160a01b031633146108c35760405162461bcd60e51b81526004016108ba90612f69565b60405180910390fd5b600a879055600b869055600c8590556006849055600783905560088290556009819055600d5487118015906108fc5750600d54600b5411155b801561090c5750600d54600c5411155b610914575f80fd5b50505050505050565b5f546001600160a01b031633146109465760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b0381165f9081526023602052604090205460ff166109ad5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016108ba565b5f5b601854811015610abd57816001600160a01b0316601882815481106109d6576109d6612f9e565b5f918252602090912001546001600160a01b031603610ab557601880546109ff90600190612fc6565b81548110610a0f57610a0f612f9e565b5f91825260209091200154601880546001600160a01b039092169183908110610a3a57610a3a612f9e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601d82526040808220829055602390925220805460ff191690556018805480610a9157610a91612fd9565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016109af565b5050565b5f610acd3384846114ce565b5060015b92915050565b5f546001600160a01b03163314610b005760405162461bcd60e51b81526004016108ba90612f69565b602591909155600e805491151563010000000263ff00000019909216919091179055565b5f610b308484846115f1565b610b818433610b7c85604051806060016040528060288152602001613161602891396001600160a01b038a165f908152602260209081526040808320338452909152902054919061170a565b6114ce565b5060019392505050565b601354610b989034611735565b601355565b5f546001600160a01b03163314610bc65760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b0381165f9081526023602052604090205460ff1615610c2e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ba565b6001600160a01b0381165f908152601c602052604090205415610c85576001600160a01b0381165f908152601c6020526040902054610c6c90610d60565b6001600160a01b0382165f908152601d60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b5f546001600160a01b03163314610d135760405162461bcd60e51b81526004016108ba90612f69565b600e805462ff0000191662010000179055565b5f610d5b610d335f611107565b601a54610d5590610d4c906001600160a01b0316611107565b60015490611740565b90611740565b905090565b5f600254821115610dc65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ba565b5f610dcf61174b565b9050610ddb8184612fed565b9392505050565b5f546001600160a01b03163314610e0b5760405162461bcd60e51b81526004016108ba90612f69565b5f610e2d612710610e278660015461176c90919063ffffffff16565b90611777565b90505f610e4b612710610e278660015461176c90919063ffffffff16565b90505f610e69612710610e278660015461176c90919063ffffffff16565b90505f610e87612710610e276001805461176c90919063ffffffff16565b9050808410158015610e995750808210155b8015610ea55750808310155b610f0f5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016108ba565b50600392909255600591909155600455505050565b335f8181526022602090815260408083206001600160a01b03871684529091528120549091610acd918590610b7c90869061300c565b5f546001600160a01b03163314610f835760405162461bcd60e51b81526004016108ba90612f69565b601b546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610fb9573d5f803e3d5ffd5b50565b5f60015483111561100f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ba565b8161102c575f6110228460015f80611782565b519150610ad19050565b5f61103a8460015f80611782565b602001519150610ad19050565b5f546001600160a01b031633146110705760405162461bcd60e51b81526004016108ba90612f69565b601082905560015461108b90620186a090610e27908461176c565b6026555050565b5f546001600160a01b031633146110bb5760405162461bcd60e51b81526004016108ba90612f69565b601980546001600160a01b038084166001600160a01b0319928316811790935560178054918616919092161790556110f290610b9d565b601754610abd906001600160a01b0316610b9d565b6001600160a01b0381165f9081526023602052604081205460ff161561114257506001600160a01b03165f908152601d602052604090205490565b6001600160a01b0382165f908152601c6020526040902054610ad190610d60565b5f546001600160a01b0316331461118c5760405162461bcd60e51b81526004016108ba90612f69565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146111fd5760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b03165f908152602460205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461124d5760405162461bcd60e51b81526004016108ba90612f69565b601980546001600160a01b0319166001600160a01b038316908117909155610fb990610b9d565b5f610acd3384610b7c8560405180606001604052806025815260200161318960259139335f9081526022602090815260408083206001600160a01b038d168452909152902054919061170a565b6001600160a01b0381165f908152601e602052604081205481906112e890610d5585611107565b6001600160a01b0384165f908152601f602052604090205490915061130d8282611735565b949350505050565b5f610acd3384846115f1565b5f546001600160a01b0316331461134a5760405162461bcd60e51b81526004016108ba90612f69565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561138e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b2919061301f565b90506001600160a01b03841663a9059cbb846113d36064610e27868861176c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561141b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143f9190613036565b5050505050565b5f546001600160a01b0316331461146f5760405162461bcd60e51b81526004016108ba90612f69565b601155565b6001600160a01b0381165f908152601e60205260408120548190610ddb90610d5585611107565b5f546001600160a01b031633146114c45760405162461bcd60e51b81526004016108ba90612f69565b6114cc6117f5565b565b6001600160a01b0383166115305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ba565b6001600160a01b0382166115915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ba565b6001600160a01b038381165f8181526022602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038084165f908152601e60205260408082205492851682529020546116219185918591906118b1565b61162c8383836119cf565b6116368383611b07565b611641838383611ba4565b61164c838383611cb1565b6116568383611dda565b6116608383611e4e565b61166a8383611fba565b6116748383611fdc565b6001600160a01b0383165f908152602460205260409020546116fb9084908490849060ff16806116bb57506001600160a01b0386165f9081526024602052604090205460ff165b806116cf5750600e54600160201b900460ff165b806116dc5750600e5460ff165b6019549015906001600160a01b039081168882168114918a161461207e565b61170583836122db565b505050565b5f818484111561172d5760405162461bcd60e51b81526004016108ba9190612dd2565b505050900390565b5f610ddb828461300c565b5f610ddb8284612fc6565b5f805f611756612356565b90925090506117658183612fed565b9250505090565b5f610ddb8284613051565b5f610ddb8284612fed565b6117bb6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117c7858585856124c6565b90506117dc8186866117d761174b565b612699565b6060850152604084015260208301528152949350505050565b60255460135461180491611740565b601355600e805464ff000000001916600160201b179055601a545f90611832906001600160a01b0316611107565b905061184b60255460145461173590919063ffffffff16565b60145560255461185a90612702565b601a545f90611877908390610d55906001600160a01b0316611107565b6015549091506118879082611735565b601555600e805464ff00000000191690555f6012556016546118aa906001611735565b6016555050565b5f6118bb85611107565b90505f806118c98386611740565b1180156118ee57506001600160a01b0386165f9081526023602052604090205460ff16155b1561193b576118fd8285611740565b6001600160a01b0387165f908152601f60205260409020549091506119229082611735565b6001600160a01b0387165f908152601f60205260409020555b5f61194586611107565b90505f806119538387611740565b11801561197857506001600160a01b0387165f9081526023602052604090205460ff16155b156119c5576119878286611740565b6001600160a01b0388165f908152601f60205260409020549091506119ac9082611735565b6001600160a01b0388165f908152601f60205260409020555b5050505050505050565b6001600160a01b038316611a335760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ba565b6001600160a01b038216611a955760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ba565b611a9e83611107565b8111156117055760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016108ba565b6001600160a01b0382165f9081526024602052604090205460ff16158015611b4757506001600160a01b0381165f9081526024602052604090205460ff16155b15610abd57600e5462010000900460ff16610abd5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016108ba565b6001600160a01b0382165f9081526024602052604090205460ff16158015611be457506001600160a01b0383165f9081526024602052604090205460ff16155b8015611bf957506001600160a01b0382163014155b8015611c135750601a546001600160a01b03838116911614155b8015611c2d57506019546001600160a01b03838116911614155b8015611c475750601b546001600160a01b03838116911614155b156117055760055481611c5984611107565b611c63919061300c565b11156117055760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016108ba565b6019546001600160a01b03848116911614611d505760045481111580611cee57506001600160a01b0383165f9081526024602052604090205460ff165b80611d1057506001600160a01b0382165f9081526024602052604090205460ff165b611d505760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108ba565b60035481111580611d7857506001600160a01b0383165f9081526024602052604090205460ff165b80611d9a57506001600160a01b0382165f9081526024602052604090205460ff165b6117055760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108ba565b6019546001600160a01b038281169116148015611e0f57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e1e5750600e5460ff16155b8015611e345750600e54600160201b900460ff16155b15610abd57600f54611e47906001611735565b600f555050565b600e5462010000900460ff168015611e7e57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e9757506019546001600160a01b038281169116145b8015611ea65750600e5460ff16155b8015611ebc5750600e54600160201b900460ff16155b15611ed957600160125f828254611ed3919061300c565b90915550505b60255460135410158015611eef57506025544710155b8015611eff575060115460125410155b8015611f145750600e546301000000900460ff165b8015611f3857506001600160a01b0382165f9081526024602052604090205460ff16155b8015611f5157506019546001600160a01b038281169116145b8015611f655750600e5462010000900460ff165b8015611f745750600e5460ff16155b8015611f8a5750600e54600160201b900460ff16155b8015611fad5750600e546001600160a01b03838116650100000000009092041614155b15610abd57610abd6117f5565b611fc48282612847565b15610abd57611fd46026546128fb565b5f600f555050565b600e805465010000000000600160c81b03191690556019546001600160a01b03838116911614801561202657506001600160a01b0381165f9081526024602052604090205460ff16155b801561203c5750600e54600160201b900460ff16155b801561204b5750600e5460ff16155b15610abd57600e80546001600160a01b038316650100000000000265010000000000600160c81b03199091161790555050565b5f61208b85858585611782565b6001600160a01b0388165f9081526023602052604090205490915060ff16156120ea576001600160a01b0387165f908152601d60205260409020546120d1908690612fc6565b6001600160a01b0388165f908152601d60205260409020555b6001600160a01b0386165f9081526023602052604090205460ff161561214a5760808101516001600160a01b0387165f908152601d6020526040902054612131919061300c565b6001600160a01b0387165f908152601d60205260409020555b80516001600160a01b0388165f908152601c602052604090205461216e9190612fc6565b6001600160a01b038089165f908152601c6020908152604080832094909455840151918916815291909120546121a4919061300c565b6001600160a01b0387165f908152601c60205260409020556121c587611107565b6001600160a01b0388165f9081526020805260409020556121e586611107565b6001600160a01b0387165f90815260216020526040908190209190915581015160a08201516122149190612a78565b61222681606001518260c00151612aab565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161226f91815260200190565b60405180910390a360c08101511561091457306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516122ca91815260200190565b60405180910390a350505050505050565b6001600160a01b038083165f9081526020808052604080832054938516835260219091529020546123109184918491906118b1565b61231982611107565b6001600160a01b0383165f908152601e602052604090205561233a81611107565b6001600160a01b039091165f908152601e602052604090205550565b6002546001545f918291825b6018548110156124955782601c5f6018848154811061238357612383612f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806123eb575081601d5f601884815481106123c5576123c5612f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240157600254600154945094505050509091565b601c5f6018838154811061241757612417612f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124459084612fc6565b9250601d5f6018838154811061245d5761245d612f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461248b9083612fc6565b9150600101612362565b506001546002546124a69190612fed565b8210156124bd576002546001549350935050509091565b90939092509050565b6124ff6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061251157506125118383612b1d565b15612522576080810185905261130d565b8215801561252e575081155b156125a4575f61254f600d54610e27600c548961176c90919063ffffffff16565b9050600c5460065f01541161257e57600d5460065461256e9088613051565b6125789190612fed565b60a08301525b60a082015161258e908290611740565b60c083015261259d8187612fc6565b6080830152505b821561261b575f6125c6600d54610e27600b548961176c90919063ffffffff16565b9050600b5460065f0154116125f557600d546006546125e59088613051565b6125ef9190612fed565b60a08301525b60a0820151612605908290611740565b60c08301526126148187612fc6565b6080830152505b811561130d575f61263d600d54610e27600a548961176c90919063ffffffff16565b9050600a5460065f01541161266c57600d5460065461265c9088613051565b6126669190612fed565b60a08301525b60a082015161267c908290611740565b60c083015261268b8187612fc6565b608083015250949350505050565b5f8080806126a78588613051565b9350856126bb57508291505f9050806126f7565b848860a001516126cb9190613051565b9150848860c001516126dd9190613051565b9050806126ea8386612fc6565b6126f49190612fc6565b92505b945094509450949050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612769573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278d9190613068565b815f8151811061279f5761279f612f9e565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127d3576127d3612f9e565b6001600160a01b039283166020918202929092010152601754601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261281e925f9288929091169042906004016130c6565b5f604051808303818588803b158015612835575f80fd5b505af1158015610914573d5f803e3d5ffd5b5f8060265461285530611107565b600e54911115915060ff161580156128745750600e54610100900460ff165b801561289857506001600160a01b0384165f9081526024602052604090205460ff16155b80156128ac5750600e5462010000900460ff165b80156128c557506019546001600160a01b038481169116145b80156128d55750601054600f5410155b80156128de5750805b801561130d5750600e54600160201b900460ff1615949350505050565b600e805460ff19166001908117909155600a545f91612927916002916129219190611735565b9061176c565b9050600a545f0361295f5760095460075460085461295c92600292612921926001926129569290918391611735565b90611735565b90505b6008545f9082906129709085613051565b61297a9190612fed565b90505f6129878285612fc6565b90504761299382612b62565b5f61299e8247612fc6565b6008549091505f906129b09087612fc6565b6129ba9083612fed565b6008549091505f906129cc9083613051565b905080156129de576129de8682612cb2565b6009545f906129f29061292185600261176c565b90508015612a0b57601354612a079082611735565b6013555b5f612a216013544761174090919063ffffffff16565b90508015612a6257601b546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612a60573d5f803e3d5ffd5b505b5050600e805460ff191690555050505050505050565b8160025f828254612a899190612fc6565b9091555050602780548291905f90612aa290849061300c565b90915550505050565b8060276001015f828254612abf919061300c565b9091555050305f9081526023602052604090205460ff1615612aff57305f908152601d602052604081208054839290612af990849061300c565b90915550505b305f908152601c602052604081208054849290612aa290849061300c565b5f828015612b2b5750600b54155b80612b3e5750818015612b3e5750600a54155b80610ddb575082158015612b50575081155b8015610ddb575050600c541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9557612b95612f9e565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c109190613068565b81600181518110612c2357612c23612f9e565b6001600160a01b039283166020918202929092010152601754612c4991309116846114ce565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c819085905f908690309042906004016130fa565b5f604051808303815f87803b158015612c98575f80fd5b505af1158015612caa573d5f803e3d5ffd5b505050505050565b601754612cca9030906001600160a01b0316846114ce565b601754601b5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d37573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061143f9190613135565b5f805f805f805f60e0888a031215612d72575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6001600160a01b0381168114610fb9575f80fd5b5f60208284031215612dc7575f80fd5b8135610ddb81612da3565b5f602080835283518060208501525f5b81811015612dfe57858101830151858201604001528201612de2565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612e2f575f80fd5b8235612e3a81612da3565b946020939093013593505050565b8015158114610fb9575f80fd5b5f8060408385031215612e66575f80fd5b823591506020830135612e7881612e48565b809150509250929050565b5f805f60608486031215612e95575f80fd5b8335612ea081612da3565b92506020840135612eb081612da3565b929592945050506040919091013590565b5f60208284031215612ed1575f80fd5b5035919050565b5f805f60608486031215612eea575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f12575f80fd5b50508035926020909101359150565b5f8060408385031215612f32575f80fd5b8235612f3d81612da3565b91506020830135612e7881612da3565b5f8060408385031215612f5e575f80fd5b8235612f3d81612e48565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ad157610ad1612fb2565b634e487b7160e01b5f52603160045260245ffd5b5f8261300757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ad157610ad1612fb2565b5f6020828403121561302f575f80fd5b5051919050565b5f60208284031215613046575f80fd5b8151610ddb81612e48565b8082028115828204841417610ad157610ad1612fb2565b5f60208284031215613078575f80fd5b8151610ddb81612da3565b5f815180845260208085019450602084015f5b838110156130bb5781516001600160a01b031687529582019590820190600101613096565b509495945050505050565b848152608060208201525f6130de6080830186613083565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61311860a0830186613083565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613147575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da8847129360356a4f9f0e696ca336c14791caa607953d8a84a24aecebe20cac64736f6c63430008180033
Deployed Bytecode
0x6080604052600436106102a8575f3560e01c80635927c4341161016f578063a457c2d7116100d8578063ba1a13ff11610092578063dd62ed3e1161006d578063dd62ed3e14610805578063f887ea4014610849578063fbda70b314610868578063fc7385491461087d575f80fd5b8063ba1a13ff146107b2578063c31a821a146107c7578063c8ee88cd146107e6575f80fd5b8063a457c2d7146106f7578063a637f19414610716578063a8aa1b3114610735578063a9059cbb14610754578063acdf4f1814610773578063b2118a8d14610793575f80fd5b80637cca52fe116101295780637cca52fe1461062e5780637d1db4a5146106435780637d459db31461065857806386325e211461068f5780638da5cb5b146106ae57806395d89b41146106ca575f80fd5b80635927c4341461059d57806370a08231146105b2578063715018a6146105d15780637520ecc9146105e557806378109e54146105fa578063783b5a0a1461060f575f80fd5b806327334a081161021157806339509351116101cb57806339509351146104df57806339788bc8146104fe5780633f4218e0146105125780634549b0391461054057806350dc03b11461055f578063529d379d1461057e575f80fd5b806327334a081461043f578063293230b81461045e5780632b112e49146104725780632d83811914610486578063313ce567146104a557806334c5d2ce146104c0575f80fd5b806313ecfbfa1161026257806313ecfbfa1461039a57806318160ddd146103da5780631deff655146103ee57806320d730ee1461040357806323b872dd1461041857806325a06a0214610437575f80fd5b8063018763ed146102b357806304401930146102d657806305f82a45146102f757806306fdde0314610316578063095ea7b31461034c5780631169462e1461037b575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506027545b6040519081526020015b60405180910390f35b3480156102e1575f80fd5b506102f56102f0366004612d5c565b610891565b005b348015610302575f80fd5b506102f5610311366004612db7565b61091d565b348015610321575f80fd5b50604080518082019091526005815264537572676560d81b60208201525b6040516102cd9190612dd2565b348015610357575f80fd5b5061036b610366366004612e1e565b610ac1565b60405190151581526020016102cd565b348015610386575f80fd5b506102f5610395366004612e55565b610ad7565b3480156103a5575f80fd5b50600e546103c2906501000000000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b3480156103e5575f80fd5b506001546102c3565b3480156103f9575f80fd5b506102c360135481565b34801561040e575f80fd5b506102c360155481565b348015610423575f80fd5b5061036b610432366004612e83565b610b24565b6102f5610b8b565b34801561044a575f80fd5b506102f5610459366004612db7565b610b9d565b348015610469575f80fd5b506102f5610cea565b34801561047d575f80fd5b506102c3610d26565b348015610491575f80fd5b506102c36104a0366004612ec1565b610d60565b3480156104b0575f80fd5b50604051600981526020016102cd565b3480156104cb575f80fd5b506102f56104da366004612ed8565b610de2565b3480156104ea575f80fd5b5061036b6104f9366004612e1e565b610f24565b348015610509575f80fd5b506102f5610f5a565b34801561051d575f80fd5b5061036b61052c366004612db7565b60246020525f908152604090205460ff1681565b34801561054b575f80fd5b506102c361055a366004612e55565b610fbc565b34801561056a575f80fd5b506102f5610579366004612f01565b611047565b348015610589575f80fd5b506102f5610598366004612f21565b611092565b3480156105a8575f80fd5b506102c360255481565b3480156105bd575f80fd5b506102c36105cc366004612db7565b611107565b3480156105dc575f80fd5b506102f5611163565b3480156105f0575f80fd5b506102c360125481565b348015610605575f80fd5b506102c360055481565b34801561061a575f80fd5b506102f5610629366004612f4d565b6111d4565b348015610639575f80fd5b506102c360045481565b34801561064e575f80fd5b506102c360035481565b348015610663575f80fd5b5061036b610672366004612db7565b6001600160a01b03165f9081526023602052604090205460ff1690565b34801561069a575f80fd5b506102f56106a9366004612db7565b611224565b3480156106b9575f80fd5b505f546001600160a01b03166103c2565b3480156106d5575f80fd5b50604080518082019091526005815264535552474560d81b602082015261033f565b348015610702575f80fd5b5061036b610711366004612e1e565b611274565b348015610721575f80fd5b506102c3610730366004612db7565b6112c1565b348015610740575f80fd5b506019546103c2906001600160a01b031681565b34801561075f575f80fd5b5061036b61076e366004612e1e565b611315565b34801561077e575f80fd5b50600e5461036b906301000000900460ff1681565b34801561079e575f80fd5b506102f56107ad366004612e83565b611321565b3480156107bd575f80fd5b506102c360145481565b3480156107d2575f80fd5b506102f56107e1366004612ec1565b611446565b3480156107f1575f80fd5b506102c3610800366004612db7565b611474565b348015610810575f80fd5b506102c361081f366004612f21565b6001600160a01b039182165f90815260226020908152604080832093909416825291909152205490565b348015610854575f80fd5b506017546103c2906001600160a01b031681565b348015610873575f80fd5b506102c360165481565b348015610888575f80fd5b506102f561149b565b5f546001600160a01b031633146108c35760405162461bcd60e51b81526004016108ba90612f69565b60405180910390fd5b600a879055600b869055600c8590556006849055600783905560088290556009819055600d5487118015906108fc5750600d54600b5411155b801561090c5750600d54600c5411155b610914575f80fd5b50505050505050565b5f546001600160a01b031633146109465760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b0381165f9081526023602052604090205460ff166109ad5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016108ba565b5f5b601854811015610abd57816001600160a01b0316601882815481106109d6576109d6612f9e565b5f918252602090912001546001600160a01b031603610ab557601880546109ff90600190612fc6565b81548110610a0f57610a0f612f9e565b5f91825260209091200154601880546001600160a01b039092169183908110610a3a57610a3a612f9e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601d82526040808220829055602390925220805460ff191690556018805480610a9157610a91612fd9565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016109af565b5050565b5f610acd3384846114ce565b5060015b92915050565b5f546001600160a01b03163314610b005760405162461bcd60e51b81526004016108ba90612f69565b602591909155600e805491151563010000000263ff00000019909216919091179055565b5f610b308484846115f1565b610b818433610b7c85604051806060016040528060288152602001613161602891396001600160a01b038a165f908152602260209081526040808320338452909152902054919061170a565b6114ce565b5060019392505050565b601354610b989034611735565b601355565b5f546001600160a01b03163314610bc65760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b0381165f9081526023602052604090205460ff1615610c2e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108ba565b6001600160a01b0381165f908152601c602052604090205415610c85576001600160a01b0381165f908152601c6020526040902054610c6c90610d60565b6001600160a01b0382165f908152601d60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b5f546001600160a01b03163314610d135760405162461bcd60e51b81526004016108ba90612f69565b600e805462ff0000191662010000179055565b5f610d5b610d335f611107565b601a54610d5590610d4c906001600160a01b0316611107565b60015490611740565b90611740565b905090565b5f600254821115610dc65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108ba565b5f610dcf61174b565b9050610ddb8184612fed565b9392505050565b5f546001600160a01b03163314610e0b5760405162461bcd60e51b81526004016108ba90612f69565b5f610e2d612710610e278660015461176c90919063ffffffff16565b90611777565b90505f610e4b612710610e278660015461176c90919063ffffffff16565b90505f610e69612710610e278660015461176c90919063ffffffff16565b90505f610e87612710610e276001805461176c90919063ffffffff16565b9050808410158015610e995750808210155b8015610ea55750808310155b610f0f5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016108ba565b50600392909255600591909155600455505050565b335f8181526022602090815260408083206001600160a01b03871684529091528120549091610acd918590610b7c90869061300c565b5f546001600160a01b03163314610f835760405162461bcd60e51b81526004016108ba90612f69565b601b546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610fb9573d5f803e3d5ffd5b50565b5f60015483111561100f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108ba565b8161102c575f6110228460015f80611782565b519150610ad19050565b5f61103a8460015f80611782565b602001519150610ad19050565b5f546001600160a01b031633146110705760405162461bcd60e51b81526004016108ba90612f69565b601082905560015461108b90620186a090610e27908461176c565b6026555050565b5f546001600160a01b031633146110bb5760405162461bcd60e51b81526004016108ba90612f69565b601980546001600160a01b038084166001600160a01b0319928316811790935560178054918616919092161790556110f290610b9d565b601754610abd906001600160a01b0316610b9d565b6001600160a01b0381165f9081526023602052604081205460ff161561114257506001600160a01b03165f908152601d602052604090205490565b6001600160a01b0382165f908152601c6020526040902054610ad190610d60565b5f546001600160a01b0316331461118c5760405162461bcd60e51b81526004016108ba90612f69565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146111fd5760405162461bcd60e51b81526004016108ba90612f69565b6001600160a01b03165f908152602460205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461124d5760405162461bcd60e51b81526004016108ba90612f69565b601980546001600160a01b0319166001600160a01b038316908117909155610fb990610b9d565b5f610acd3384610b7c8560405180606001604052806025815260200161318960259139335f9081526022602090815260408083206001600160a01b038d168452909152902054919061170a565b6001600160a01b0381165f908152601e602052604081205481906112e890610d5585611107565b6001600160a01b0384165f908152601f602052604090205490915061130d8282611735565b949350505050565b5f610acd3384846115f1565b5f546001600160a01b0316331461134a5760405162461bcd60e51b81526004016108ba90612f69565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561138e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b2919061301f565b90506001600160a01b03841663a9059cbb846113d36064610e27868861176c565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561141b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143f9190613036565b5050505050565b5f546001600160a01b0316331461146f5760405162461bcd60e51b81526004016108ba90612f69565b601155565b6001600160a01b0381165f908152601e60205260408120548190610ddb90610d5585611107565b5f546001600160a01b031633146114c45760405162461bcd60e51b81526004016108ba90612f69565b6114cc6117f5565b565b6001600160a01b0383166115305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ba565b6001600160a01b0382166115915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ba565b6001600160a01b038381165f8181526022602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038084165f908152601e60205260408082205492851682529020546116219185918591906118b1565b61162c8383836119cf565b6116368383611b07565b611641838383611ba4565b61164c838383611cb1565b6116568383611dda565b6116608383611e4e565b61166a8383611fba565b6116748383611fdc565b6001600160a01b0383165f908152602460205260409020546116fb9084908490849060ff16806116bb57506001600160a01b0386165f9081526024602052604090205460ff165b806116cf5750600e54600160201b900460ff165b806116dc5750600e5460ff165b6019549015906001600160a01b039081168882168114918a161461207e565b61170583836122db565b505050565b5f818484111561172d5760405162461bcd60e51b81526004016108ba9190612dd2565b505050900390565b5f610ddb828461300c565b5f610ddb8284612fc6565b5f805f611756612356565b90925090506117658183612fed565b9250505090565b5f610ddb8284613051565b5f610ddb8284612fed565b6117bb6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117c7858585856124c6565b90506117dc8186866117d761174b565b612699565b6060850152604084015260208301528152949350505050565b60255460135461180491611740565b601355600e805464ff000000001916600160201b179055601a545f90611832906001600160a01b0316611107565b905061184b60255460145461173590919063ffffffff16565b60145560255461185a90612702565b601a545f90611877908390610d55906001600160a01b0316611107565b6015549091506118879082611735565b601555600e805464ff00000000191690555f6012556016546118aa906001611735565b6016555050565b5f6118bb85611107565b90505f806118c98386611740565b1180156118ee57506001600160a01b0386165f9081526023602052604090205460ff16155b1561193b576118fd8285611740565b6001600160a01b0387165f908152601f60205260409020549091506119229082611735565b6001600160a01b0387165f908152601f60205260409020555b5f61194586611107565b90505f806119538387611740565b11801561197857506001600160a01b0387165f9081526023602052604090205460ff16155b156119c5576119878286611740565b6001600160a01b0388165f908152601f60205260409020549091506119ac9082611735565b6001600160a01b0388165f908152601f60205260409020555b5050505050505050565b6001600160a01b038316611a335760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ba565b6001600160a01b038216611a955760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ba565b611a9e83611107565b8111156117055760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016108ba565b6001600160a01b0382165f9081526024602052604090205460ff16158015611b4757506001600160a01b0381165f9081526024602052604090205460ff16155b15610abd57600e5462010000900460ff16610abd5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016108ba565b6001600160a01b0382165f9081526024602052604090205460ff16158015611be457506001600160a01b0383165f9081526024602052604090205460ff16155b8015611bf957506001600160a01b0382163014155b8015611c135750601a546001600160a01b03838116911614155b8015611c2d57506019546001600160a01b03838116911614155b8015611c475750601b546001600160a01b03838116911614155b156117055760055481611c5984611107565b611c63919061300c565b11156117055760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016108ba565b6019546001600160a01b03848116911614611d505760045481111580611cee57506001600160a01b0383165f9081526024602052604090205460ff165b80611d1057506001600160a01b0382165f9081526024602052604090205460ff165b611d505760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108ba565b60035481111580611d7857506001600160a01b0383165f9081526024602052604090205460ff165b80611d9a57506001600160a01b0382165f9081526024602052604090205460ff165b6117055760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108ba565b6019546001600160a01b038281169116148015611e0f57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e1e5750600e5460ff16155b8015611e345750600e54600160201b900460ff16155b15610abd57600f54611e47906001611735565b600f555050565b600e5462010000900460ff168015611e7e57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e9757506019546001600160a01b038281169116145b8015611ea65750600e5460ff16155b8015611ebc5750600e54600160201b900460ff16155b15611ed957600160125f828254611ed3919061300c565b90915550505b60255460135410158015611eef57506025544710155b8015611eff575060115460125410155b8015611f145750600e546301000000900460ff165b8015611f3857506001600160a01b0382165f9081526024602052604090205460ff16155b8015611f5157506019546001600160a01b038281169116145b8015611f655750600e5462010000900460ff165b8015611f745750600e5460ff16155b8015611f8a5750600e54600160201b900460ff16155b8015611fad5750600e546001600160a01b03838116650100000000009092041614155b15610abd57610abd6117f5565b611fc48282612847565b15610abd57611fd46026546128fb565b5f600f555050565b600e805465010000000000600160c81b03191690556019546001600160a01b03838116911614801561202657506001600160a01b0381165f9081526024602052604090205460ff16155b801561203c5750600e54600160201b900460ff16155b801561204b5750600e5460ff16155b15610abd57600e80546001600160a01b038316650100000000000265010000000000600160c81b03199091161790555050565b5f61208b85858585611782565b6001600160a01b0388165f9081526023602052604090205490915060ff16156120ea576001600160a01b0387165f908152601d60205260409020546120d1908690612fc6565b6001600160a01b0388165f908152601d60205260409020555b6001600160a01b0386165f9081526023602052604090205460ff161561214a5760808101516001600160a01b0387165f908152601d6020526040902054612131919061300c565b6001600160a01b0387165f908152601d60205260409020555b80516001600160a01b0388165f908152601c602052604090205461216e9190612fc6565b6001600160a01b038089165f908152601c6020908152604080832094909455840151918916815291909120546121a4919061300c565b6001600160a01b0387165f908152601c60205260409020556121c587611107565b6001600160a01b0388165f9081526020805260409020556121e586611107565b6001600160a01b0387165f90815260216020526040908190209190915581015160a08201516122149190612a78565b61222681606001518260c00151612aab565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161226f91815260200190565b60405180910390a360c08101511561091457306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516122ca91815260200190565b60405180910390a350505050505050565b6001600160a01b038083165f9081526020808052604080832054938516835260219091529020546123109184918491906118b1565b61231982611107565b6001600160a01b0383165f908152601e602052604090205561233a81611107565b6001600160a01b039091165f908152601e602052604090205550565b6002546001545f918291825b6018548110156124955782601c5f6018848154811061238357612383612f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806123eb575081601d5f601884815481106123c5576123c5612f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240157600254600154945094505050509091565b601c5f6018838154811061241757612417612f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124459084612fc6565b9250601d5f6018838154811061245d5761245d612f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461248b9083612fc6565b9150600101612362565b506001546002546124a69190612fed565b8210156124bd576002546001549350935050509091565b90939092509050565b6124ff6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061251157506125118383612b1d565b15612522576080810185905261130d565b8215801561252e575081155b156125a4575f61254f600d54610e27600c548961176c90919063ffffffff16565b9050600c5460065f01541161257e57600d5460065461256e9088613051565b6125789190612fed565b60a08301525b60a082015161258e908290611740565b60c083015261259d8187612fc6565b6080830152505b821561261b575f6125c6600d54610e27600b548961176c90919063ffffffff16565b9050600b5460065f0154116125f557600d546006546125e59088613051565b6125ef9190612fed565b60a08301525b60a0820151612605908290611740565b60c08301526126148187612fc6565b6080830152505b811561130d575f61263d600d54610e27600a548961176c90919063ffffffff16565b9050600a5460065f01541161266c57600d5460065461265c9088613051565b6126669190612fed565b60a08301525b60a082015161267c908290611740565b60c083015261268b8187612fc6565b608083015250949350505050565b5f8080806126a78588613051565b9350856126bb57508291505f9050806126f7565b848860a001516126cb9190613051565b9150848860c001516126dd9190613051565b9050806126ea8386612fc6565b6126f49190612fc6565b92505b945094509450949050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612769573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278d9190613068565b815f8151811061279f5761279f612f9e565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127d3576127d3612f9e565b6001600160a01b039283166020918202929092010152601754601a5460405163b6f9de9560e01b81529183169263b6f9de9592869261281e925f9288929091169042906004016130c6565b5f604051808303818588803b158015612835575f80fd5b505af1158015610914573d5f803e3d5ffd5b5f8060265461285530611107565b600e54911115915060ff161580156128745750600e54610100900460ff165b801561289857506001600160a01b0384165f9081526024602052604090205460ff16155b80156128ac5750600e5462010000900460ff165b80156128c557506019546001600160a01b038481169116145b80156128d55750601054600f5410155b80156128de5750805b801561130d5750600e54600160201b900460ff1615949350505050565b600e805460ff19166001908117909155600a545f91612927916002916129219190611735565b9061176c565b9050600a545f0361295f5760095460075460085461295c92600292612921926001926129569290918391611735565b90611735565b90505b6008545f9082906129709085613051565b61297a9190612fed565b90505f6129878285612fc6565b90504761299382612b62565b5f61299e8247612fc6565b6008549091505f906129b09087612fc6565b6129ba9083612fed565b6008549091505f906129cc9083613051565b905080156129de576129de8682612cb2565b6009545f906129f29061292185600261176c565b90508015612a0b57601354612a079082611735565b6013555b5f612a216013544761174090919063ffffffff16565b90508015612a6257601b546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612a60573d5f803e3d5ffd5b505b5050600e805460ff191690555050505050505050565b8160025f828254612a899190612fc6565b9091555050602780548291905f90612aa290849061300c565b90915550505050565b8060276001015f828254612abf919061300c565b9091555050305f9081526023602052604090205460ff1615612aff57305f908152601d602052604081208054839290612af990849061300c565b90915550505b305f908152601c602052604081208054849290612aa290849061300c565b5f828015612b2b5750600b54155b80612b3e5750818015612b3e5750600a54155b80610ddb575082158015612b50575081155b8015610ddb575050600c541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9557612b95612f9e565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c109190613068565b81600181518110612c2357612c23612f9e565b6001600160a01b039283166020918202929092010152601754612c4991309116846114ce565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c819085905f908690309042906004016130fa565b5f604051808303815f87803b158015612c98575f80fd5b505af1158015612caa573d5f803e3d5ffd5b505050505050565b601754612cca9030906001600160a01b0316846114ce565b601754601b5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d37573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061143f9190613135565b5f805f805f805f60e0888a031215612d72575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6001600160a01b0381168114610fb9575f80fd5b5f60208284031215612dc7575f80fd5b8135610ddb81612da3565b5f602080835283518060208501525f5b81811015612dfe57858101830151858201604001528201612de2565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612e2f575f80fd5b8235612e3a81612da3565b946020939093013593505050565b8015158114610fb9575f80fd5b5f8060408385031215612e66575f80fd5b823591506020830135612e7881612e48565b809150509250929050565b5f805f60608486031215612e95575f80fd5b8335612ea081612da3565b92506020840135612eb081612da3565b929592945050506040919091013590565b5f60208284031215612ed1575f80fd5b5035919050565b5f805f60608486031215612eea575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f12575f80fd5b50508035926020909101359150565b5f8060408385031215612f32575f80fd5b8235612f3d81612da3565b91506020830135612e7881612da3565b5f8060408385031215612f5e575f80fd5b8235612f3d81612e48565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ad157610ad1612fb2565b634e487b7160e01b5f52603160045260245ffd5b5f8261300757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ad157610ad1612fb2565b5f6020828403121561302f575f80fd5b5051919050565b5f60208284031215613046575f80fd5b8151610ddb81612e48565b8082028115828204841417610ad157610ad1612fb2565b5f60208284031215613078575f80fd5b8151610ddb81612da3565b5f815180845260208085019450602084015f5b838110156130bb5781516001600160a01b031687529582019590820190600101613096565b509495945050505050565b848152608060208201525f6130de6080830186613083565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61311860a0830186613083565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613147575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220da8847129360356a4f9f0e696ca336c14791caa607953d8a84a24aecebe20cac64736f6c63430008180033
Deployed Bytecode Sourcemap
7833:22405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12221:83;;;;;;;;;;-1:-1:-1;12287:11:0;:15;12221:83;;;160:25:1;;;148:2;133:18;12221:83:0;;;;;;;;22167:463;;;;;;;;;;-1:-1:-1;22167:463:0;;;;;:::i;:::-;;:::i;:::-;;25238:464;;;;;;;;;;-1:-1:-1;25238:464:0;;;;;:::i;:::-;;:::i;11210:67::-;;;;;;;;;;-1:-1:-1;11270:5:0;;;;;;;;;;;;-1:-1:-1;;;11270:5:0;;;;11210:67;;;;;;;:::i;12081:134::-;;;;;;;;;;-1:-1:-1;12081:134:0;;;;;:::i;:::-;;:::i;:::-;;;2219:14:1;;2212:22;2194:41;;2182:2;2167:18;12081:134:0;2054:187:1;28858:132:0;;;;;;;;;;-1:-1:-1;28858:132:0;;;;;:::i;:::-;;:::i;8903:24::-;;;;;;;;;;-1:-1:-1;8903:24:0;;;;;;;-1:-1:-1;;;;;8903:24:0;;;;;;-1:-1:-1;;;;;2847:32:1;;;2829:51;;2817:2;2802:18;8903:24:0;2683:203:1;11433:79:0;;;;;;;;;;-1:-1:-1;11503:7:0;;11433:79;;9086:31;;;;;;;;;;;;;;;;9161:32;;;;;;;;;;;;;;;;12426:309;;;;;;;;;;-1:-1:-1;12426:309:0;;;;;:::i;:::-;;:::i;23063:118::-;;;:::i;24895:335::-;;;;;;;;;;-1:-1:-1;24895:335:0;;;;;:::i;:::-;;:::i;21944:83::-;;;;;;;;;;;;;:::i;24005:143::-;;;;;;;;;;;;;:::i;24639:248::-;;;;;;;;;;-1:-1:-1;24639:248:0;;;;;:::i;:::-;;:::i;11360:67::-;;;;;;;;;;-1:-1:-1;11360:67:0;;8068:1;3679:36:1;;3667:2;3652:18;11360:67:0;3537:184:1;23189:554:0;;;;;;;;;;-1:-1:-1;23189:554:0;;;;;:::i;:::-;;:::i;12743:209::-;;;;;;;;;;-1:-1:-1;12743:209:0;;;;;:::i;:::-;;:::i;11518:99::-;;;;;;;;;;;;;:::i;10032:44::-;;;;;;;;;;-1:-1:-1;10032:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24156:475;;;;;;;;;;-1:-1:-1;24156:475:0;;;;;:::i;:::-;;:::i;22638:202::-;;;;;;;;;;-1:-1:-1;22638:202:0;;;;;:::i;:::-;;:::i;17308:235::-;;;;;;;;;;-1:-1:-1;17308:235:0;;;;;:::i;:::-;;:::i;10083:60::-;;;;;;;;;;;;;;;;11623:173;;;;;;;;;;-1:-1:-1;11623:173:0;;;;;:::i;:::-;;:::i;6627:148::-;;;;;;;;;;;;;:::i;9048:31::-;;;;;;;;;;;;;;;;8368:58;;;;;;;;;;;;;;;;22035:124;;;;;;;;;;-1:-1:-1;22035:124:0;;;;;:::i;:::-;;:::i;8304:57::-;;;;;;;;;;;;;;;;8242:55;;;;;;;;;;;;;;;;12310:108;;;;;;;;;;-1:-1:-1;12310:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12396:20:0;12382:4;12396:20;;;:11;:20;;;;;;;;;12310:108;17169:131;;;;;;;;;;-1:-1:-1;17169:131:0;;;;;:::i;:::-;;:::i;6413:79::-;;;;;;;;;;-1:-1:-1;6451:7:0;6478:6;-1:-1:-1;;;;;6478:6:0;6413:79;;11283:71;;;;;;;;;;-1:-1:-1;11345:7:0;;;;;;;;;;;;-1:-1:-1;;;11345:7:0;;;;11283:71;;12960:265;;;;;;;;;;-1:-1:-1;12960:265:0;;;;;:::i;:::-;;:::i;17685:294::-;;;;;;;;;;-1:-1:-1;17685:294:0;;;;;:::i;:::-;;:::i;9313:19::-;;;;;;;;;;-1:-1:-1;9313:19:0;;;;-1:-1:-1;;;;;9313:19:0;;;11802:140;;;;;;;;;;-1:-1:-1;11802:140:0;;;;;:::i;:::-;;:::i;8841:26::-;;;;;;;;;;-1:-1:-1;8841:26:0;;;;;;;;;;;23751:246;;;;;;;;;;-1:-1:-1;23751:246:0;;;;;:::i;:::-;;:::i;9124:30::-;;;;;;;;;;;;;;;;22935:120;;;;;;;;;;-1:-1:-1;22935:120:0;;;;;:::i;:::-;;:::i;17987:196::-;;;;;;;;;;-1:-1:-1;17987:196:0;;;;;:::i;:::-;;:::i;11948:127::-;;;;;;;;;;-1:-1:-1;11948:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12046:18:0;;;12029:7;12046:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11948:127;9240:32;;;;;;;;;;-1:-1:-1;9240:32:0;;;;-1:-1:-1;;;;;9240:32:0;;;9200:33;;;;;;;;;;;;;;;;22848:79;;;;;;;;;;;;;:::i;22167:463::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;;;;;;;;;22342:8:::1;:15:::0;;;22359:7:::1;:15:::0;;;22376:11:::1;:20:::0;;;22398:8:::1;:27:::0;;;22427:16;:27;;;22456:18;:31;;;22489:23;:34;;;22554:11:::1;::::0;22542:23;::::1;::::0;::::1;::::0;:49:::1;;;22580:11;;22569:7;;:22;;22542:49;:79;;;;;22610:11;;22595;;:26;;22542:79;22534:88;;;::::0;::::1;;22167:463:::0;;;;;;;:::o;25238:464::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25322:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25314:56;;;::::0;-1:-1:-1;;;25314:56:0;;5877:2:1;25314:56:0::1;::::0;::::1;5859:21:1::0;5916:2;5896:18;;;5889:30;5955:25;5935:18;;;5928:53;5998:18;;25314:56:0::1;5675:347:1::0;25314:56:0::1;25386:9;25381:314;25405:9;:16:::0;25401:20;::::1;25381:314;;;25463:7;-1:-1:-1::0;;;;;25447:23:0::1;:9;25457:1;25447:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25447:12:0::1;:23:::0;25443:241:::1;;25506:9;25516:16:::0;;:20:::1;::::0;25535:1:::1;::::0;25516:20:::1;:::i;:::-;25506:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25491:9:::1;:12:::0;;-1:-1:-1;;;;;25506:31:0;;::::1;::::0;25501:1;;25491:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25491:46:0::1;-1:-1:-1::0;;;;;25491:46:0;;::::1;;::::0;;25556:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25595:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25595:28:0::1;::::0;;25642:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25642:15:0;;;;;-1:-1:-1;;;;;;25642:15:0::1;::::0;;;;;25381:314:::1;25238:464:::0;:::o;25443:241::-:1;25423:3;;25381:314;;;;25238:464:::0;:::o;12081:134::-;12156:4;12163:37;12172:10;12184:7;12193:6;12163:8;:37::i;:::-;-1:-1:-1;12209:4:0;12081:134;;;;;:::o;28858:132::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;28938:16:::1;:26:::0;;;;28966:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28966:16:0;;::::1;::::0;;;::::1;::::0;;28858:132::o;12426:309::-;12524:4;12541:36;12551:6;12559:9;12570:6;12541:9;:36::i;:::-;12588:117;12597:6;12605:10;12617:87;12653:6;12617:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12617:19:0;;;;;;:11;:19;;;;;;;;12637:10;12617:31;;;;;;;;;:87;:35;:87::i;:::-;12588:8;:117::i;:::-;-1:-1:-1;12723:4:0;12426:309;;;;;:::o;23063:118::-;23142:16;;:31;;23163:9;23142:20;:31::i;:::-;23123:16;:50;23063:118::o;24895:335::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24980:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24979:21;24971:61;;;::::0;-1:-1:-1;;;24971:61:0;;6758:2:1;24971:61:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:29;6816:18;;;6809:57;6883:18;;24971:61:0::1;6556:351:1::0;24971:61:0::1;-1:-1:-1::0;;;;;25046:16:0;::::1;25065:1;25046:16:::0;;;:7:::1;:16;::::0;;;;;:20;25043:108:::1;;-1:-1:-1::0;;;;;25122:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25102:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25083:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25043:108:::1;-1:-1:-1::0;;;;;25161:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25161:27:0::1;25184:4;25161:27:::0;;::::1;::::0;;;25199:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25199:23:0::1;::::0;;::::1;::::0;;24895:335::o;21944:83::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;21998:14:::1;:21:::0;;-1:-1:-1;;21998:21:0::1;::::0;::::1;::::0;;21944:83::o;24005:143::-;24058:7;24085:55;24118:21;24136:1;24118:9;:21::i;:::-;24107:4;;24085:28;;24097:15;;-1:-1:-1;;;;;24107:4:0;24097:9;:15::i;:::-;24085:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;24078:62;;24005:143;:::o;24639:248::-;24705:7;24744;;24733;:18;;24725:73;;;;-1:-1:-1;;;24725:73:0;;7114:2:1;24725:73:0;;;7096:21:1;7153:2;7133:18;;;7126:30;7192:34;7172:18;;;7165:62;-1:-1:-1;;;7243:18:1;;;7236:40;7293:19;;24725:73:0;6912:406:1;24725:73:0;24809:19;24832:10;:8;:10::i;:::-;24809:33;-1:-1:-1;24860:19:0;24809:33;24860:7;:19;:::i;:::-;24853:26;24639:248;-1:-1:-1;;;24639:248:0:o;23189:554::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;23288:13:::1;23304:37;23334:5;23304:17;23316:4;23304:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:37::i;:::-;23288:53;;23343:19;23365:29;23388:5;23365:18;23377:5;23365:7;;:11;;:18;;;;:::i;:29::-;23343:51;;23405:17;23425:40;23458:5;23425:20;23437:7;23425;;:11;;:20;;;;:::i;:40::-;23405:60;;23467:13;23483:25;23502:5;23483:14;23495:1;23483:7:::0;::::1;:11;;:14;;;;:::i;:25::-;23467:41;;23536:5;23527;:14;;:36;;;;;23558:5;23545:9;:18;;23527:36;:60;;;;;23582:5;23567:11;:20;;23527:60;23519:126;;;::::0;-1:-1:-1;;;23519:126:0;;7747:2:1;23519:126:0::1;::::0;::::1;7729:21:1::0;7786:2;7766:18;;;7759:30;7825:34;7805:18;;;7798:62;-1:-1:-1;;;7876:18:1;;;7869:51;7937:19;;23519:126:0::1;7545:417:1::0;23519:126:0::1;-1:-1:-1::0;23656:12:0::1;:20:::0;;;;23678:15:::1;:27:::0;;;;23707:14:::1;:28:::0;-1:-1:-1;;;23189:554:0:o;12743:209::-;12857:10;12831:4;12878:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12878:32:0;;;;;;;;;;12831:4;;12848:74;;12869:7;;12878:43;;12911:10;;12878:43;:::i;11518:99::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;11566:16:::1;::::0;11558:57:::1;::::0;-1:-1:-1;;;;;11566:16:0;;::::1;::::0;11593:21:::1;11558:57:::0;::::1;;;::::0;11566:16:::1;11558:57:::0;11566:16;11558:57;11593:21;11566:16;11558:57;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11518:99::o:0;24156:475::-;24246:7;24285;;24274;:18;;24266:62;;;;-1:-1:-1;;;24266:62:0;;8299:2:1;24266:62:0;;;8281:21:1;8338:2;8318:18;;;8311:30;8377:33;8357:18;;;8350:61;8428:18;;24266:62:0;8097:355:1;24266:62:0;24344:17;24339:285;;24378:28;24409:39;24420:7;24429:4;24435:5;24442;24409:10;:39::i;:::-;24470:9;;-1:-1:-1;24463:16:0;;-1:-1:-1;24463:16:0;24339:285;24512:28;24543:39;24554:7;24563:4;24569:5;24576;24543:10;:39::i;:::-;24604:17;;;;-1:-1:-1;24597:24:0;;-1:-1:-1;24597:24:0;22638:202;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;22742:10:::1;:24:::0;;;22784:7:::1;::::0;:48:::1;::::0;22824:6:::1;::::0;22784:27:::1;::::0;22796:14;22784:11:::1;:27::i;:48::-;22768:13;:64:::0;-1:-1:-1;;22638:202:0:o;17308:235::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;17398:4:::1;:12:::0;;-1:-1:-1;;;;;17398:12:0;;::::1;-1:-1:-1::0;;;;;;17398:12:0;;::::1;::::0;::::1;::::0;;;17412:6:::1;:36:::0;;;;::::1;::::0;;;::::1;;::::0;;17459::::1;::::0;:21:::1;:36::i;:::-;17527:6;::::0;17497:38:::1;::::0;-1:-1:-1;;;;;17527:6:0::1;17497:21;:38::i;11623:173::-:0;-1:-1:-1;;;;;11703:20:0;;11689:7;11703:20;;;:11;:20;;;;;;;;11699:49;;;-1:-1:-1;;;;;;11732:16:0;;;;;:7;:16;;;;;;;11623:173::o;11699:49::-;-1:-1:-1;;;;;11777:16:0;;;;;;:7;:16;;;;;;11757:37;;:19;:37::i;6627:148::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;6734:1:::1;6718:6:::0;;6697:40:::1;::::0;-1:-1:-1;;;;;6718:6:0;;::::1;::::0;6697:40:::1;::::0;6734:1;;6697:40:::1;6765:1;6748:19:::0;;-1:-1:-1;;;;;;6748:19:0::1;::::0;;6627:148::o;22035:124::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22119:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22119:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22035:124::o;17169:131::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;17233:4:::1;:12:::0;;-1:-1:-1;;;;;;17233:12:0::1;-1:-1:-1::0;;;;;17233:12:0;::::1;::::0;;::::1;::::0;;;17256:36:::1;::::0;:21:::1;:36::i;12960:265::-:0;13053:4;13070:125;13079:10;13091:7;13100:94;13137:15;13100:94;;;;;;;;;;;;;;;;;13112:10;13100:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13100:32:0;;;;;;;;;;;:94;:36;:94::i;17685:294::-;-1:-1:-1;;;;;17819:17:0;;17750:7;17819:17;;;:9;:17;;;;;;17750:7;;17797:40;;:17;17829:6;17797:9;:17::i;:40::-;-1:-1:-1;;;;;17880:30:0;;17848:29;17880:30;;;:22;:30;;;;;;17770:67;;-1:-1:-1;17928:43:0;17770:67;17880:30;17928:20;:43::i;:::-;17921:50;17685:294;-1:-1:-1;;;;17685:294:0:o;11802:140::-;11880:4;11887:40;11897:10;11909:9;11920:6;11887:9;:40::i;23751:246::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;23873:39:::1;::::0;-1:-1:-1;;;23873:39:0;;23906:4:::1;23873:39;::::0;::::1;2829:51:1::0;23858:12:0::1;::::0;-1:-1:-1;;;;;23873:24:0;::::1;::::0;::::1;::::0;2802:18:1;;23873:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23858:54:::0;-1:-1:-1;;;;;;23923:23:0;::::1;;23947:9:::0;23958:30:::1;23984:3;23958:21;23858:54:::0;23967:11;23958:8:::1;:21::i;:30::-;23923:66;::::0;-1:-1:-1;;;;;;23923:66:0::1;::::0;;;;;;-1:-1:-1;;;;;8838:32:1;;;23923:66:0::1;::::0;::::1;8820:51:1::0;8887:18;;;8880:34;8793:18;;23923:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23847:150;23751:246:::0;;;:::o;22935:120::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;23015:17:::1;:32:::0;22935:120::o;17987:196::-;-1:-1:-1;;;;;18123:17:0;;18054:7;18123:17;;;:9;:17;;;;;;18054:7;;18101:40;;:17;18133:6;18101:9;:17::i;22848:79::-;6540:6;;-1:-1:-1;;;;;6540:6:0;6070:10;6540:22;6532:67;;;;-1:-1:-1;;;6532:67:0;;;;;;;:::i;:::-;22903:16:::1;:14;:16::i;:::-;22848:79::o:0;13233:335::-;-1:-1:-1;;;;;13326:19:0;;13318:68;;;;-1:-1:-1;;;13318:68:0;;9377:2:1;13318:68:0;;;9359:21:1;9416:2;9396:18;;;9389:30;9455:34;9435:18;;;9428:62;-1:-1:-1;;;9506:18:1;;;9499:34;9550:19;;13318:68:0;9175:400:1;13318:68:0;-1:-1:-1;;;;;13405:21:0;;13397:68;;;;-1:-1:-1;;;13397:68:0;;9782:2:1;13397:68:0;;;9764:21:1;9821:2;9801:18;;;9794:30;9860:34;9840:18;;;9833:62;-1:-1:-1;;;9911:18:1;;;9904:32;9953:19;;13397:68:0;9580:398:1;13397:68:0;-1:-1:-1;;;;;13476:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13528:32;;160:25:1;;;13528:32:0;;133:18:1;13528:32:0;;;;;;;13233:335;;;:::o;13576:758::-;-1:-1:-1;;;;;13705:17:0;;;;;;;:9;:17;;;;;;;13724:20;;;;;;;;13665:80;;13686:6;;13694:9;;13705:17;13665:20;:80::i;:::-;13756:37;13767:6;13775:9;13786:6;13756:10;:37::i;:::-;13804:38;13824:6;13832:9;13804:19;:38::i;:::-;13853:41;13868:6;13876:9;13887:6;13853:14;:41::i;:::-;13906:39;13919:6;13927:9;13938:6;13906:12;:39::i;:::-;13956:35;13973:6;13981:9;13956:16;:35::i;:::-;14002:32;14016:6;14024:9;14002:13;:32::i;:::-;14045:27;14054:6;14062:9;14045:8;:27::i;:::-;14083:31;14096:6;14104:9;14083:12;:31::i;:::-;-1:-1:-1;;;;;14169:19:0;;;;;;:11;:19;;;;;;14125:151;;14140:6;;14148:9;;14159:6;;14169:19;;;:45;;-1:-1:-1;;;;;;14192:22:0;;;;;;:11;:22;;;;;;;;14169:45;:58;;;-1:-1:-1;14218:9:0;;-1:-1:-1;;;14218:9:0;;;;14169:58;:70;;;-1:-1:-1;14231:8:0;;;;14169:70;14255:4;;14167:73;;;-1:-1:-1;;;;;14255:4:0;;;14242:17;;;;;;14261:14;;;14125;:151::i;:::-;14287:39;14308:6;14316:9;14287:20;:39::i;:::-;13576:758;;;:::o;1483:162::-;1569:7;1615:12;1607:6;;;;1599:29;;;;-1:-1:-1;;;1599:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1637:5:0;;;1483:162::o;182:82::-;240:7;257:5;261:1;257;:5;:::i;270:82::-;328:7;345:5;349:1;345;:5;:::i;29538:158::-;29579:7;29600:15;29617;29636:19;:17;:19::i;:::-;29599:56;;-1:-1:-1;29599:56:0;-1:-1:-1;29673:15:0;29599:56;;29673:15;:::i;:::-;29666:22;;;;29538:158;:::o;358:82::-;416:7;433:5;437:1;433;:5;:::i;446:82::-;504:7;521:5;525:1;521;:5;:::i;26552:396::-;26655:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26655:36:0;26716:49;26728:7;26737;26746:6;26754:10;26716:11;:49::i;:::-;26704:61;;26861:52;26873:9;26884:7;26893;26902:10;:8;:10::i;:::-;26861:11;:52::i;:::-;26838:19;;;26776:137;26823:14;;;26776:137;26796:25;;;26776:137;;;26552:396;;;;;;:::o;25710:585::-;25796:16;;25775;;:38;;:20;:38::i;:::-;25756:16;:57;25824:9;:16;;-1:-1:-1;;25824:16:0;-1:-1:-1;;;25824:16:0;;;25893:4;;25824:16;;25875:24;;-1:-1:-1;;;;;25893:4:0;25875:9;:24::i;:::-;25851:48;;25928:37;25948:16;;25928:15;;:19;;:37;;;;:::i;:::-;25910:15;:55;25993:16;;25976:34;;:16;:34::i;:::-;26062:4;;26021:20;;26044:43;;26073:13;;26044:24;;-1:-1:-1;;;;;26062:4:0;26044:9;:24::i;:43::-;26118:17;;26021:66;;-1:-1:-1;26118:35:0;;26021:66;26118:21;:35::i;:::-;26098:17;:55;26164:9;:17;;-1:-1:-1;;26164:17:0;;;26176:5;26192:16;:29;26253:18;;:34;;26164:17;26253:22;:34::i;:::-;26232:18;:55;-1:-1:-1;;25710:585:0:o;16084:789::-;16218:23;16244:17;16254:6;16244:9;:17::i;:::-;16218:43;-1:-1:-1;16263:25:0;;16302:34;16218:43;16322:13;16302:19;:34::i;:::-;:38;:62;;;;-1:-1:-1;;;;;;16345:19:0;;;;;;:11;:19;;;;;;;;16344:20;16302:62;16299:220;;;16386:34;:15;16406:13;16386:19;:34::i;:::-;-1:-1:-1;;;;;16464:30:0;;;;;;:22;:30;;;;;;16366:54;;-1:-1:-1;16464:53:0;;16366:54;16464:34;:53::i;:::-;-1:-1:-1;;;;;16431:30:0;;;;;;:22;:30;;;;;:86;16299:220;16529:26;16558:20;16568:9;16558;:20::i;:::-;16529:49;-1:-1:-1;16580:28:0;;16622:40;16529:49;16645:16;16622:22;:40::i;:::-;:44;:71;;;;-1:-1:-1;;;;;;16671:22:0;;;;;;:11;:22;;;;;;;;16670:23;16622:71;16619:247;;;16718:40;:18;16741:16;16718:22;:40::i;:::-;-1:-1:-1;;;;;16805:33:0;;;;;;:22;:33;;;;;;16695:63;;-1:-1:-1;16805:59:0;;16695:63;16805:37;:59::i;:::-;-1:-1:-1;;;;;16769:33:0;;;;;;:22;:33;;;;;:95;16619:247;16207:666;;;;16084:789;;;;:::o;14342:355::-;-1:-1:-1;;;;;14446:20:0;;14438:70;;;;-1:-1:-1;;;14438:70:0;;10358:2:1;14438:70:0;;;10340:21:1;10397:2;10377:18;;;10370:30;10436:34;10416:18;;;10409:62;-1:-1:-1;;;10487:18:1;;;10480:35;10532:19;;14438:70:0;10156:401:1;14438:70:0;-1:-1:-1;;;;;14527:23:0;;14519:71;;;;-1:-1:-1;;;14519:71:0;;10764:2:1;14519:71:0;;;10746:21:1;10803:2;10783:18;;;10776:30;10842:34;10822:18;;;10815:62;-1:-1:-1;;;10893:18:1;;;10886:33;10936:19;;14519:71:0;10562:399:1;14519:71:0;14619:17;14629:6;14619:9;:17::i;:::-;14609:6;:27;;14601:88;;;;-1:-1:-1;;;14601:88:0;;11168:2:1;14601:88:0;;;11150:21:1;11207:2;11187:18;;;11180:30;11246:34;11226:18;;;11219:62;-1:-1:-1;;;11297:18:1;;;11290:47;11354:19;;14601:88:0;10966:413:1;14928:206:0;-1:-1:-1;;;;;15021:19:0;;;;;;:11;:19;;;;;;;;15020:20;:47;;;;-1:-1:-1;;;;;;15045:22:0;;;;;;:11;:22;;;;;;;;15044:23;15020:47;15017:110;;;15077:14;;;;;;;15069:56;;;;-1:-1:-1;;;15069:56:0;;11586:2:1;15069:56:0;;;11568:21:1;11625:2;11605:18;;;11598:30;11664:31;11644:18;;;11637:59;11713:18;;15069:56:0;11384:353:1;15146:382:0;-1:-1:-1;;;;;15250:22:0;;;;;;:11;:22;;;;;;;;15249:23;:47;;;;-1:-1:-1;;;;;;15277:19:0;;;;;;:11;:19;;;;;;;;15276:20;15249:47;:77;;;;-1:-1:-1;;;;;;15300:26:0;;15321:4;15300:26;;15249:77;:107;;;;-1:-1:-1;15351:4:0;;-1:-1:-1;;;;;15330:26:0;;;15351:4;;15330:26;;15249:107;:128;;;;-1:-1:-1;15373:4:0;;-1:-1:-1;;;;;15360:17:0;;;15373:4;;15360:17;;15249:128;:161;;;;-1:-1:-1;15394:16:0;;-1:-1:-1;;;;;15381:29:0;;;15394:16;;15381:29;;15249:161;15246:275;;;15469:15;;15458:6;15435:20;15445:9;15435;:20::i;:::-;:29;;;;:::i;:::-;15434:50;;15426:93;;;;-1:-1:-1;;;15426:93:0;;11944:2:1;15426:93:0;;;11926:21:1;11983:2;11963:18;;;11956:30;12022:32;12002:18;;;11995:60;12072:18;;15426:93:0;11742:354:1;15735:341:0;15846:4;;-1:-1:-1;;;;;15836:14:0;;;15846:4;;15836:14;15833:124;;15870:14;;15860:6;:24;;:47;;;-1:-1:-1;;;;;;15888:19:0;;;;;;:11;:19;;;;;;;;15860:47;:73;;;-1:-1:-1;;;;;;15911:22:0;;;;;;:11;:22;;;;;;;;15860:73;15852:103;;;;-1:-1:-1;;;15852:103:0;;12303:2:1;15852:103:0;;;12285:21:1;12342:2;12322:18;;;12315:30;-1:-1:-1;;;12361:18:1;;;12354:47;12418:18;;15852:103:0;12101:341:1;15852:103:0;15985:12;;15975:6;:22;;:45;;;-1:-1:-1;;;;;;16001:19:0;;;;;;:11;:19;;;;;;;;15975:45;:71;;;-1:-1:-1;;;;;;16024:22:0;;;;;;:11;:22;;;;;;;;15975:71;15967:101;;;;-1:-1:-1;;;15967:101:0;;12303:2:1;15967:101:0;;;12285:21:1;12342:2;12322:18;;;12315:30;-1:-1:-1;;;12361:18:1;;;12354:47;12418:18;;15967:101:0;12101:341:1;15536:191:0;15633:4;;-1:-1:-1;;;;;15620:17:0;;;15633:4;;15620:17;:41;;;;-1:-1:-1;;;;;;15642:19:0;;;;;;:11;:19;;;;;;;;15641:20;15620:41;:54;;;;-1:-1:-1;15666:8:0;;;;15665:9;15620:54;:68;;;;-1:-1:-1;15679:9:0;;-1:-1:-1;;;15679:9:0;;;;15678:10;15620:68;15617:103;;;15702:9;;:16;;15716:1;15702:13;:16::i;:::-;15690:9;:28;15536:191;;:::o;28998:532::-;29079:14;;;;;;;:38;;;;-1:-1:-1;;;;;;29098:19:0;;;;;;:11;:19;;;;;;;;29097:20;29079:38;:68;;;;-1:-1:-1;29142:4:0;;-1:-1:-1;;;;;29121:26:0;;;29142:4;;29121:26;29079:68;:94;;;;-1:-1:-1;29165:8:0;;;;29164:9;29079:94;:108;;;;-1:-1:-1;29178:9:0;;-1:-1:-1;;;29178:9:0;;;;29177:10;29079:108;29076:145;;;29217:1;29189:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;29076:145:0;29254:16;;29234;;:36;;:81;;;;;29299:16;;29274:21;:41;;29234:81;:122;;;;;29339:17;;29319:16;;:37;;29234:122;:147;;;;-1:-1:-1;29374:7:0;;;;;;;29234:147;:171;;;;-1:-1:-1;;;;;;29386:19:0;;;;;;:11;:19;;;;;;;;29385:20;29234:171;:201;;;;-1:-1:-1;29430:4:0;;-1:-1:-1;;;;;29409:26:0;;;29430:4;;29409:26;29234:201;:219;;;;-1:-1:-1;29439:14:0;;;;;;;29234:219;:232;;;;-1:-1:-1;29458:8:0;;;;29457:9;29234:232;:246;;;;-1:-1:-1;29471:9:0;;-1:-1:-1;;;29471:9:0;;;;29470:10;29234:246;:269;;;;-1:-1:-1;29494:9:0;;-1:-1:-1;;;;;29484:19:0;;;29494:9;;;;;29484:19;;29234:269;29231:292;;;29505:16;:14;:16::i;19426:164::-;19502:33;19517:6;19525:9;19502:14;:33::i;:::-;19499:84;;;19537:29;19552:13;;19537:14;:29::i;:::-;19580:1;19568:9;:13;19426:164;;:::o;14705:215::-;14782:9;:24;;-1:-1:-1;;;;;;14782:24:0;;;14830:4;;-1:-1:-1;;;;;14820:14:0;;;14830:4;;14820:14;:41;;;;-1:-1:-1;;;;;;14839:22:0;;;;;;:11;:22;;;;;;;;14838:23;14820:41;:55;;;;-1:-1:-1;14866:9:0;;-1:-1:-1;;;14866:9:0;;;;14865:10;14820:55;:68;;;;-1:-1:-1;14880:8:0;;;;14879:9;14820:68;14817:96;;;14890:9;:21;;-1:-1:-1;;;;;14890:21:0;;;;-1:-1:-1;;;;;;14890:21:0;;;;;;14705:215;;:::o;18191:871::-;18330:28;18361:48;18372:7;18381;18390:6;18398:10;18361;:48::i;:::-;-1:-1:-1;;;;;18423:19:0;;;;;;:11;:19;;;;;;18330:79;;-1:-1:-1;18423:19:0;;18420:69;;;-1:-1:-1;;;;;18464:15:0;;;;;;:7;:15;;;;;;:23;;18480:7;;18464:23;:::i;:::-;-1:-1:-1;;;;;18446:15:0;;;;;;:7;:15;;;;;:41;18420:69;-1:-1:-1;;;;;18502:22:0;;;;;;:11;:22;;;;;;;;18499:87;;;18567:17;;;;-1:-1:-1;;;;;18548:18:0;;;;;;:7;:18;;;;;;:36;;18567:17;18548:36;:::i;:::-;-1:-1:-1;;;;;18527:18:0;;;;;;:7;:18;;;;;:57;18499:87;18630:9;;-1:-1:-1;;;;;18614:15:0;;18630:9;18614:15;;;:7;:15;;;;;;:25;;18630:9;18614:25;:::i;:::-;-1:-1:-1;;;;;18596:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;18690:17;;;18671:18;;;;;;;;;;:36;;18690:17;18671:36;:::i;:::-;-1:-1:-1;;;;;18650:18:0;;;;;;:7;:18;;;;;:57;18744:17;18754:6;18744:9;:17::i;:::-;-1:-1:-1;;;;;18718:23:0;;;;;;:15;:23;;;;;:43;18803:20;18813:9;18803;:20::i;:::-;-1:-1:-1;;;;;18772:28:0;;;;;;:17;:28;;;;;;;:51;;;;18846:6;;;18854;;;;18834:27;;18846:6;18834:11;:27::i;:::-;18872:39;18886:1;:11;;;18899:1;:11;;;18872:13;:39::i;:::-;18944:9;-1:-1:-1;;;;;18927:46:0;18936:6;-1:-1:-1;;;;;18927:46:0;;18955:1;:17;;;18927:46;;;;160:25:1;;148:2;133:18;;14:177;18927:46:0;;;;;;;;18987:11;;;;:15;18984:71;;19034:4;-1:-1:-1;;;;;19009:44:0;19018:6;-1:-1:-1;;;;;19009:44:0;;19041:1;:11;;;19009:44;;;;160:25:1;;148:2;133:18;;14:177;19009:44:0;;;;;;;;18319:743;18191:871;;;;;;:::o;16881:280::-;-1:-1:-1;;;;;17006:23:0;;;;;;;:15;:23;;;;;;;;17031:28;;;;;:17;:28;;;;;;16966:94;;16987:6;;16995:9;;17006:23;16966:20;:94::i;:::-;17091:17;17101:6;17091:9;:17::i;:::-;-1:-1:-1;;;;;17071:17:0;;;;;;:9;:17;;;;;:37;17133:20;17143:9;17133;:20::i;:::-;-1:-1:-1;;;;;17110:20:0;;;;;;;:9;:20;;;;;:43;-1:-1:-1;16881:280:0:o;29704:531::-;29801:7;;29837;;29754;;;;;29855:270;29879:9;:16;29875:20;;29855:270;;;29945:7;29921;:21;29929:9;29939:1;29929:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29929:12:0;29921:21;;;;;;;;;;;;;:31;;:66;;;29980:7;29956;:21;29964:9;29974:1;29964:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29964:12:0;29956:21;;;;;;;;;;;;;:31;29921:66;29917:97;;;29997:7;;30006;;29989:25;;;;;;;29704:531;;:::o;29917:97::-;30047:7;:21;30055:9;30065:1;30055:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30055:12:0;30047:21;;;;;;;;;;;;;30039:29;;:7;:29;:::i;:::-;30029:39;;30101:7;:21;30109:9;30119:1;30109:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30109:12:0;30101:21;;;;;;;;;;;;;30093:29;;:7;:29;:::i;:::-;30083:39;-1:-1:-1;29897:3:0;;29855:270;;;;30157:7;;30149;;:15;;;;:::i;:::-;30139:7;:25;30135:56;;;30174:7;;30183;;30166:25;;;;;;29704:531;;:::o;30135:56::-;30210:7;;30219;;-1:-1:-1;29704:531:0;-1:-1:-1;29704:531:0:o;27174:1157::-;27278:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27278:28:0;27323:7;27322:8;:41;;;;27334:29;27344:6;27352:10;27334:9;:29::i;:::-;27319:110;;;27378:17;;;:27;;;27418:8;;27319:110;27443:6;27442:7;:22;;;;;27454:10;27453:11;27442:22;27439:296;;;27480:17;27500:41;27529:11;;27500:24;27512:11;;27500:7;:11;;:24;;;;:::i;:41::-;27480:61;;27575:11;;27559:8;:12;;;:27;27556:75;;27618:11;;27605:8;:12;27597:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27588:6;;;:41;27556:75;27673:6;;;;27659:21;;:9;;:13;:21::i;:::-;27645:11;;;:35;27715:17;27723:9;27715:7;:17;:::i;:::-;27695;;;:37;-1:-1:-1;27439:296:0;27748:6;27745:272;;;27770:17;27790:37;27815:11;;27790:20;27802:7;;27790;:11;;:20;;;;:::i;:37::-;27770:57;;27861:7;;27845:8;:12;;;:23;27842:71;;27900:11;;27887:8;:12;27879:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27870:6;;;:41;27842:71;27955:6;;;;27941:21;;:9;;:13;:21::i;:::-;27927:11;;;:35;27997:17;28005:9;27997:7;:17;:::i;:::-;27977;;;:37;-1:-1:-1;27745:272:0;28030:10;28027:278;;;28056:17;28076:38;28102:11;;28076:21;28088:8;;28076:7;:11;;:21;;;;:::i;:38::-;28056:58;;28148:8;;28132;:12;;;:24;28129:72;;28188:11;;28175:8;:12;28167:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28158:6;;;:41;28129:72;28243:6;;;;28229:21;;:9;;:13;:21::i;:::-;28215:11;;;:35;28285:17;28293:9;28285:7;:17;:::i;:::-;28265;;;:37;-1:-1:-1;27174:1157:0;;;;;;:::o;28339:511::-;28464:15;;;;28560:19;28568:11;28560:7;:19;:::i;:::-;28550:29;;28594:7;28590:58;;-1:-1:-1;28623:7:0;;-1:-1:-1;28641:1:0;;-1:-1:-1;28641:1:0;28616:29;;28590:58;28672:11;28665:1;:6;;;:18;;;;:::i;:::-;28658:25;;28718:11;28706:1;:11;;;:23;;;;:::i;:::-;28694:35;-1:-1:-1;28694:35:0;28759:12;28767:4;28759:7;:12;:::i;:::-;:22;;;;:::i;:::-;28740:41;;28339:511;;;;;;;;;;:::o;21576:360::-;21664:16;;;21678:1;21664:16;;;;;;;;21640:21;;21664:16;;;;;;;;-1:-1:-1;;21701:6:0;;:13;;;-1:-1:-1;;;21701:13:0;;;;21640:40;;-1:-1:-1;;;;;;21701:6:0;;;;:11;;-1:-1:-1;21701:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21691:4;21696:1;21691:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21691:23:0;;;-1:-1:-1;;;;;21691:23:0;;;;;21743:4;21725;21730:1;21725:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21725:23:0;;;:7;;;;;;;;;:23;21759:6;;21892:4;;21759:169;;-1:-1:-1;;;21759:169:0;;:6;;;;:57;;21824:9;;21759:169;;:6;;21865:4;;21892;;;;21912:15;;21759:169;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19071:347;19153:4;19170:19;19220:13;;19192:24;19210:4;19192:9;:24::i;:::-;19252:8;;19192:41;-1:-1:-1;19192:41:0;;-1:-1:-1;19252:8:0;;19251:9;:24;;;;-1:-1:-1;19264:11:0;;;;;;;19251:24;:48;;;;-1:-1:-1;;;;;;19280:19:0;;;;;;:11;:19;;;;;;;;19279:20;19251:48;:66;;;;-1:-1:-1;19303:14:0;;;;;;;19251:66;:100;;;;-1:-1:-1;19347:4:0;;-1:-1:-1;;;;;19334:17:0;;;19347:4;;19334:17;19251:100;:127;;;;;19368:10;;19355:9;;:23;;19251:127;:145;;;;;19382:14;19251:145;:159;;;;-1:-1:-1;19401:9:0;;-1:-1:-1;;;19401:9:0;;;;19400:10;19244:166;19071:347;-1:-1:-1;;;;19071:347:0:o;19598:1179::-;9519:8;:15;;-1:-1:-1;;9519:15:0;9530:4;9519:15;;;;;;19692:8:::1;::::0;9519;;19691:24:::1;::::0;19713:1:::1;::::0;19691:17:::1;::::0;19692:8;19691:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;19668:47;;19729:8;;19741:1;19729:13:::0;19726:132:::1;;19818:23:::0;;19782:16;;19759:18;;:97:::1;::::0;19854:1:::1;::::0;19759:90:::1;::::0;19847:1:::1;::::0;19759:83:::1;::::0;19818:23;;19759:83;;:22:::1;:40::i;:::-;:44:::0;::::1;:83::i;:97::-;19744:112;;19726:132;19912:18:::0;;19868:32:::1;::::0;19933:12;;19903:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;19868:77:::0;-1:-1:-1;19956:14:0::1;19973:33;19868:77:::0;19973:6;:33:::1;:::i;:::-;19956:50:::0;-1:-1:-1;20042:21:0::1;20074:24;19956:50:::0;20074:16:::1;:24::i;:::-;20109:20;20132:38;20156:14:::0;20132:21:::1;:38;:::i;:::-;20233:18:::0;;20109:61;;-1:-1:-1;20181:19:0::1;::::0;20218:33:::1;::::0;:12;:33:::1;:::i;:::-;20202:50;::::0;:12;:50:::1;:::i;:::-;20309:18:::0;;20181:71;;-1:-1:-1;20263:29:0::1;::::0;20295:32:::1;::::0;20181:71;20295:32:::1;:::i;:::-;20263:64:::0;-1:-1:-1;20341:25:0;;20338:108:::1;;20382:61;20395:24;20421:21;20382:12;:61::i;:::-;20503:23:::0;;20456:21:::1;::::0;20480:47:::1;::::0;:18:::1;:11:::0;20496:1:::1;20480:15;:18::i;:47::-;20456:71:::0;-1:-1:-1;20541:17:0;;20538:80:::1;;20580:16;::::0;:35:::1;::::0;20601:13;20580:20:::1;:35::i;:::-;20561:16;:54:::0;20538:80:::1;20628:15;20646:43;20672:16;;20646:21;:25;;:43;;;;:::i;:::-;20628:61:::0;-1:-1:-1;20703:20:0;;20700:70:::1;;20733:16;::::0;20725:43:::1;::::0;-1:-1:-1;;;;;20733:16:0;;::::1;::::0;20725:43;::::1;;;::::0;20760:7;;20733:16:::1;20725:43:::0;20733:16;20725:43;20760:7;20733:16;20725:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20700:70;-1:-1:-1::0;;9539:8:0;:16;;-1:-1:-1;;9539:16:0;;;-1:-1:-1;;;;;;;;19598:1179:0:o;17551:126::-;17630:4;17619:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;17646:11:0;:23;;17665:4;;17646:11;:15;;:23;;17665:4;;17646:23;:::i;:::-;;;;-1:-1:-1;;;;17551:126:0:o;26303:241::-;26406:9;26383:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;26449:4:0;26429:26;;;;:11;:26;;;;;;;;26426:66;;;26473:4;26457:22;;;;:7;:22;;;;;:33;;26481:9;;26457:22;:33;;26481:9;;26457:33;:::i;:::-;;;;-1:-1:-1;;26426:66:0;26518:4;26502:22;;;;:7;:22;;;;;:34;;26527:9;;26502:22;:34;;26527:9;;26502:34;:::i;26956:210::-;27028:4;27053:6;:22;;;;-1:-1:-1;27063:7:0;;:12;27053:22;27052:57;;;;27081:10;:27;;;;-1:-1:-1;27095:8:0;;:13;27081:27;27052:105;;;;27115:6;27114:7;:22;;;;;27126:10;27125:11;27114:22;:42;;;;-1:-1:-1;;27140:11:0;;:16;;26956:210;-1:-1:-1;;26956:210:0:o;21134:434::-;21224:16;;;21238:1;21224:16;;;;;;;;21200:21;;21224:16;;;;;;;;;;-1:-1:-1;21224:16:0;21200:40;;21269:4;21251;21256:1;21251:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21251:23:0;;;:7;;;;;;;;;;:23;;;;21295:6;;:13;;;-1:-1:-1;;;21295:13:0;;;;:6;;;;;:11;;:13;;;;;21251:7;;21295:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21285:4;21290:1;21285:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21285:23:0;;;:7;;;;;;;;;:23;21351:6;;21319:53;;21336:4;;21351:6;21360:11;21319:8;:53::i;:::-;21383:6;;:177;;-1:-1:-1;;;21383:177:0;;-1:-1:-1;;;;;21383:6:0;;;;:57;;:177;;21455:11;;21383:6;;21497:4;;21524;;21544:15;;21383:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21189:379;21134:434;:::o;20785:341::-;20898:6;;20866:53;;20883:4;;-1:-1:-1;;;;;20898:6:0;20907:11;20866:8;:53::i;:::-;20930:6;;21071:16;;20930:188;;-1:-1:-1;;;20930:188:0;;20993:4;20930:188;;;14748:34:1;14798:18;;;14791:34;;;20930:6:0;14841:18:1;;;14834:34;;;14884:18;;;14877:34;-1:-1:-1;;;;;21071:16:0;;;14927:19:1;;;14920:44;21102:15:0;14980:19:1;;;14973:35;20930:6:0;;;:22;;20960:9;;14682:19:1;;20930:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:592:1:-;309:6;317;325;333;341;349;357;410:3;398:9;389:7;385:23;381:33;378:53;;;427:1;424;417:12;378:53;-1:-1:-1;;450:23:1;;;520:2;505:18;;492:32;;-1:-1:-1;571:2:1;556:18;;543:32;;622:2;607:18;;594:32;;-1:-1:-1;673:3:1;658:19;;645:33;;-1:-1:-1;725:3:1;710:19;;697:33;;-1:-1:-1;777:3:1;762:19;749:33;;-1:-1:-1;196:592:1;-1:-1:-1;196:592:1:o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;929:247;988:6;1041:2;1029:9;1020:7;1016:23;1012:32;1009:52;;;1057:1;1054;1047:12;1009:52;1096:9;1083:23;1115:31;1140:5;1115:31;:::i;1181:548::-;1293:4;1322:2;1351;1340:9;1333:21;1383:6;1377:13;1426:6;1421:2;1410:9;1406:18;1399:34;1451:1;1461:140;1475:6;1472:1;1469:13;1461:140;;;1570:14;;;1566:23;;1560:30;1536:17;;;1555:2;1532:26;1525:66;1490:10;;1461:140;;;1465:3;1650:1;1645:2;1636:6;1625:9;1621:22;1617:31;1610:42;1720:2;1713;1709:7;1704:2;1696:6;1692:15;1688:29;1677:9;1673:45;1669:54;1661:62;;;;1181:548;;;;:::o;1734:315::-;1802:6;1810;1863:2;1851:9;1842:7;1838:23;1834:32;1831:52;;;1879:1;1876;1869:12;1831:52;1918:9;1905:23;1937:31;1962:5;1937:31;:::i;:::-;1987:5;2039:2;2024:18;;;;2011:32;;-1:-1:-1;;;1734:315:1:o;2246:118::-;2332:5;2325:13;2318:21;2311:5;2308:32;2298:60;;2354:1;2351;2344:12;2369:309;2434:6;2442;2495:2;2483:9;2474:7;2470:23;2466:32;2463:52;;;2511:1;2508;2501:12;2463:52;2547:9;2534:23;2524:33;;2607:2;2596:9;2592:18;2579:32;2620:28;2642:5;2620:28;:::i;:::-;2667:5;2657:15;;;2369:309;;;;;:::o;2891:456::-;2968:6;2976;2984;3037:2;3025:9;3016:7;3012:23;3008:32;3005:52;;;3053:1;3050;3043:12;3005:52;3092:9;3079:23;3111:31;3136:5;3111:31;:::i;:::-;3161:5;-1:-1:-1;3218:2:1;3203:18;;3190:32;3231:33;3190:32;3231:33;:::i;:::-;2891:456;;3283:7;;-1:-1:-1;;;3337:2:1;3322:18;;;;3309:32;;2891:456::o;3352:180::-;3411:6;3464:2;3452:9;3443:7;3439:23;3435:32;3432:52;;;3480:1;3477;3470:12;3432:52;-1:-1:-1;3503:23:1;;3352:180;-1:-1:-1;3352:180:1:o;3726:316::-;3803:6;3811;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;-1:-1:-1;;3911:23:1;;;3981:2;3966:18;;3953:32;;-1:-1:-1;4032:2:1;4017:18;;;4004:32;;3726:316;-1:-1:-1;3726:316:1:o;4047:248::-;4115:6;4123;4176:2;4164:9;4155:7;4151:23;4147:32;4144:52;;;4192:1;4189;4182:12;4144:52;-1:-1:-1;;4215:23:1;;;4285:2;4270:18;;;4257:32;;-1:-1:-1;4047:248:1:o;4300:388::-;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;4693:382::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:28;4915:5;4893:28;:::i;5314:356::-;5516:2;5498:21;;;5535:18;;;5528:30;5594:34;5589:2;5574:18;;5567:62;5661:2;5646:18;;5314:356::o;6027:127::-;6088:10;6083:3;6079:20;6076:1;6069:31;6119:4;6116:1;6109:15;6143:4;6140:1;6133:15;6159:127;6220:10;6215:3;6211:20;6208:1;6201:31;6251:4;6248:1;6241:15;6275:4;6272:1;6265:15;6291:128;6358:9;;;6379:11;;;6376:37;;;6393:18;;:::i;6424:127::-;6485:10;6480:3;6476:20;6473:1;6466:31;6516:4;6513:1;6506:15;6540:4;6537:1;6530:15;7323:217;7363:1;7389;7379:132;;7433:10;7428:3;7424:20;7421:1;7414:31;7468:4;7465:1;7458:15;7496:4;7493:1;7486:15;7379:132;-1:-1:-1;7525:9:1;;7323:217::o;7967:125::-;8032:9;;;8053:10;;;8050:36;;;8066:18;;:::i;8457:184::-;8527:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:52;;;8596:1;8593;8586:12;8548:52;-1:-1:-1;8619:16:1;;8457:184;-1:-1:-1;8457:184:1:o;8925:245::-;8992:6;9045:2;9033:9;9024:7;9020:23;9016:32;9013:52;;;9061:1;9058;9051:12;9013:52;9093:9;9087:16;9112:28;9134:5;9112:28;:::i;9983:168::-;10056:9;;;10087;;10104:15;;;10098:22;;10084:37;10074:71;;10125:18;;:::i;12579:251::-;12649:6;12702:2;12690:9;12681:7;12677:23;12673:32;12670:52;;;12718:1;12715;12708:12;12670:52;12750:9;12744:16;12769:31;12794:5;12769:31;:::i;12835:465::-;12888:3;12926:5;12920:12;12953:6;12948:3;12941:19;12979:4;13008;13003:3;12999:14;12992:21;;13047:4;13040:5;13036:16;13070:1;13080:195;13094:6;13091:1;13088:13;13080:195;;;13159:13;;-1:-1:-1;;;;;13155:39:1;13143:52;;13215:12;;;;13250:15;;;;13191:1;13109:9;13080:195;;;-1:-1:-1;13291:3:1;;12835:465;-1:-1:-1;;;;;12835:465:1:o;13305:510::-;13576:6;13565:9;13558:25;13619:3;13614:2;13603:9;13599:18;13592:31;13539:4;13640:57;13692:3;13681:9;13677:19;13669:6;13640:57;:::i;:::-;-1:-1:-1;;;;;13733:32:1;;;;13728:2;13713:18;;13706:60;-1:-1:-1;13797:2:1;13782:18;13775:34;13632:65;13305:510;-1:-1:-1;;13305:510:1:o;13820:582::-;14119:6;14108:9;14101:25;14162:6;14157:2;14146:9;14142:18;14135:34;14205:3;14200:2;14189:9;14185:18;14178:31;14082:4;14226:57;14278:3;14267:9;14263:19;14255:6;14226:57;:::i;:::-;-1:-1:-1;;;;;14319:32:1;;;;14314:2;14299:18;;14292:60;-1:-1:-1;14383:3:1;14368:19;14361:35;14218:65;13820:582;-1:-1:-1;;;13820:582:1:o;15019:306::-;15107:6;15115;15123;15176:2;15164:9;15155:7;15151:23;15147:32;15144:52;;;15192:1;15189;15182:12;15144:52;15221:9;15215:16;15205:26;;15271:2;15260:9;15256:18;15250:25;15240:35;;15315:2;15304:9;15300:18;15294:25;15284:35;;15019:306;;;;;:::o
Swarm Source
ipfs://da8847129360356a4f9f0e696ca336c14791caa607953d8a84a24aecebe20cac
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.